云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 毕业设计-基于CAN总线和AVR单片机的网络型温度传感 - 图文

毕业设计-基于CAN总线和AVR单片机的网络型温度传感 - 图文

  • 62 次阅读
  • 3 次下载
  • 2026/4/26 17:30:34

接入。使用内部电压参考源时,可以通过在 AREF 引脚外部并接一个电容来提高 ADC 的抗噪性能。

程序中采用 T/C0 比较匹配中断,每 2ms 中断一次。该定时中断作为 ADC自动触发转换的触发源信号。在 ADC 的初始化代码中,设置 ADC 时钟的分频系数为 32。系统4M 时钟经过64 分频产生7.3725/64MHz的 ADC 时钟,满足了逐次比较转换电路达到最大精度时,需要的 50kHz~200kHz 之间的采样时钟的要求。ADC 单端输入转换时间为 13 个 ADC 时钟周期,则一次 ADC 转换的时间为 13×64/7372.5KHz = 0.11ms。因此,2ms 的固定转换间隔时间远超出完成一次 ADC 的转换时间 0.11ms,不会影响 ADC 的转换过程,同时每秒内完成的 ADC 转换达 500 次。

在 ADC 转换完成中断服务中,把 ADC 转换结果换算成电压值,换算采用了整型数计算。为了保证计算产生不溢出,先将 adc_data 强行转换成长型,然后再乘 5000(这里假定AVcc参考电压为 5v) ,最后再除 1024,得出的结果就是对应的输入电压值.保证了换算的正确型。

ADC和T/C0的初始化函数的C语言实现如下所示,源代码有相应的注释:

- 29 -

/******************************************************************** *函数原型: port_init(void) *参数说明: 无 *返回值: 无 *说明: AVR单片机端口初始化 ********************************************************************/ void port_init(void) { DDRA = 0x00; PORTA = 0x00; } /******************************************************************** *函数原型: adc_init(void) *参数说明: 无 *返回值: 无 *说明: AVR单片机对内部ADC的初始化 ********************************************************************/ void adc_init(void)//dac初始化 { ADCSRA = 0x00; //disable adc ADMUX = 0x60; //select adc avcc 外部电源参考,数据左对齐,ADC0为输入; ACSR = 0x80; SFIOR&=0x1F; SFIOR|=0x60; //选择T/C0比较匹配中断为AD0 触发源 ADCSRA = 0xAD; } /******************************************************************** *函数原型: adc_isr(void) *参数说明: TXD_data1:存放转换结果的参数 *返回值: 无 *说明: ADC中断处理函数,用于提取中断完成后的数据 ********************************************************************/ #pragma interrupt_handler adc_isr:iv_ADC //ADC转换完成中断处理函数 void adc_isr(void)//ADC转换 { TXD_data1=ADCH; //转换结果值 } //初始化PA口为AD输入端口 - 30 -

/******************************************************************** *函数原型: timer0_comp_isr(void) *参数说明: time_2ms_ok:数据更新标志 *返回值: 无 *说明: 定时器处理函数,用于设置数据更新标志 ********************************************************************/ #pragma interrupt_handler timer0_comp_isr:20 void timer0_comp_isr(void) { time_2ms_ok=1; //数据更新标志 nop(); } /******************************************************************** *函数原型: init_devices(void) *参数说明: time_2ms_ok:数据更新标志 *返回值: 无 *说明: 设备初始化函数,用于初始化ADC、定时器T/C0和外部中断 ********************************************************************/ void init_devices(void) //系统的初始化 { //stop errant interrupts until set up CLI(); //关中断 port_init(); adc_init(); MCUCR = 0x00; //GICR = 0x40; GICR = 0x00; TCCR0=0x0B; //内部时钟,64分频(7.3725Mhz/64),CTC模式 TCNT0=0x00; OCR0=0xE6; TIMSK = 0x02; //使能T/C0比较中断 SEI(); //开中断 //all peripherals are now initialized }

- 31 -

4.4 LCM模块软件的设计

LCM模块的软件设计主要包括三大部分:LCD12864的初始化函数、LCD12864写数据和写命令函数、LCD12864显示字符函数。

各部分函数的代码和注释如下图所示:

/******************************************************************** *函数原型: void Write_Cmd(uchar cmd) *参数说明: cmd: 写入的命令参数; Lcdtemp:判忙标志 *返回值: 无 *说明: 该函数用于向LCM写命令 ********************************************************************/ void Write_Cmd(uchar cmd) { uchar lcdtemp = 0; LCD_RS_Status; LCD_RW_Read; LCD_DataIn; do //判忙 { LCD_ENABLE; NOP(); lcdtemp = LCD2MCU_Data; LCD_DISABLE; } while(lcdtemp & 0x80); LCD_DataOut; LCD_RW_Write; MCU2LCD_Data = cmd; LCD_ENABLE; NOP(); LCD_DISABLE; }

- 32 -

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

接入。使用内部电压参考源时,可以通过在 AREF 引脚外部并接一个电容来提高 ADC 的抗噪性能。 程序中采用 T/C0 比较匹配中断,每 2ms 中断一次。该定时中断作为 ADC自动触发转换的触发源信号。在 ADC 的初始化代码中,设置 ADC 时钟的分频系数为 32。系统4M 时钟经过64 分频产生7.3725/64MHz的 ADC 时钟,满足了逐次比较转换电路达到最大精度时,需要的 50kHz~200kHz 之间的采样时钟的要求。ADC 单端输入转换时间为 13 个 ADC 时钟周期,则一次 ADC 转换的时间为 13×64/7372.5KHz = 0.11ms。因此,2ms 的固定转换间隔时间远超出完成一次 ADC 的转换时间 0.11ms,不会影响 ADC 的转换过程,同时每秒内完成的 ADC 转换达 500 次。 在 ADC 转

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com