版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、定时器/计数器的基本概念CPOVF0000 000001010101000100100011010001010110011110001001101010111100110111101111内部时钟定时器外部时钟计数器第6章 定时器/计数器二进制计数器第6章 定时器/计数器 多数AVR单片机内部有3个定时器/计数器(90S8538, mega8, mega16, mega162, mega32) T/C08位, T/C116位, T/C28位 有些中低档AVR单片机只有2个定时器/计数器T/C0, T/C1 有些高档AVR单片机有4个定时器/计数器T/C0, T/C1, T/C2, T/C3 1
2、6位第6章 定时器/计数器 T/C08位定时器/计数器 T/C116位定时器/计数器定时器(内部时钟)计数器(外部时钟)定时器(内部时钟)计数器(外部时钟)其他: 输入捕获、输出比较、PWM输出 T/C28位定时器/计数器定时器、计数器、输出比较、PWM输出6.1 T/C0和T/C1的预分频器T/C0和T/C1使用完全相同的预分频器Timer/Counter1 and Timer/Counter0 share the same prescaler module, but the Timer/Counters can have different prescaler settings.6.1 T
3、/C0和T/C1的预分频器6.1 T/C0和T/C1的预分频器预分频器实际上是10位二进制计数器输入时钟clkI/O(频率与系统时钟频率相同)输出4种时钟:CK/8, CK/64, CK/256, CK/1024因此定时器时钟源有以下形式:0T0/T1(引脚)下升沿、上降沿CK, CK/8, CK/64, CK/256, CK/10246.2 8位定时器/计数器0(T/C0) T/C0的内部结构框图主要由时钟选择、控制逻辑以及有关的I/O寄存器组成6.2 8位定时器/计数器0(T/C0)对于用户来说,主要掌握有关的I/O寄存器TCCR0、TCNT0、TIMSK、TIFR1、T/C0的控制寄存器
4、TCCR0(Timer/Counter0 Control Register )CS02CS01CS00CS02/1/0Clock Select 0, bit 2/1/0000stop001CK010CK/8011CK/64100CK/256101CK/1024110外部T0引脚,下降沿111外部T0引脚,上升沿2、T/C0的计数寄存器TCNT0 ( Timer Counter )用于读写计数值MSBLSB3、T/C中断屏蔽寄存器TIMSK(Timer/Counter Interrupt Mask Register)OCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1TOIE0最低
5、位:TOIE0 T/C0溢出中断允许4、T/C中断标志寄存器TIFR ( Timer/Counter Interrupt Flag Register )OCF2TOV2ICF1OCF1AOCF1BTOV1TOV0TOV0 T/C0溢出中断标志OCF2T/C2输出比较匹配中断标志TOF2 T/C2溢出中断标志ICF1T/C1输入捕获中断标志OCF1AT/C1输出比较A匹配中断标志OCF1BT/C1输出比较B匹配中断标志TOV1 T/C1溢出中断标志例 T/C0作为计数器mega8PD4(T0)PC7PC1PC0脉冲信号从PD4(T0)输入,T/C0作为计数器,计数结果由C口驱动发光二极管以二进制
6、形式显示输出。 .include “m8def.inc”.org 0 x000rjmp 0 x013main: LDI R16, low(RAMEND)OUT SPL, R16LDI R16, high(RAMEND)OUT SPH, R16例 T/C0作为计数器LDI R16, 0 x07 ;上升沿计数OUT TCCR0, R16CLRR16; T/C0 初值为0OUTTCNT0, R16SERR16; C口作为输出OUTDDRC, R16LOOP: INR16, TCNT0 OUTPORTC, R16RJMPLOOPp.165例6-1 T/C0作为定时器设晶振频率为8MH
7、z,利用T/C0以中断方式进行定时,使PB1输出周期为2s的方波控制LED每1秒点亮。 晶振频率8MHz 系统时钟周期1/8us不分频计1个数1/8us,最大定时时间 2561/8 =32 us8分频计1个数1us,最大定时时间2561 = 256 us64分频计1个数8us,最大定时时间2568 = 2.048 ms256分频计1个数32us,最大定时时间25632 = 8.192 ms1024分频计1个数128us,最大定时时间 256 128 = 32.768 msp.165例6-1 T/C0作为定时器如果取分频系数为1024(计数周期128us),则1s定时需要计数个数为 100000
8、0/128 = 7812.5 取分频系数为256(计数周期32us),1s定时需要计数个数为 1000000/32 = 31250 = 125250即T/C0计数初值取 256 250 = 6,每计250个数产生溢出中断(32250 = 8ms),中断125次刚好定时1sp.165例6-1 T/C0作为定时器.include “m8def.inc”.org0 0 x009rjmptimer0_ovfmain: LDI R16, low(RAMEND)OUT SPL, R16 LDI R16, high(RAMEND) OUT SPH, R16p.165例6-1
9、T/C0作为定时器; T0 ovf interrupt enableLDI R16, 0 x01OUT TIMSK, R16; T0 prescaler = 256LDI R16, 0 x04OUT TCCR0, R16LDI R16, 0 x06 ; 初值6 (-250)OUT TCNT0, R16LDI R16, 0 x01OUT TIFR, R16 ; 清除TOV0标志p.165例6-1 T/C0作为定时器SER R16; 设置B口作为输出OUT DDRB, R16LDI R27, 125SEIHERE: RJMP HEREtimer0_ovf : ; 中断服务程序IN R1, SREG
10、 ; 保存SREG;接下来书上程序有错误!应该这样编程:; 首先重装初值,确保定时时间LDI R16, 0 x06 OUT TCNT0, R16DEC R27BRNE LOOP1IN R16, PORTB ; 读输出状态COM R16 ; 取反OUT PORTB, R16; 输出LDI R27, 125LOOP1:OUT SREG, R1; 恢复SREG RETI6.3 16位定时器/计数器1(T/C1)定时器/计数器1(T/C1)16位定时:时钟脉冲来自系统时钟计数:时钟脉冲来自外部引脚(T1)输入捕获:当输入捕获引脚(ICP)电平发生变化时(上升沿或下降沿)把计数值自动送到输入捕获寄存器输
11、出比较:计数值与常数比较,相等时(比较匹配)发出中断请求并可以改变输出状态PWM功能Pulse Width Modulation6.3.1 T/C1的结构p.167内部结构图时钟源:与T/C0类似,可以来自内部(系统时钟或预分频器的输出),可以来自外部引脚(T1)16位计数单元:16位可逆计数器,当T/C1工作在一般模式、CTC模式或快速PWM模式时作为加1计数器,当T/C1工作在相位校正PWM或相位频率校正PWM时作为加1/减1计数器6.3.1 T/C1的结构p.167内部结构图输入捕获单元:信号源有2个,当ACIC (Analog Comparator Input Capture Enab
12、le)为0时捕获信号源为引脚ICP,当ACIC 为1时捕获信号源为模拟比较器的输出ACO具有噪声消除控制4次采样相同边沿选择控制下降沿或上升沿触发捕获输出比较匹配单元:完成输出比较匹配中断(定时)、输出波形的产生6.3.2 T/C1的工作模式5大类Modes of Operation1、 一般模式(Normal Mode)T/C1控制寄存器中波形发生模式控制位WGM1(3:0) = 0最简单、最常用的工作模式16位加法计数器,最大值0 xFFFF加1溢出,从最小值0 x0000重新开始加1计数。溢出时产生中断请求(标志TOV1置位)可以利用指令改写计数值(改变定时时间)可以利用输入捕获功能测量
13、脉冲宽度6.3.2 T/C1的工作模式5大类Modes of Operation2、 CTC模式(Clear Timer on Compare Match Mode)比较匹配时清零计数器T/C1控制寄存器中波形发生模式控制位WGM1(3:0) = 4 或 12加法计数器,当计数寄存器的计数值与寄存器OCR1A(如果WGM1 = 4)或ICR1 (如果WGM1 = 12)相等时计数器清零(同时产生OCF1A或ICF1中断请求),然后继续加1计数6.3.2 T/C1的工作模式5大类Modes of Operation2、 CTC模式(Clear Timer on Compare Match Mod
14、e)比较匹配时清零计数器通常用于在OC1A/OC1B引脚输出脉冲信号,也可以用于一般定时通过改变寄存器OCR1A或ICR1的数值可以改变输出脉冲的频率6.3.2 T/C1的工作模式5大类Modes of Operation3、 快速PWM模式(Fast PWM Mode)T/C1控制寄存器中波形发生模式控制位WGM1(3:0) = 5,6,7,14 或 15加法计数器,0000HTOP、0000HTOP模式5的TOP=0 x00FF,8位精度模式6的TOP=0 x01FF,9位精度模式7的TOP=0 x03FF,10位精度模式14,TOP=ICR1;模式15,TOP=OCR1A;最小精度2位,
15、最大精度16位6.3.2 T/C1的工作模式5大类Modes of Operation3、 快速PWM模式(Fast PWM Mode)当WGM1(3:0) = 5,6,7时,输出波形的周期固定(分别对应8,9,10位二进制计数值);当WGM1(3:0) = 14,15时,输出波形的周期可变(分别对应寄存器ICR1或OCR1A)通过改变寄存器OCR1A/ OCR1B来改变OC1A/ OC1B引脚的PWM脉冲宽度(占空比)6.3.2 T/C1的工作模式5大类Modes of Operation4、 相位可调PWM模式(Phase Correct PWM Mode)T/C1控制寄存器中波形发生模式
16、控制位WGM1(3:0) = 1,2,3,10 或 11可逆计数器, 0000HTOP0000H、输出信号周期是快速PWM波形周期的2倍模式1/2/3的TOP值分别为0 x00FF,0 x01FF, 0 x03FF,模式10/11的TOP值分别为寄存器ICR1/OCR1A6.3.2 T/C1的工作模式5大类Modes of Operation4、 相位可调PWM模式(Phase Correct PWM Mode)通过改变寄存器OCR1A/ OCR1B来改变OC1A/ OC1B引脚的PWM脉冲宽度(占空比)6.3.2 T/C1的工作模式5大类Modes of Operation5、相位频率可调P
17、WM模式(Phase and Frequency Correct PWM Mode)T/C1控制寄存器中波形发生模式控制位WGM1(3:0) = 8 或 9可逆计数器, 0000HTOP0000H、输出信号周期也是快速PWM波形周期的2倍模式8和9的TOP值分别为寄存器ICR1和 OCR1A6.3.2 T/C1的工作模式5大类Modes of Operation5、相位频率可调PWM模式(Phase and Frequency Correct PWM Mode)通过改变计数上限(TOP)改变输出脉冲频率,通过改变OCR1A/ OCR1B来改变输出脉冲的初始相位和脉冲宽度(占空比)6.3.4 T
18、/C1的有关I/O寄存器1、T/C1的控制寄存器ATCCR1ACOM1A1COM1A0COM1B1COM1B0FOC1AFOC1BWGM11WGM10Bit7,6 COM1A1, COM1A0: 输出比较A模式选择Bit5,4 COM1B1, COM1B0: 输出比较B模式选择非PWM模式下(一般模式或CTC模式)模式0/4/12 00 正常端口操作,不连接OC1A/B(PB1/2) 01 比较匹配时,触发OC1A/B引脚(取反) 10 比较匹配时,清除OC1A/B引脚(为0) 11 比较匹配时,设置OC1A/B引脚(为1) 6.3.4 T/C1的有关I/O寄存器1、T/C1的控制寄存器ATC
19、CR1A快速PWM模式下(模式5,6,7,14 或 15): 00 正常端口操作,不连接OC1A/B(PB1/2) 01 WGM13=1(模式14或15)比较匹配触发OC1A引脚(取反),OC1B不连接; WGM13=0(模式5,6,7)不连接OC1A/B 10 比较匹配时置位OC1A/OC1B引脚(为1),计数值达到TOP时清零OC1A/OC1B引脚(为0) 11 比较匹配时清零OC1A/OC1B引脚(为0),计数值达到TOP时置位OC1A/OC1B引脚(为1)6.3.4 T/C1的有关I/O寄存器1、T/C1的控制寄存器ATCCR1A相位可调/相位频率可调PWM模式下: 00 正常端口操作
20、,不连接OC1A/B(PB1/2) 01 WGM13=1时比较匹配触发OC1A引脚(取反),OC1B不连接; WGM13=0时不连接OC1A/B 10 向上计数比较匹配时清零OC1A/OC1B引脚,向下计数比较匹配时置位OC1A/OC1B引脚 11 向上计数比较匹配时置位OC1A/OC1B引脚,向下计数比较匹配时清零OC1A/OC1B引脚6.3.4 T/C1的有关I/O寄存器1、T/C1的控制寄存器ATCCR1ACOM1A1COM1A0COM1B1COM1B0FOC1AFOC1BWGM11WGM10Bit3,2 FOC1A, FOC1B: 强制输出比较匹配A,B非PWM模式下(一般模式或CTC
21、模式)有效:当FOC1A/FOC1B设置为“1”时, OC1A/OC1B输出引脚电平立即按照COM1A1:0/COM1B1:0的设置进行相应变化(相当于软件模拟比较匹配事件);当FOC1A/FOC1B设置为“0”时, 当比较匹配发生时OC1A/OC1B输出引脚电平立即按照COM1A1:0/COM1B1:0的设置进行相应变化6.3.4 T/C1的有关I/O寄存器1、T/C1的控制寄存器ATCCR1ACOM1A1COM1A0COM1B1COM1B0FOC1AFOC1BWGM11WGM10最低两位WGM11、WGM10与T/C1的控制寄存器B中的WGM13、WGM12共4位一起用于选择T/C1的工作
22、模式(波形发生模式)6.3.4 T/C1的有关I/O寄存器2、T/C1的控制寄存器BTCCR1BICNC1ICES1WGM13WGM12CS12CS11CS10 bit7 - ICNC1: Input Capture Noise Canceler bit6 - ICES1: Input Capture Edge SelectICES1= 0, falling (negative) edgeICES1= 1, rising (positive) edge模式WGM13:10T/C1工作模式TOP00000一般模式0 xFFFF100018位PWM,相位可调0 x00FF200109位PWM,相位
23、可调0 x01FF3001110位PWM,相位可调0 x03FF40100CTCOCR1A501018位PWM,快速0 x00FF601109位PWM,快速0 x01FF7011110位PWM,快速0 x03FF81000116位PWM,相位频率可调ICR191001116位PWM,相位频率可调OCR1A101010116位PWM,相位可调ICR1111011116位PWM,相位可调OCR1A121100CTCICR1131101(Reserved)141110快速PWMICR1151111快速PWMOCR1A6.3.4 T/C1的有关I/O寄存器2、T/C1的控制寄存器BTCCR1BICNC
24、1ICES1WGM13WGM12CS12CS11CS10最低3位:CS12/1/0Clock Select 1, bit 2/1/0000stop001CK010CK/8011CK/64100CK/256101CK/1024110外部T1引脚,下降沿111外部T1引脚,上升沿6.3.4 T/C1的有关I/O寄存器3、 T/C1的计数寄存器TCNT1(T/C1的计数寄存器为16位寄存器,与之相关的比较寄存器、输入捕获寄存器也是16位寄存器)TCNT115:8TCNT17:0TCNT1HTCNT1L6.3.4 T/C1的有关I/O寄存器4、T/C1输出比较寄存器OCR1A、OCR1BOCR1A15
25、:8OCR1A7:0OCR1AHOCR1ALOCR1B15:8OCR1B7:0OCR1BHOCR1BL6.3.4 T/C1的有关I/O寄存器5、T/C1输入捕获寄存器ICR1ICR115:8ICR17:0ICR1HICR1L6.3.4 T/C1的有关I/O寄存器6、T/C中断屏蔽寄存器TIMSKOCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1TOIE0最低位:TOIE0 T/C0溢出中断允许TOIE1 T/C1溢出中断允许OCIE1AT/C1输出比较A匹配中断允许OCIE1BT/C1输出比较B匹配中断允许TICIE1T/C1输入捕获中断允许TOIE2 T/C2溢出中断允许OC
26、IE2T/C2输出比较匹配中断允许6.3.4 T/C1的有关I/O寄存器7、T/C中断标志寄存器TIFROCF2TOV2ICF1OCF1AOCF1BTOV1TOV0最低位:TOV0 T/C0溢出中断标志TOV1 T/C1溢出中断标志OCF1AT/C1输出比较A匹配中断标志OCF1BT/C1输出比较B匹配中断标志ICF1T/C1输入捕获中断标志TOV2 T/C2溢出中断标志OCF2T/C2输出比较匹配中断标志T/C1的主要应用方法计数 对输入脉冲的个数进行计数 测量高频脉冲频率: T1用作计数器,测量每秒钟脉冲(T1)的个数定时方法一:利用定时溢出中断,合理设置定时计数器初值(同T/C0)方法二
27、:利用比较匹配中断,合理设置输出比较寄存器测量脉冲周期(低频):输入捕获中断T/C1的主要应用方法输出方波方法一:定时中断,输出指令取反方法二:比较匹配,输出自动取反PWM输出电机控制D/A转换正弦信号发生器p.184 例6.2 对T1计数1秒钟测频PB7PB6PB0PD3PD2PD1PD0mega8PD5(T1)思路:T/C0定时1秒钟,T/C1计数T/C0定时初值的计算(设主频8MHz)选分频系数256,计数脉冲周期为1/8 256 = 32 us如果定时8ms,计数个数为8000 / 32 = 250计数初值为256 250 = 6定时1s的溢出中断次数为(软件计数器初值)1000 /
28、8 = 125; 程序设计.include “m8def.inc”.org0 x000RESET: 0 x009rjmptimer0_ovfmain: LDI R16, low(RAMEND)OUT SPL, R16LDI R16, high(RAMEND)OUT SPH, R16; T0 ovf interrupt enableLDI R16, 0 x01OUT TIMSK, R16; T0 prescaler = 256LDI R16, 0 x04OUT TCCR0, R16LDI R16, 6 ; 初值6 (-250)OUT TCNT0, R16LDI R16,
29、0 x01OUT TIFR, R16LDI R27, 125 ;软件计数初值CBI DDRD, 5 ;设置PD5为输入LDI R16, 0 x07 ;T/C1上升沿计数OUT TCCR1B, R16LDI R16, 0 xFF;B口输出OUT DDRB, R16LDI R16, 0 x0F;PD0-PD3输出OUT DDRD, R16SEI;注意书上p.185接下来的一行是; LOOP: RJMP LOOP;应该是这样的:LOOP: MOV R16, R20 ;R21:R20为结果MOV R17, R21RCALL B16TD5RCALL DISPLAY;显示R19R16RJMP LOOPti
30、mer0_ovf : ; 中断服务程序IN R1, SREGPUSH R16LDI R16, 6 ; 重装初值(注意书上)OUT TCNT0, R16DEC R27BRNE LOOP1IN R20, TCNT1LIN R21, TCNT1HPUSH R20PUSH R21SUB R20, R22SBC R21, R23POP R23POP R22LDI R27, 125LOOP1: POP R16OUT SREG, R1RETI;显示R19R16DISPLAY:LDIR24, 0 x0EOUTPORTD, R24; LED0位线MOVR25, R16RCALL CQB; 查7段表显示表OUTPORTB,R0RCALL Delay_1msLDIR24, 0 x0DOUTPORTD, R24; LED1位线MOVR25, R17RCALL CQBOUTPORTB,R0RCALL Delay_1msLDIR24, 0 x0BOUTPORTD, R24; LED2位线MOVR25, R18RCALL CQBOUTPORTB,R0RCALL Delay_1msLDIR24, 0 x07OUTPORTD, R24; LED3位线MOVR25, R19RCALL CQBOUTPORTB,R0RCALL Delay_1msRETCQB : ; get display code of
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论