1 / 26

电子跑表

电子跑表. 【 项目功能 】. 1 、用 ATmega16 单片机的定时 / 计数器 0 制作一个简单的电子跑表,由四个 LED 数码管显示时间,最高计时可达 9 分 59.9 秒,并由相应的“开始 / 停止”键控制。 2 、掌握 ATmega16 单片机定时 / 计数器 0 原理及基本使用方法。. 【 项目知识点与技能点 】. 1 、 ATmega16 单片机的定时 / 计数器 0 的结构、类型及其功能。 2 、 与定时 / 计数器有关的寄存器的功能及设置。 3 、 定时 / 计数器中断服务子程序的结构及基本的编程方法。

kenda
Télécharger la présentation

电子跑表

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 电子跑表

  2. 【项目功能】 1、用ATmega16单片机的定时/计数器0制作一个简单的电子跑表,由四个LED数码管显示时间,最高计时可达9分59.9秒,并由相应的“开始/停止”键控制。 2、掌握ATmega16单片机定时/计数器0原理及基本使用方法。

  3. 【项目知识点与技能点】 1、ATmega16单片机的定时/计数器0的结构、类型及其功能。 2、与定时/计数器有关的寄存器的功能及设置。 3、定时/计数器中断服务子程序的结构及基本的编程方法。 4、定时/计数器在定时/计数方面的简单应用。

  4. 一、什么是定时/计数器 • 在单片机内部,一般都会有专门的硬件电路构成可编程的定时/计数器。定时/计数器最基本的功能就是对脉冲信号(内部机器周期或外部时钟脉冲)进行自动计数,也就是说计数的过程由硬件完成,不需要MCU的干预。但是MCU可以通过指令设置定时/计数器的工作方式,以及根据定时/计数器的计数值或工作状态做必要的处理和相应。 • ATmega16单片机内配置了2个8位和1个16位共3个定时/计数器。

  5. 8位定时/计数器 ATmega16的定时/计数器共有3个: 1个16位的定时/计数器——定时/计数器1(简称T/C1) 2个8位定时/计数器——定时/计数器0(简称T/C0 )、 定时/计数器2(简称 T/C2) 这3个定时/计数器各具特点: T/C0功能普通——(8位二进制)计数、定时、PWM T/C1功能多——(16位二进制)计数、定时、PWM、输入捕获 T/C2功能少且特殊——(8位)定时(有异步定时功能,可 作为实时时钟RTC)、PWM

  6. 二、T/C0的结构图 控制寄存器 溢出 计数 计数寄存器 清除 外部时钟 方向 计数时钟 比较匹配 底部值 顶部值 输出比较寄存器

  7. 时钟源: • T/C0的计数时钟源可由来自外部引脚T0的信号提供,也可来自芯片的内部。下图为T/C0时钟源部分的内部功能图。 • T/C0的时钟源的选择由T/C0的控制寄存TCCR0中的3个标志位CS0[2:0]确定,共有8种选择。其中包括无时钟源(停止计数),外部引脚T0的上升沿或下降沿,以及内部系统时钟经过一个10位预定比例分频器分频的5种频率的时钟信号(1/1、1/8、1/64、1/256、1/1024)。

  8. clkI/O 10位T/C预分频器 Clear CK/8 PSR10 CK/64 CK/256 CK/1024 T0 0 T1 0 CS00 CS10 CS10 CS01 CS11 CS11 CS12 CS02 T/C0时钟源clkT0 T/C1时钟源clkT1 T/C1、0的预分频器 预分频器的作用是将系统时钟(如芯片内部的系统时钟为4.000MHz)按设定的比例进行分频,以产生不同周期的时钟clkT0、clkT1,分别作为时钟源提供给T/C0和T/C1使用。

  9. 三、工作模式 普通模式: 当检测到有有效脉冲输入时,计数寄存器加1 启动计数器工作 中断开放 S1 S2 脉冲 1 0 中断请求 0xFA 0xF5 0xF6 0xF7 0xF9 0xF8 0xFF 0xFC 0xF5 0xFE 0xFD 0xFB 溢出标志TF 计数器 当计数器计数溢出时的标志 中断响应后溢出标志清“0” 单片机的计数器用户是可以控制的(可编程的),包括计数器的启动、计数脉冲的有效方式、计数器的初值、计数溢出中断请求开放或禁止等。 0xF5 初 值 初值寄存器作为计数器回0时的初始值

  10. CTC模式: 波形发生器的频率

  11. 快速PWM模式: 256 OC0---PB3 OC0输出的PWM波形的频率: N代表分频因子(1、8、64、256或1024)。

  12. 相位修正PWM模式: 510 OC0输出的PWM波形的频率: N代表分频因子(1、8、64、256或1024)。

  13. 四、定时/计数器T/C0相关寄存器 ATmega16的8位定时/计数器T/C0用户可以控制: • TCCR0——T/C0控制寄存器 • TIMSK——T/C中断屏蔽寄存器 • TIFR——T/C中断标志寄存器 • TCNT0——T/C0计数寄存器 • OCR0——T/C0输出比较寄存器 • SFIOR——特殊功能寄存器

  14. MSB LSB 7 6 5 4 3 2 1 0 T/C0计数寄存器 —— TCNT0 读写 复位值 T/C0是可以进行读/写访问的向上计数(加法计数)的计数器。 只要有有效脉冲输入,TCNT0就会在写入值(初值)的基础上开始计数。一旦TCNT达到0xFF,下一个计数脉冲到来时便回到0x00,并继续向上开始计数。在TCNT0回“0”的同时,溢出标志TOV0置“1”。 TOV0标志置“1”可以用于申请中断,也可以作为计数器的第“9”位使用。

  15. 7 6 5 4 3 2 1 0 T/C0输出比较寄存器 —— OCR0 读写 复位值 OCR0中的8位数据用于同TCNT0寄存器中的计数值进行连续的匹配比较。 如果TCNT0的值与OCR0相等,则比较匹配发生(比较匹配发生时,对应的定时/计数器输出引脚OC0会产生触发事件)。 比较匹配发生后,置“1”相应的中断标志OCF0。

  16. T/C中断屏蔽寄存器 —— TIMSK 7 6 5 4 3 2 1 0 OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 位1:T/C0输出匹配中断使能,为“1”时允许中断,为“0”时禁止中断。 位0:T/C0溢出中断使能,为“1”时允许中断,为“0”时禁止中断。

  17. OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0 7 6 5 4 3 2 1 0 T/C中断标志寄存器 —— TIFR 读写 复位值 BIT1:OCF0, T/C0输出比较匹配中断标志。 BIT0:TOV0,T/C0溢出中断标志。 ATmega16的定时/计数器共有8个中断源——对应8个中断标志位,这些标志位当条件满足后,由硬件置“1”,中断响应后由硬件清“0”,也可以对这些位通过软件写“1”清“0”。

  18. FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00 7 6 5 4 3 2 1 0 T/C0控制寄存器 —— TCCR0 位7:FOC0强制输出比较,该位只在WGM位被置为非PWM模式下有效。 位6、位3:计数器计数模式,用于控制T/C0的计数和工作方式。 位5~4:比较匹配输出模式,决定T/C0比较匹配发生时,输出引脚OC0(PB3)的行为方式。这是I/O的第二功能,相应的方向控制位要置“1”,以便将其配置为输出。 位2~0:T/C0的时钟选择位,用于定义T/C0的时钟源。

  19. ADTS2 ADTS1 ADTS0 ----- ACME PUD PSR2 PSR10 7 6 5 4 3 2 1 0 特殊功能寄存器 —— SFIOR 读写 复位值 Bit0:PSR10,T/C1与T/C0预分频器复位。置位时T/C1与T/C0的预分频器复位。操作完成后这一位由硬件自动清零。写入零时不会引发任何动作。T/C1与T/C0共用同一预分频器,且预分频器复位对两个定时器均有影响。该位总是读为0。

  20. 五、硬件电路 段选线 位选线 共阳极 a b c d e f g dp QH QH QH 74LS164 74LS164 74LS164 74LS164 /CLR A B A B A B A B INT2 CLK INT1 PB0 PD3 PB1 PB2 ATmega16

  21. 【项目任务】 • 用ATmega16单片机实现一个60Hz的时钟发生器:四个LED数码管显示时间,最高计时可达9分59.9秒;当按下“开始/停止”键开始计时,再次按下时停止计时,LED显示静止。第三次按下时将继续上一次计时;当按下“复位”键时,系统复位,数码管显示为0,等待计时(开始、停止采用外部中断)。下面的参考程序运行并不完善,运行观察结果并进行修改。

  22. 【软件流程】

  23. 【参考程序】 定时器0初始化: void time0_init() { CLI(); //关闭中断 TCCR0=0x04; //内部8M晶振,256分频 TCNT0=0x82; //4ms溢出一次,溢出25次100ms TIMSK=0X01; //溢出中断使能 SEI(); }

  24. 【参考程序】 #pragma interrupt_handler timer_ovf_isr:10 void timer_ovf_isr() //中断服务程序 { TCNT0=0x82; if(Flag) { msec_counter++; if(msec_counter>25) { dsec_counter++; msec_counter=0; } Seg_buff[0]=msec_counter; Seg_buff[1]=dsec_counter%10; dsec_counter1=dsec_counter/10; Seg_buff[2]=dsec_counter1%6; dsec_counter2=dsec_counter1/6; Seg_buff[3]=dsec_counter2%10; } }

  25. 【项目实施】 1、各小组内部进行小组分工,确定项目内容和实施计划,项目的内容要有创新点。 2、打开AVR Stdio软件建立AVR-ICC项目,编写程序,进行编译(数码管显示采用串行显示和并行显示均可,具体的时间控制和显示方式各小组自行确定,按键控制使用外部中断)。 3、编译无误,在线调试。使实训箱电源按钮处于关闭状态,IC锁紧座中放入ATmega16单片机,将DC9V/1A电源插头插入电源孔,将USB延长线接头与JTAG硬件仿真器相连接,同时将JTAG仿真器连在实训箱的JTAG接口。 4、将响应的显示和按键控制对应的拨码开关拨到ON位置。 5、按下实训箱电源开关,打开AVRstudio 4与实训箱单片机进行通信,将编译后的文件下载到实训箱单片机中,观察运行结果,运行结果达到实训要求实训完成。 6、实训完成后,切断实训箱电源,将拨动过的拔码开关拨回到原位置,将实训用到的跳线帽拔下,将实训用到的外部接线撤下,将实训用到的器件及连线完好的放回到实训箱储物阁中。 7、完成项目报告,就本组的项目进行总结。

  26. 结 束

More Related