AVR单片机6_20100420.ppt_第1页
AVR单片机6_20100420.ppt_第2页
AVR单片机6_20100420.ppt_第3页
AVR单片机6_20100420.ppt_第4页
AVR单片机6_20100420.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AVR单片机原理及应用,陈渊睿 Tel:E-mail: 华南理工大学电力学院,第六章,定时器/计数器及其应用,在单片机内部,一般都会集成由专门硬件电路构成的可编程定时计数器。定时计数器最基本的功能就是对脉冲信号“自动”进行计数。这里所谓的“自动”,指计数的过程是由硬件完成的,不需要CPU的干预。但CPU可以通过指令设置定时计数器的工作方式,以及根据定时计数器的计数值或工作状态做必要的处理和响应。 要点: 定时计数器的长度 脉冲信号源 计数方式 计数器的上下限 计数器的事件(中断等),ATmega8等单片机有 3 个通用定时器/计数器,即两个 8 位的定时器/计数器 (

2、T/C0和T/C2)、一个16位的定时器/计数器(T/C1) 定时器/计数器0(T/C0)和定时器/计数器1(T/C1)从同一个 10 位的预分频定时器取得预分频时钟(但有独立的预分频选择)。 定时器/计数器2(T/C2)有自己的预分频器。定时器/计数器2(T/C2)可以选择异步外部振荡器,如在引脚PB6,PB7接32768Hz的表振做实时时钟(RTC) 定时器/计数器常用作带内部时钟时基的定时器或用作外部引脚上的脉冲计数器,其中有些还具有输入捕获、比较匹配、PWM脉宽调制输出等功能 ATmega8 单片机还有一个看门狗定时器 WDT 用于程序的抗干扰,6.1.1 T/C0和T/C1的预定比例

3、分频器 两个定时器/计数器的时钟可选CK或四种不同的预分频CK/8,CK/64,CK/256和CK/1024;还可选外部源(脉冲)或定时器/计数器停止不用,6.1 8位定时器/计数器T/C0,6.1.2 T/C0的结构特点和作用,8位加1计数器。由$00开始计数,计到$ff后再来一时钟则溢出,计数器清0。可用作定时和计数 用作定时,时钟来自晶振时钟CK或其四种分频,由于时钟频率准确,溢出的时间间隔是准确的;用作外计数时,外部引脚T0(PD4)输入信号,可选上升沿或下降沿计数;T/C0还可以停止不用 T/C0的控制寄存器TCCR0控制T/C0的工作方式。溢出状态标志位在定时器/计数器中断标志寄存

4、器TIFR中。T/C0的中断使能/禁止位设置在定时器/计数器中断控制屏蔽寄存器TIMSK中。 当T/C0用T0引脚外计数时,为了确保CPU对外部信号获取正确的采样,外部信号两种电平转换之间的最少时间必须维持一个内部CPU的时钟周期。外部时钟信号是在内部CPU时钟的上升沿被采样的,6.1.3 T/C0有关的I/O寄存器 1、T/C0控制寄存器TCCR0 位73: Res 保留位, 总读为0 位2,1,0: CS02,CS01,CS00 时钟选择0, 位2,1和0 时钟选择0的位2,1和0定义T/C0的预定比例源(prescaling source),停止条件可使能/禁止定时器 预分频模式直接来自

5、振荡器时钟的分频 如果使用外部引脚模式,则相应的数据方向控制寄存器一般应设为输入(对于T0即PD4引脚,DDRD中的DDD4位应清零)。对于mega8,即使PD4设为输出,其状态转换也可作为时钟源,允许软件控制计数,2、T/C0的计数寄存器TCNT0 用于存放T/C0的(当前)计数值,可读写访问 若TCNT0被写入, 同时存在时钟源,则T/C0在写入操作之后继续计数 8位增量计数器,计到 $ff 后再来一时钟则溢出,TCNT0清0。T/C0溢出后,定时器/计数器中断标志寄存器TIFR中的 TOV0 位置1,若此时定时器/计数器中断屏蔽寄存器TIMSK中的T/C0溢出中断使能位TOIE0为1,且

6、SREG中的 I 位为1,则可产生T/C0 溢出中断(转去执行相应的中断例程),3、定时器中断屏蔽寄存器TIMSK T/C0溢出后,定时器/计数器中断标志寄存器TIFR中的 TOV0 位置1,若此时定时器/计数器中断屏蔽寄存器TIMSK中的T/C0溢出中断使能位TOIE0为1,且SREG中的 I 位为1,则可产生T/C0 溢出中断(转去执行相应的中断例程),4、定时器中断标志寄存器TIFR T/C0溢出后,定时器/计数器中断标志寄存器TIFR中的 TOV0 位置1,若此时定时器/计数器中断屏蔽寄存器TIMSK中的T/C0溢出中断使能位TOIE0为1,且SREG中的 I 位为1,则可产生T/C0

7、 溢出中断(转去执行相应的中断例程),5、特殊功能I/O寄存器SFIOR,时序图(无预分频),时序图(带分频器fclkI/O/8),6.1.4 定时器/计数器0应用举例,1、T/C0作计数器 (无中断) 脉冲信号从PB0(T0)引脚输入,T/C0作计数器,计数结果由 PC 口以二进制从发光二极管显示输出,.include 8535def.inc .org $000 rjmp main main: ldi r16,low(ramend) ;栈指针置初值 out spl,r16 ldi r16,high(ramend) out spH,r16 ldi r16,$07 ;00000111外部T0上升

8、沿计数 out tccr0,r16 ldi r16,0 ;T/C0 置初值 0 out tcnt0,r16 ldi r16,$ff ;PC 口作输出 out ddrc,r16 loop: in r16,tcnt0 ;PC口实时指示计数值out portc,r16 rjmp loop,2、T/C0作定时器(溢出中断) T/C0 作定时器,8MHz晶振,1024分频,128s 计1个数。T/C0初值为131,每计125个数(16ms),T/C0溢出1次。其中断服务子程序使PC0改变方向,产生周期为32ms的方波信号 .include 8535def.inc .org $000 rjmp main

9、.org $009 rjmp t0_ovf ;T/C0溢出中断矢量 main: ldi r16,low(ramend) ;栈指针置初值 out spl,r16 ldi r16,high(ramend) out spH,r16 ldi r16,$ff ;PC 口作输出 out ddrc,r16,ldi r16,$01 ;允许T0溢出中断 out timsk,r16 ldi r16,$05 ;1024 分频 out tccr0,r16 ldi r17,131 ;T/C0 置初值 131 out tcnt0,r17 ldi r16,$FF ;定时器/计数器中断标志寄存器清零out tifr,r16

10、sei ;允许全局中断 here: rjmp here t0_ovf: in r1,sreg ;保存 sreg ldi r17,131 ;T/C0重置初值131 out tcnt0,r17 in r18,portc ;读 C 口数据寄存器 com r18 ;取反 out portc,r18 ;送 C 口数据寄存器 out sreg,r1 ;恢复 sreg reti,3、T/C0溢出中断动态扫描五位数码管显示 前面所述的数码管动态扫描程序是在程序中采用软件延时的方法, 分时输出字线和位线, 占用了CPU 90%以上的时间, 在快速系统中是不允许的 采用 T/C0 溢出中断的方法, 每 2ms 溢

11、出中断一次. 在中断服务程序中轮流改变字线和位线显示某位, 随即返回主程序. 这样可以不占用程序大量时间来管理动态扫描程序. 主程序只需把要显示的各位七段码放到相应的 SRAM中即可 在本例中, 主程序把要显示的16位二进制数放在 r17:r16 中, 经二转十、查七段码放在SRAM的$100$104单元. 位线码送初值$fe, 并对T/C0溢出中断初始化. 在中断服务程序中判位线码, 该显示哪位就送相应的字线和位线, 再修改位线码, 为下次中断做好准备, 然后立刻返回主程序. 2ms以后, T/C0又溢出中断, 送字线和位线, 开始显示下一位,.include 8535def.inc .or

12、g $000 rjmp reset .org $009 rjmp tim0_ovf ;T/C0溢出中断矢量 tab: .db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f reset: ldi r16,low(ramend) ;栈指针置初值 out spl,r16 ldi r16,high(ramend) out sph,r16 ldi r16,$ff ;定义 PB PD 为输出口 out ddrb,r16 out ddrd,r16 ldi r17,$ff ;设初值放在 r17:r16 ldi r16,$ff rcall b16td5 ;调用二转十子程(第四章

13、),mov r23,r16 ;查七段码 送SRAM $100$104 rcall cqm1 sts $100,r0 mov r23,r17 rcall cqm1 sts $101,r0 mov r23,r18 rcall cqm1 sts $102,r0 mov r23,r19 rcall cqm1 sts $103,r0 mov r23,r20 rcall cqm1 sts $104,r0,ldi r16,$01 ;允许 T/C0 溢出中断 out timsk,r16 ldi r16,$03 ;64 分频 2ms 一位 out tccr0,r16 ldi r16,$00 ;T/C0 置初值

14、0 out tcnt0,r16 out tifr,r16 ;清T/C中断标志寄存器? ldi r21,$fe ;位线置初值 sei ;开中断 here: rjmp here tim0_ovf: in r1,sreg ;保存 sreg cpi r21,$fe ;该显示个位? brne t21 ;否则转 t21 lds r20,$100 ;送个位七段码(SRAM $100单元内容)给字线 out portb,r20 out portd,r21 ;送个位位线,ldi r21,$fd ;修改位线 下次显示十位 rjmp t25 t21: cpi r21,$fd ;该显示十位? brne t22 ;否则

15、转 t22 lds r20,$101 ;送十位七段码给字线 out portb,r20 out portd,r21 ;送十位位线 ldi r21,$fb ;修改位线 下次显示百位 rjmp t25 t22: cpi r21,$fb ;该显示百位? brne t23 ;否则转 t23 lds r20,$102 ;送百位七段码给字线 out portb,r20 out portd,r21 ;送百位位线 ldi r21,$f7 ;修改位线 下次显示千位 rjmp t25,t23: cpi r21,$f7 ;该显示千位? brne t24 ;否则转 t24 lds r20,$103 ;送千位七段码给字

16、线 out portb,r20 out portd,r21 ;送千位位线 ldi r21,$ef ;修改位线 下次显示万位 rjmp t25 t24: lds r20,$104 ;送万位七段码给字线 out portb,r20 out portd,r21 ;送万位位线 ldi r21,$fe ;修改位线 下次显示个位 t25: out sreg,r1 ;恢复 sreg reti,6.2 16位定时器/计数器T/C1简介,注:图中n1,116位的计数器 由于T/C1是16位的计数器,因此它的计数宽度、计时长度大大增加,配合一个独立的10位预定比例分频器,在系统时钟为4MHz条件下,16位的T/C

17、1最高计时精度为0.25s,而最长的时宽可达到16.777216秒(精度为256s),这是其它的8位单片机所做不到的,216位寄存器的读写操作步骤 AVR的内部有许多16位的寄存器,这些寄存器都是由两个8位的寄存器组成的。如16位的寄存器TCNT1实际由2个8位寄存器TCNT1H、TCNT1L组成的 由于AVR的内部数据总线为8位,因此读写16位的寄存器需要分两次操作。为了能够同步读写16位寄存器,每一个16位寄存器分别配有一个8位的临时辅助寄存器(Temporary Register),用于保存16位寄存器的高8位数据。要同步读写这些16位的寄存器,读写操作应遵循以下特定的步骤:,216位寄

18、存器的读写操作步骤 16位寄存器的读操作 当MCU读取16位寄存器的低字节(低8位)时,16位寄存器低字节内容被送到MCU,而高字节(高8位)内容在读低字节操作的同时被置于临时辅助(TEMP)寄存器中。当MCU读取高字节时,读到的是TEMP寄存器中的内容。因此,要同步读取16位寄存器中的数据,应先读取该寄存器的低位字节,再立即读取其高位字节。,216位寄存器的读写操作步骤 16位寄存器的写入操作 当MCU写入数据到16位寄存器的高位字节时,数据是写入到TEMP寄存器中。当MCU写入数据到16位寄存器的低位字节时,写入的8位数据与TEMP寄存器中的8位数据组合成一个16位数据,同步写入到16位寄存器中。因此,要同步写16位寄存器时,应先写入该寄存器的高位字节,再立即写入它的低位字节。 在对16位寄存器操作时,最好将中断响应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论