| 
高级会员 主题
回帖0
积分938
阅读权限30
注册时间2013-2-9
最后登录1970-1-1
在线时间 小时
 
 | 
 
| uint mega16_ad() {
 uint addata;
 DDRA=0X00;
 PORTA=0X00;
 cli();
 ADMUX        = 0x00;
 ADCSRA=0x87;
 ADCSRA|=BIT(ADSC);
 ACSR= 0x80;
 SFIOR |= 0x00;
 while(!(ADCSRA&(BIT(ADIF))));
 addata=ADCL;
 addata=addata+ADCH*256;
 ADCSRA|=BIT(ADIF);
 ADCSRA=0X00;
 sei();
 return addata;
 }
 void port_init(void)
 {
 PORTA = 0x00;
 DDRA  = 0x00;
 }
 void init_devices(void)
 {
 port_init();
 MCUCR  = 0x00;
 MCUCSR = 0x80;//禁止JTAG
 sei();//开全局中断
 }
 
 int main(void)
 {
 uint i;
 uchar ad0[4]={0,0,0,86,86};//初始值
 init_devices();
 LCD_init(); //LCD初始化
 LCD_clear();//清屏
 DDRD  =0xff;
 while(1)
 {
 int xx=mega16_ad();
 itoa(xx,ad0,10);// int to uchar
 for(i=0;i<=4;i++)                                        //显示转换的数值
 {
 LCD_write_char(i,0,ad0[i]);
 _delay_ms(10);
 };
 _delay_ms(10);
 LCD_write_str(0,1,"yes?+2");//第二行显示
 PORTD =0xcd;//点亮LED
 }
 初学单片机,看着手册设定的各个寄存器,现在AD转换的结果在400~500之间狂调,用的外部参考电压5V也不至于这样吧,
 还有一点不理解的,ADCH+ADCL,应该显示在0-255之间,怎么会一直显示400~500呢?
 硬件环境是在X宝买的M16最小系统,看原理图AVCC aref连在一起的。
 求大神指点一下,上述不妥之处无喷,毕竟谁都有第一次吧。
 
 
 | 
 |