3953|8

157

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

AD转换程序,急了。。。请大家帮忙看一下。 [复制链接]

我是想这样写的,定时器定时2MS,中断标志一个变量之后,启动ADC转换,把转换到的数据发用串口发送出去。。
这样算的话,采样大约是:400HZ。
采用外部基准电压。。。AVCC=5V
/*****************************
2010 05 30 ;
功能:ADC转换,然后发送到串口去。波特率9600;
ADC采样频率为:400HZ;
精度为10位;
******************************/
#include
#include
#define F_CPU 4000000
#define BAUD 9600
unsigned char adc_data_l=0,adc_data_h=0,time_2ms_ok=0,AdcConCom = 0;
void USART_INIT()
{
UBRRH =(F_CPU/BAUD/16 -1)/256;
UBRRL =(F_CPU/BAUD/16 -1)%256;
UCSRB =(1< UCSRC =(1< }
void port_init(void)
{
PORTA = 0x00;
DDRA  = 0x00;
PORTB = 0x00;
DDRB  = 0x00;
PORTC = 0x00; //m103 output only
DDRC  = 0x00;
PORTD = 0x00;
DDRD  = 0x00;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
GICR  = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
}
void adc_init()//ADC初始化;
{
DDRA =0x00;
PORTA =0x00;
//ADCSRA =0XAD;
ADCSRA=0x00;
ADMUX = 0x47; //参加电源为AVCC,ADC7单端输入;
ACSR =(1 < ADCSRA = (1< }
void T_init()//T/C0初始化;
{
TCCR0 =0x0B;//内部时钟,64分频,CTC模式;
TCNT0 =0x00;//
OCR0 =0x7C;//OCR0 = 0X7C,(124+1)/62.5KZH=2MS
TIMSK = 0x02;//使能T/CO比较中断;
}
#pragma interrupt_handler timer0_ovf:20
void timer0_ovf()
{
time_2ms_ok=1;//
}
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
}

void USART_TX(unsigned char data)
{
while(!(UCSRA & (1< UDR =data;
}
void main()
{
init_devices();
T_init();
adc_init();
USART_INIT();
while(1)
{
if(time_2ms_ok)
{
ADCSRA |=(1< //while(!(ADCSRA&(1< //while(!(ADCSRA&(1< //ADCSRA|=1< ADCSRA|=1< adc_data_l=ADCL;
adc_data_h =ADCH;
PORTC = adc_data_l;
USART_TX(adc_data_l);
USART_TX(adc_data_h);
time_2ms_ok =0;
}
}
}

//while(!(ADCSRA&(1< //while(!(ADCSRA&(1< 这一句,我加上它的时候,串口却没接收到数据。
没加上的时候,可以接收到很多数据,但是都是那几个数据。。。也不对。

[ 本帖最后由 zhiha258 于 2010-5-31 15:07 编辑 ]
此帖出自单片机论坛

最新回复

对,他说了半天我都不知道到底怎么回事,是不工作还是没有按你的意愿工作,或者是不稳定,说清楚的啊    详情 回复 发表于 2010-6-2 09:16
点赞 关注
 

回复
举报

157

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
我是想这样写的,定时器定时2MS,中断标志一个变量之后,启动ADC转换,把转换到的数据发用串口发送出去。。
这样算的话,采样大约是:400HZ。
采用外部基准电压。。。AVCC=5V;

//while(!(ADCSRA&(1< //while(!(ADCSRA&(1< 这一句,我加上它的时候,串口却没接收到数据。
没加上的时候,可以接收到很多数据,但是都是那几个数据。。。也不对。

[ 本帖最后由 zhiha258 于 2010-5-31 15:07 编辑 ]
此帖出自单片机论坛
 
 

回复

5970

帖子

8

TA的资源

版主

板凳
 
  围观
此帖出自单片机论坛
 
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

4
 
具体什么情况
你说下哈
此帖出自单片机论坛
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

5
 

AD是什么型号

你说清楚啊,这样没法回答你的
此帖出自单片机论坛
 
 
 

回复

157

帖子

0

TA的资源

纯净的硅(高级)

6
 

/*****************************
2010 05 30
作者:
功能:ADC转换,然后发送到串口去。波特率9600;
ADC采样频率为:400HZ;
精度为10位;
******************************/
#include <iom16v.h>
#include <macros.h>

#define F_CPU 4000000
#define BAUD 9600

unsigned char adc_data_l=0,adc_data_h=0,time_2ms_ok=0,AdcConCom = 0;

void USART_INIT()
{
UBRRH =(F_CPU/BAUD/16 -1)/256;
UBRRL =(F_CPU/BAUD/16 -1)%256;
UCSRB =(1<<RXEN)|(1<<TXEN);
UCSRC =(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}

void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 CLI(); //disable all interrupts
 port_init();

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 SEI(); //re-enable interrupts
 }
void adc_init()//ADC初始化;
{
 DDRA =0x00;
 PORTA =0x00;
 //ADCSRA =0XAD;
 ADCSRA=0x00;
 ADMUX = 0x47; //参加电源为AVCC,ADC7单端输入;
ACSR =(1 <<ACD);
ADCSRA = (1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS0);//32分频;
}

void T_init()//T/C0初始化;
{
TCCR0 =0x0B;//内部时钟,64分频,CTC模式;
TCNT0 =0x00;//
OCR0 =0x7C;//OCR0 = 0X7C,(124+1)/62.5KZH=2MS
TIMSK = 0x02;//使能T/CO比较中断;
}

#pragma interrupt_handler timer0_ovf:20
void timer0_ovf()
{
time_2ms_ok=1;//
}
#pragma interrupt_handler adc_isr:15
void adc_isr(void)
{
}


void USART_TX(unsigned char data)
{
while(!(UCSRA & (1<<UDRE)));
UDR =data;
}

void main()
{
init_devices();
T_init();
adc_init();
USART_INIT();
while(1)
{
if(time_2ms_ok)
{
ADCSRA |=(1<<ADSC);//启动一次AD转换; 
while(!(ADCSRA&(1<<ADIF)));//等待转换完成
//while(!(ADCSRA&(1<<ADIF)));//等待转换完成
 //ADCSRA|=1<<ADIF;//必须手动清除标志位
ADCSRA|=1<<ADIF;//必须手动清除标志位
adc_data_l=ADCL;
adc_data_h =ADCH;
PORTC = adc_data_l;
USART_TX(adc_data_l);
USART_TX(adc_data_h);
time_2ms_ok =0;

}

}

}

 

接上面的;

此帖出自单片机论坛
 
 
 

回复

2770

帖子

0

TA的资源

裸片初长成(中级)

7
 
闂傚倷绀侀幖顐ゆ偖椤愶箑纾块柛鎰嚋閼板潡鏌涘☉娆愮稇閻庢艾顦伴妵鍕箳閸℃ぞ澹曠紓鍌欑劍椤ㄥ棝鏁冮姀鐘垫殾婵°倕鎳庢儫闂佸疇妗ㄧ粈浣规叏閵堝鐓熼柣姗€浜跺鐑芥煕閺傝法绠绘い銏$懇楠炲鏁傞懞銉︾彨闁诲骸鍘滈崑鎾绘煕閹邦厼鍔ゆ繛鍫嫹闂傚倷娴囬惃顐﹀幢閳轰焦顔勭紓鍌氬€哥粙鍕箯閿燂拷闂傚倷鑳堕幊鎾绘偤閵娾晜鍋嬮柣鎰惈閻掑灚銇勯幒鎴敾閻庢熬鎷�濠电姷鏁搁崑娑⑺囬銏犵鐎光偓閸曨偉鍩為梺璺ㄥ櫐閹凤拷
此帖出自单片机论坛
 
 
 

回复

2770

帖子

0

TA的资源

裸片初长成(中级)

8
 
闂傚倷绀侀幖顐ゆ偖椤愶箑纾块柛鎰嚋閼板潡鏌涘☉娆愮稇閻庢艾顦伴妵鍕箳閸℃ぞ澹曠紓鍌欑劍椤ㄥ棝鏁冮姀鐘垫殾婵°倕鎳庢儫闂佸疇妗ㄧ粈浣规叏閵堝鐓熼柣姗€浜跺鐑芥煕閺傝法绠绘い銏$懇楠炲鏁傞懞銉︾彨闁诲骸鍘滈崑鎾绘煕閹邦厼鍔ゆ繛鍫嫹闂傚倷娴囬惃顐﹀幢閳轰焦顔勭紓鍌氬€哥粙鍕箯閿燂拷闂傚倷鑳堕幊鎾绘偤閵娾晜鍋嬮柣鎰惈閻掑灚銇勯幒鎴敾閻庢熬鎷�濠电姷鏁搁崑娑⑺囬銏犵鐎光偓閸曨偉鍩為梺璺ㄥ櫐閹凤拷
此帖出自单片机论坛
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

9
 
闂傚倷绀侀幖顐ゆ偖椤愶箑纾块柛鎰嚋閼板潡鏌涘☉娆愮稇閻庢艾顦伴妵鍕箳閸℃ぞ澹曠紓鍌欑劍椤ㄥ棝鏁冮姀鐘垫殾婵°倕鎳庢儫闂佸疇妗ㄧ粈浣规叏閵堝鐓熼柣姗€浜跺鐑芥煕閺傝法绠绘い銏$懇楠炲鏁傞懞銉︾彨闁诲骸鍘滈崑鎾绘煕閹邦厼鍔ゆ繛鍫嫹闂傚倷娴囬惃顐﹀幢閳轰焦顔勭紓鍌氬€哥粙鍕箯閿燂拷闂傚倷鑳堕幊鎾绘偤閵娾晜鍋嬮柣鎰惈閻掑灚銇勯幒鎴敾閻庢熬鎷�濠电姷鏁搁崑娑⑺囬銏犵鐎光偓閸曨偉鍩為梺璺ㄥ櫐閹凤拷
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表