?? s3c44b0xadconverterapplication.txt
字號:
#include “s3c44b0.h” //頭文件
#define MAX_VALUE 0x3FF //數字量最大值
#define MIN_VALUE 0x0//數字量最小值
init _interrupt_handler((unsigned int)IsrIRQ);//中斷初始化聲明
install_isr_handler(HandlerTIMER0, (void *)timer0_isr);
void timer0-isr(void)//中斷處理程序聲明
test_adc();
char display_buffer[6];//數碼管現實緩沖區
int refresh_index=0;
unsigned char seg7table[16]={0xc0,0cf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e} //定義0-f
void main (void)
{ rTCFG0=0x0;
rTCNTB0=0x2000;
rTCON=0x00000009;//T0自動重載&開始
rINTCON=0x7;// 屏蔽 IRQ,FIQ
init _interrupt_handler((unsigned int)IsrIRQ);
install_isr_handler(HandlerTIMER0, (void *)timer0_isr);//時鐘初始化
iINTMOD=0x0;//設置中斷為IRQ模式
rINTMSK=0x07FFFFFF&(BIT_GLOBAL|BIT_TIMER0);
rINTCON=0x5;
test_adc();//采集數據
}
void test _ adc (void)
{ int loop_delay; //延遲變量
int data; //存放采集數據的變量
int get_index; //采集次數變量
int buffer[4]; //存放最終的轉換數據
rCLKCON=0x7FF8;//時鐘初始化
while(1){
rADCPSR=0x14; //設置ADCPSR的值
data=0;
for(get_index=0;get_index<16;get_index++)
{ rADCCON=0x1|(0x0<<2); //設置AIN0
while(rADCCON&0x1); //為避免第一個標志位有錯
while(!(rADCCON&0x40); //檢測ADC是否轉換結束
data+=rADCDAT; //讀入轉換值
for(loop_delay=1000;loop_delay;loop_delay--); //延遲
}
data/= (get_index-1); //取平均值
value=trans_input(data);//數字量轉模擬量
buffer[0]=value/10;
buffer[1]=value%10;
data=0;
for(get_index=0;get_index<16;get_index++)
{ rADCCON=0x1|(0x1<<2); // 設置AIN1
while(rADCCON&0x1); //為避免第一個標志位有錯
while(!(rADCCON&0x40); //檢測ADC是否轉換結束
data+=rADCDAT; //讀入轉換值
for(loop_delay=1000;loop_delay;loop_delay--);//延遲
}
data/= (get_index-1); //取平均值
value=trans_input(data);
buffer[2]=value/10;
buffer[3]=value%10;
for(loop_delay=1000;loop_delay;loop_delay--); //延遲
}
char trans_input (int value)
{if (value==MAX_value) return 50; //模擬信號范圍0~50
return (char)(value*50/MAX_VALUE-MINVALUE);}
void timer0-isr(void){//中斷處理程序
rI_ISPC=BIT_TIMER0;
if (refresh_index==2) refresh_index++;
if(refresh_index==5) refresh_index=0;
//設置數碼管段選
*((unsigned char *) 0x0200006)=0x3f&(0x01<<refresh_index);
*((unsigned char *)0x0200004)=seg7table[display_buffer[refresh_index]]
Refresh_index++; }
void init_interrupt_handle(unsigned int irq_handle)
{
int i;
rINTPND=0x0; //清除所有的未決的中斷
rI_ISPC=0x3FFFFFF;//每位置1,清除中斷掛起條件
for(i=0;i<256;i+4) //清除中斷表
{*(unsigned int*)(_ISR_STARTADDRESS+i)=0;}
*(unsigned int*)(HandleIRQ)=irq_handle;}
void install_isr_handle(int irq_no,void* irq_routine)
{ *(unsigned int *)(irq_no)=(unsigned int)irq_routine;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -