AVR单片机ADC采集控制问题,我的程序为什么不能起作用 70

#include<avr/io.h>#include<avr/interrupt.h>#defineucharunsignedchar#defineuintunsigne... #include<avr/io.h>
#include<avr/interrupt.h>
#define uchar unsigned char
#define uint unsigned int

void PWM(void)//PWM输出初始化
{
DDRD|=0X30;

TCCR1A=0X63;
TCCR1B=0X13;

OCR1A=1249;
OCR1B=1249;
}

void ADC_cj()//adc采集函数,控制data值可改变PWM值(已测试有效)
{
float data;
while(!(ADCSRA & 0x10))//判断转换是否完成
ADCSRA=0xe0;
data=(ADCL+ADCH*256)/1024;
OCR1B=1249*data;
}

void ADC_int()//ADC初始化设置
{
DDRA=0x00;
PORTA=0x00;

ADMUX=0x00;//AREF参考电压 右对齐 ADC0通道 0000 0000
ADCSRA=0xe0;//ADC使能,ADC开始工作,允许自动转换触发,不使用中断,2分频 1110 0000
SFIOR=0x00;//自动模式 0000 0000
}

void main(void)
{
PWM();
ADC_int();
while(1)
{
ADC_cj();
}
}
目的是通过ADC采集ADC0的电压,来控制PWM占空比。。。。可是不知道为什么没法实现,有没有大神指教下。。。
展开
 我来答
论宇之新宇宙观
2015-01-16 · 中国人自己的宇宙观,新世纪新宇宙观!
论宇之新宇宙观
采纳数:514 获赞数:2456

向TA提问 私信TA
展开全部
data=(ADCL+ADCH*256)/1024;

adc 读取数据时,先读取高位,所以将该行代码修改就可以了(没有看其他地方,假如其他地方没问题的话)
更多追问追答
追问
ADCH*256,因为是乘法,运算顺序本来就在ADCL前面了吧。。。
而且刚才去改了下,结果一样的。。
追答
你修改后的代码是?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式