使用ADC只需要对相应的寄存器进行配置,然后启动ADC即可,启动ADC有两种方法:
1. 手动完成启动。
2. 读取上一次转换结果后自动启动下一次ADC转换。
得到ADC是否转换完成的信息的方法有两种方法:
1. 查询法:查询寄存器ADCCON的第15位(ADC的转换完成位)。
2. 中断法:转换完成后,产生ADC中断信号。
当不使用触摸屏时,与ADC相关的寄存器主要有据寄存器ADCCON和寄存器ADCDAT0。寄存器ADCCON主要用于选择ADC的启动方式、设置ADC转换时钟以及ADC转换结束标志位等。寄存器ADCDAT0中存放了ADC抓换所得的结果,ADC转换结束后,可以直接读改寄存器的值来得到转换结果。
注意:普通ADC转换数据值存储在ADCDAT0的低10位,数据范围0~0x3ff。ADC的时钟来自PCLK时钟的分频,并且时钟必须小于PCLK/5。
//****************ADC 中断*****************
void ADC_start();
extern int ADC_dat;
void __irq ADC_isr()
{
unsigned long irqOffSet;
send_dat(ADC_dat);
send_str((unsigned char *)"ADC is started!\r\n");
ADC_dat = 1010;//((int)rADCDAT0&0x3ff);//读取ADC的转换值
//dely(100);
send_dat(ADC_dat);
//ADC_start();//启动AD
send_dat(ADC_dat);
irqOffSet = rINTOFFSET; // 取得中断号
rSUBSRCPND |= (1<<10)|(1<<9);
rSRCPND |= 1<
rINTPND = rINTPND;//中断标志清零
dely(550);
send_str((unsigned char *)"ADC is end!\r\n");
}
void Init_ADC()
{
//寄存器进行清零
rADCCON &= ~((1<<14)|(0xff<<6)|(0x07<<3)|(1<<2)|(1<<1)|(1<<0));
//允许分频,预分频值为49,通道0,正常工作模式,读数时不启动转换
rADCCON |= (1<<14)|(49<<6)|(0<<3)|(0<<2)|(0<<1);
rINTSUBMSK &= ~((1<<10)|(1<<9));
rINTMSK &= ~(1<<31);//使能ADC中断
pISR_ADC = (unsigned int)ADC_isr;
send_str((unsigned char *)"ADC initial is OK!\r\n");
}
void ADC_start()
{
rADCCON |= 0x01;//启动AD转换
while(!(rADCCON&0x01));//ADC 开始后,bit0会自动清零
}
int get_ADC_data(void)
{
//send_dat(ADC_dat);
send_str((unsigned char *)"test is started!\r\n");
ADC_dat = 1010;//((int)rADCDAT0&0x3ff);//读取ADC的转换值
//dely(100);
send_dat(ADC_dat);
//ADC_start();//启动AD
send_dat(ADC_dat);
send_str((unsigned char *)"test is end!\r\n");
return 0;
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』
热门文章
更多