- 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连在一起的。
求大神指点一下,上述不妥之处无喷,毕竟谁都有第一次吧。
此帖出自
小平头技术问答
一周热门 更多>