AVR§9.4(定时计数器1与2)11年
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
out spl,r16
ldi r16,high(ramend) out sph,r16
18主Βιβλιοθήκη 序堆栈的初始化定义PC0为输出
允许T1比较匹配中断 TCNT1=0 OCR1A=$7A12 256分频T/C1,CTC1=1 CPU开中断 等待中断
ldi r16,$01 ;PC0口定义 out ddrc,r16;为输出口 ldi r16,$10 ;允许T1比较 out timsk,r16;匹配A中断 clr r16 ;置TCNT1初值为0 out tcnt1l,r16 out tcnt1h,r16 ldi r16,$7a ;ocr1a置$7a12, out ocr1ah,r16;即1秒中断一次 ldi r16,$12 out ocr1al,r16 ldi r16,$0c ;T/C1对主 out tccr1b,r16;频256分频定时 sei here: rjmp here
• 可读可写 ; 初值=00。
9
T/C1数据类I/O寄存器的读写
1、数据类寄存器都是16位,每一个都由两个I/O寄存器组 成,要保证其读/写的同步性。 2、正确的读写次序(高8位有暂存器) 写时:先高后低; 读时:先低后高。 例1:将$1234 TCNT1 •ldi r16, $34 •ldi r17, $12 •Out TCNT1H, r17 •Out TCNT1L, r16 例2、 输入捕获寄存器 ICR1 R19:R18
2
§9.4.2 T/C1的特殊功能
一、输出比较匹配; 二、输入捕获; 三、PWM等特殊功能。
3
一、 T/C1的输出比较匹配
含义:T/C1在计数的过程中,其计数值与输出比较寄存器的 值相等时发生比较匹配。 TCNT1 T/C1时钟源 相等吗 OCR1A = 触发输出比较匹 配事件A
说明: OCR1A (OCR1AH:OCR1AL); T/C1 共有2个16位输出比较寄存器: 另一个:OCR1B(OCR1BH:OCR1BL)。
21
主程序
堆栈的初始化
定义PC0为输出
256分频T/C1,CTC1=1 TCNT1=0 OCR1A=$7A12 允许T1比较匹配中断 CPU开中断 等待中断
ldi r16,$01 ;PC0口定义 out ddrc,r16;为输出口 ldi r16,$10 ;允许T1比较 out timsk,r16;匹配A中断 clr r16 ;置TCNT1初值为0 out tcnt1l,r16 out tcnt1h,r16 ldi r16,$7a ;ocr1a置$7a12, out ocr1ah,r16;即1秒中断一次 ldi r16,$12 out ocr1al,r16 ldi r16,$0c ;T/C1对主 out tccr1b,r16;频256分频定时 sei here: rjmp here
可以在反向器前加光 电耦合器。
RC滤波器
3、输出电压 =
Vcc*占空比。
8
§9.4.3 T/C1相关的I/O寄存器
一、数据类I/O寄存器 1、16位计数器1(TCNT1) TCNT1H : $2d($4d)与TCNT1L ,$2C($4C)。 2、 16位T/C1输出比较寄存器OCR1A\ OCR1B OCR1AH: $2b($4b)与OCR1AL: $2a($4a)。 OCR1BH :$29($49)与OCR1BL: $28($48)。 3、 16位T/C1 输入捕获寄存器ICR1 ICR1H: $27($47)与ICR1L: $26($46)。
作用?
也可以触发输出比较匹配事件B.
4
输出比较匹配事件发生后可产生的作用
1、影响单片机引脚OC1X的状态 输出比较引脚OC1A(PD5); OC1B(PD4)。 可编程设定输出高电平、低电平、翻转或不连接。
2、可编程设定匹配时是否自动清零TCNT1。 通过CTC1位控制。 ( Clear TC1 ) 清零TCNT1后仍继续加1计数。
T/C1时钟源选择 0 0 0 停止 0 0 1 CK 0 1 0 CK/8 0 1 1 CK/64 1 0 0 CK/256 1 0 1 CK/1024 1 1 0 T1脚下降沿计数 1 1 1 T1脚上升沿计数.
11
CTC1:比较匹配时 是否自动清零TCNT1. 1:TCNT1=0000 0: TCNT1继续计数 PWM模式下无效,无意义
T/C1可工作于输出比较匹配模式或者PWM模式。
12
2、 TCCR1A用于PWM模式
•T/C1控制寄存器A---TCCR1A-- $2f($4f)
COM1A1 COM1A0 COM1B1 COM1B0
-
-
PWM11 PWM10
PWM模式下,OC1X输出引 脚的状态。
0 0 :选择T/C1输出 比较匹配模式
15
正向PWM的输出频率、占空比等
列表如下: 分辨率 8位PWM 定时器TOP值 $00ff(255) 频率 fTC1/510 占空比 OCR1X/255
9位PWM
10位PWM
$01ff (511)
$03ff (1023)
fTC1/1022
fTC1/2046
OCR1X/511
OCR1X/1023
一般T/C1不分频, fTC1=主频
•设定单片机内部硬件自动清零TCNT1,相当于设 定时间常数的自动再装入功能。 可实现较精确的定时.
5
输出比较匹配事件发生后可产生的作用….
3、相应的输出比较匹配标志置1。产生中断.
•T/C中断标志寄存器---TIFR-- $38($58)
OCF2 TOV2 OCF1A OCF1B •T/C中断屏蔽寄存器---TIMSK-- $39($59) ICF1 OCF1A OCF1B TOV1 ---TOV0
•In r18, ICR1L
•In r19, ICR1H
10
二、T/C1的控制类I/O寄存器(2个)
1、T/C1控制寄存器B---TCCR1B-- $2e($4e) ICNC1 ICES1 CTC1 CS12 CS11 CS10
ICNC1:输入捕获噪音清除 0:测一次符合条件即可. 1:连测四次一样才为真. ICES1:输入捕获边缘选择 1:上升沿 0:下降沿
§9.4 定时/计数器1
• §9.4.1 T/C1概述 • §9.4.2 T/C1的特殊功能 • §9.4.3 T/C1相关的I/O寄存器
• §9.4.4 T/C1应用举例
1
§9.4.1
T/C1概述
T/C1 :核心是一个16位加1计数器TCNT1;
具有外计数、定时、停止计数等基本功能。
T/C1有多个时钟源可通过软件编程选择设定; 16位加1计数器:对时钟源来的脉冲进行加1计数,计 数到全1即$ffff时,再加1,计数器回零,溢出, T/C1溢出中断请求标志TOV1置1;若相应中断屏蔽允 许位TOIE1为1、CPU开中断(I位=1),则执行相应 的中断服务程序(入口地址$0008)。 T/C1还具有输出比较匹配、输入捕获、PWM等特殊功能。
D7-6位 0 0:不与引脚OC1A连接 0 1:不与引脚OC1A连接 1 0:输出正向PWM 1 1:输出反向PWM
0 1 : 为8位PWM
1 0 : 为9位PWM 1 1 : 为10位PWM
PWM模式下的计数方法:以9位PWM为例,从$000加1计数到 $1ff,再反向减1计数到$000,循环往复。
堆栈的初始化 定义PC0为输出 允许T1比较匹配中断 .include "8535def.inc" .org $0000 rjmp main .org $0006 rjmp tim1_compa main: ldi r16,low(ramend) ;
TCNT1=0
OCR1A=$7A12 256分频T/C1,CTC1=1 CPU开中断 等待中断
2、 TCCR1A用于输出比较匹配模式
•T/C1控制寄存器A---TCCR1A-$2f($4f)
COM1A1 COM1A0 COM1B1 COM1B0
-
-
PWM11 PWM10
COM:比较输出模式,确定比较匹配时, 0 0 选择T/C1输出 输出引脚OC1X(输出方式)的状态。 比较匹配模式; D7-6位 0 0:不与引脚OC1A连接 非0 0 则选择 0 1:取反引脚OC1A PWM模式。 1 0:清零引脚OC1A 1 1:置 1 引脚OC1A
输出比较匹配标志置1.
OCIE2 TOIE2 TICIE1 OCIE1AOCIE1B TOIE1
OCIE1A OCIE1B
----
TOIE0
=1时:输出比较匹配中断使能, =0:禁止。
A , B是相互独立的。
6
二、 T/C1的输入捕获IC
1、输入捕获的是:外部引脚的电平变化, 即上升沿或下降 沿。 ICP(PD6)输入捕获引脚。
16
应用1--T/C1输出比较匹配用于定时
例1:每隔1秒使 PC0取反一次,设时钟=8MHz。
分析:256分频,256/8M = 32us计一个数
1s/32us=31250
=$7A12OCR1A 定时计数器1输出比较匹配中断服务程序 入口地址=$0006 程序主要功能模块:
17
例1:每隔1秒使 PC0取反一次,设时钟=8MHz。 主程序主要模块如下:
20
主程序
堆栈的初始化
定义PC0为输出
允许T1比较匹配中断 TCNT1=0 OCR1A=$7A12 256分频T/C1,CTC1=1 CPU开中断 等待中断
ldi r16,$01 ;PC0口定义 out ddrc,r16;为输出口 ldi r16,$10 ;允许T1比较 out timsk,r16;匹配A中断 clr r16 ;置TCNT1初值为0 out tcnt1l,r16 out tcnt1h,r16 ldi r16,$7a ;ocr1a置$7a12, out ocr1ah,r16;即1秒中断一次 ldi r16,$12 out ocr1al,r16 ldi r16,$0c ;T/C1对主 out tccr1b,r16;频256分频定时 sei here: rjmp here
22
主程序
堆栈的初始化
定义PC0为输出
允许T1比较匹配中断 TCNT1=0 OCR1A=$7A12 256分频T/C1,CTC1=1 CPU开中断 等待中断
ldi r16,$01 ;PC0口定义 out ddrc,r16;为输出口 ldi r16,$10 ;允许T1比较 out timsk,r16;匹配A中断 clr r16 ;置TCNT1初值为0 out tcnt1l,r16 out tcnt1h,r16 ldi r16,$7a ;ocr1a置$7a12, out ocr1ah,r16;即1秒中断一次 ldi r16,$12 out ocr1al,r16 ldi r16,$0c ;T/C1对主 out tccr1b,r16;频256分频定时 sei here: rjmp here
2、输入捕获的方法:
噪音消除器 ICP引脚 输入捕获噪音清除 ICNC1位 0:测一次符合条件即可. 1:连测四次一样才为真. 启动噪音消除功能。 边缘选择 ICES1位 1:上升沿 0:下降沿 边沿选择
TCNT1
输入捕获寄存器ICR1
输入捕获中断标志 ICF1=1。 T/C1输入捕获中断允 许志TICIE1=1时,向 CPU发中断请求。
19
主程序
堆栈的初始化
定义PC0为输出
允许T1比较匹配中断 TCNT1=0 OCR1A=$7A12 256分频T/C1,CTC1=1 CPU开中断 等待中断
ldi r16,$01 ;PC0口定义 out ddrc,r16;为输出口 ldi r16,$10 ;允许T1比较 out timsk,r16;匹配A中断 clr r16 ;置TCNT1初值为0 out tcnt1l,r16 out tcnt1h,r16 ldi r16,$7a ;ocr1a置$7a12, out ocr1ah,r16;即1秒中断一次 ldi r16,$12 out ocr1al,r16 ldi r16,$0c ;T/C1对主 out tccr1b,r16;频256分频定时 sei here: rjmp here
7
采样频率为主晶振时钟频率。
三、 T/C1的PWM脉宽调制输出
1、可用作8、9、10位的PWM脉宽调制输出,脉冲宽度、 占空比可调,由引脚OC1A\ OC1B输出PWM信号。自运行。 2、输出PWM 信号具有DAC模拟电压输出功能,可用 作DA转换器。 跟随器:输入阻抗高,输出阻抗 低,输出电压基本不变。
13
正向PWM的定义
定义:向上计数时,匹配时清零OC1X引脚,向下计 数时,匹配时置位OC1X引脚。
14
如何确保偶数长的PWM脉冲?
•在PWM模式下,当后10位OCR1A/OCR1B位被写入时,它们 被送入临时地址。当定时器/计数器 1到达 TOP时,它们被锁存。 这就防止了在非同步 OCR1A/OCR1B写入事件中发生奇数长的 PWM脉冲(误操作)。