|
为什么我写的ad转换在电压小于2.56v时精确但是大于2.56v时就显示不对了呢,貌似是实际值减去2.56v
代码:(cvavr)
#include <mega16.h>
#include <delay.h>
#define uchar unsigned char
#define uint unsigned int
uint adc_data;
void port_init()
{
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
}
void display(uint dat)
{
uchar i=0;
i=dat%10;
PORTB=0x07;
PORTC=i;
delay_ms(1);
i=(dat%100)/10;
PORTB=0x0b;
PORTC=i;
delay_ms(1);
i=(dat%1000)/100;
PORTB=0x1d; //添加一位小数点在第二位
PORTC=i;
delay_ms(1);
i=(dat/1000);
PORTB=0x0e;
PORTC=i;
delay_ms(1);
}
void adc_init()
{
ADCSR=0x00;
ADMUX=0x40;
ACSR=0x80;
ADCSRA=0xEB;
}
interrupt [ADC_INT] void adc_isr(void)
{
adc_data=ADCL; //先把低八位放入adc_data的低八位
// Read the 8 most significant bits
// of the AD conversion result
adc_data|=(int)ADCH<<8; //再把高两位移入adc_data的9,10位 ,因为ADCH为8位,所以若不强制转换为16位则ADCH<<8的值为0;
// Place your code here
}
void main()
{
uint dat=0;
SREG^=0x80;
port_init();
adc_init();
SREG|=0x80;
while(1)
{
dat=(adc_data*125)>>8;
display(dat);
}
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|