6.4 定时器计数器综合应用举例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV R0, A ORL A, R1 JZ NEXT0 MOV A, R0 ANL A, R1 CJNE A, #0FFH,NEXT SJMP MAIN NEXT: MOV TH0,R1 : MOV TL0,R0 SETB TR0 SJMP NEXT1 NEXT0:CLR TR0 : NEXT1:CLR A : INC DPTR MOVC A,@A+DPTR MOV R2, A
;定时器 模式 定时 定时器T0模式 定时器 模式1定时 ;设定初值 设定初值 ; ;等待 等待INT1变低 等待 变低 ;启动 启动T1 启动 ;等待 等待INT1变高 等待 变高 ;开始计数,等待变低 开始计数, 开始计数 ;停止计数 停止计数 ;取出 中的高八位 取出T1中的高八位 取出 ;取出 中的低八位 取出T1中的低八位 取出
SETB TR1 SJMP $ SERVE: PUSH PSW PUSH ACC MOV TL1,#0B0H MOV TH1,#3CH DJNZ 20H,RETUNT MOV 20H,#0AH , MOV A,#01H , ADD A,32H , DA A MOV 32H,A , CJNE A,#60H,RETUNT , , MOV 32H,#00H ,
440 1.14 FDC6
494 1.01 FE07
例如:音符5 例如:音符5 · 1/392×0.5≈1.28ms × 初值) (65536-初值)×2us=1280 初值 初值=64896=(1111,1101,1000,0000)D=FD80 ∴初值
ORG 0000H AJMP MAIN ORG 000BH MOV TH0, R1 MOV TL0, R0 CPL P1.0 RETI ORG 0050H MAIN: MOV TMOD, #01H MOV IE, #82H MOV DPTR, #TAB LOOP:CLR A : MOVC A,@A+DPTR MOV R1, A INC DPTR CLR A MOVC A,@A+DPTR
例3:设计实时时钟程序。时钟 就是以秒、分、时 :设计实时时钟程序。 就是以秒、 为单位进行计时。用定时器与中断的联合应用。 为单位进行计时。用定时器与中断的联合应用。 (1)实现时钟计时的基本方法 ) 计算计数初值。 ① 计算计数初值。 时钟计时的最小单位是秒,但使用单片机定时器/ 时钟计时的最小单位是秒,但使用单片机定时器 计数器进行定时,即使按方式1工作,其最大定时时 计数器进行定时,即使按方式 工作, 工作 间也只能达131ms。因此,可把定时器的定时时间定 间也只能达 。因此, 为100ms,计数溢出 次即得到时钟计时的最小单 ,计数溢出10次即得到时钟计时的最小单 次计数可用软件方法实现。 位—秒;而10次计数可用软件方法实现。 秒 次计数可用软件方法实现 假定使用定时器T0,以工作模式1进行 进行100ms的定时。 的定时。 假定使用定时器 ,以工作模式 进行 的定时 如fosc=6MHz,则计数初值 为: ,则计数初值X为 × × ∵ (216-X)×12/(6 × 106 )=100×10-3 s ∴ X=3CB0H (TH0)=3CH 因此 :(TL0)=0B0H
例4:单片机制作可编程乐曲演奏器。 :单片机制作可编程乐曲演奏器。 原理:通过控制定时器的定时来产生不同音阶的声音, 原理:通过控制定时器的定时来产生不同音阶的声音, 音阶的声音 再利用延迟来控制发音时间的长短,即可控制音频中 再利用延迟来控制发音时间的长短, 的节拍。 节拍。 把乐谱中的音符和相应的节拍变换为定常数和延 迟常数,作成数据表格存放在存储器中。 迟常数,作成数据表格存放在存储器中。由程序表得 到定时常数和延迟常数, 到定时常数和延迟常数,分别用以控制定时器产生方 波的频率和发出该频率方波的持续时间。 波的频率和发出该频率方波的持续时间。当延迟时间 到时,再查下一个音符的定时常数和延迟常数。 到时,再查下一个音符的定时常数和延迟常数。依次 进行下去,就可自动演奏出悦耳动听的乐曲。 进行下去,就可自动演奏出悦耳动听的乐曲。 下面是歌曲“新年好”的一段简谱: 下面是歌曲“新年好”的一段简谱: 1=C 1 1 1 5 | 3 3 3 3 1 | 1 3 5 5 | 4 3 2 — |
MOV A,#01H , ADD A,31H , DA A MOV 31H,A , CJNE A,#60H,RETUNT , , MOV 31H,#00H , MOV A,#01H , ADD A,30H , DA A MOV 30H,A , CJNE A,#24H,RETUNT , , MOV 30H,#00H , RETUNT:POP ACC : POP PSW RETI END
中断服务程序( ② 中断服务程序(PITO)的主要功能 ) 是进行计时操作。 是进行计时操作。程序开始先判断计数溢出时候 满了10次 不满表明还没达到最小计时单位—秒 满了 次,不满表明还没达到最小计时单位 秒,中 断返回;如满10次则表示已达到最小计时单位 次则表示已达到最小计时单位—秒 断返回;如满 次则表示已达到最小计时单位 秒,, 程序继续向下运行,进行计时操作。 程序继续向下运行,进行计时操作。 要求满1秒则 秒位” 秒则“ 单元内容加1, 要求满 秒则“秒位”32H单元内容加 ,满60s则 单元内容加 则 分位”31H单元内容加 单元内容加1, 60min则 时位” “分位”31H单元内容加1,满60min则“时位”30H 单元内容加1,满24h则30H,31H,32H单元内容全部 单元内容加 , 则 , , 单元内容全部 清0。 。
SERVE: MOV TL0,#0B0H MOV TH0,#3CH DJNZ B,LOOP CLR TR0 LOOP: RETI END
端出现的正脉冲宽度。 例2:测量在 :测量在(P3.2)端出现的正脉冲宽度。 端出现的正脉冲宽度 P3.2
T
分析:利用门控制位 实现对定时器/ 分析:利用门控制位GATE实现对定时器/计数器的 实现对定时器 /停控制 来测量脉冲宽度。 停控制, 启/停控制,来测量脉冲宽度。 当GATE为1,TR1(TR0)为1时,只有 为 , 为 时 只有INT1(INT0)引 引 脚输入高电平时, 才允许计数。 脚输入高电平时,T1(T0)才允许计数。 才允许计数 当GATE为0,只要 为 ,只要TR1(TR0)为1时,T1(T0)就允许 为 时 ) 计数。 计数。 利用GATE=1时的这个功能,可测试 时的这个功能, 利用 时的这个功能 可测试INT1(P3.3)和 和 INT0(P3.2)上正脉冲的宽度。 上正脉冲的宽度。 ( 上正脉冲的宽度
LOOP1:ACALL D200 : TAB:DB 0FEH,25H,02H,0FEH,25H,02H : DJNZ R2, LOOP1 DB 0EH,25H,04H,0FDH,80H,04H INC DPTR DB 0FEH,84H,02H,0FEH,84H,02H AJMP LOOP DB 0FEH,84H,04H,0FEH,25H,04H D200: MOV R3, #81H : DB 0FEH,25H,02H,0FEH,84H,02H D200B:MOV A, #0FFH : DB 0FEH,0C0H,04H,0FEH,0C0H,04H D200A:DEC A : DB 0FEH,98H,02H,0FEH,84H,02H JNZ D200A DB 0FEH,57H,08H,00H,00H,04H DEC R3 DB 0FFH,0FFH CJNE R3, #00H,D200B END RET
ORG AJMP ORG AJMP ORG MAIN : MOV MOV MOV MOV MOV SETB SETB SETB SJMP
0000H MAIN 000BH SERVE 0040H SP,#60H B,#0AH , TMOD,#01H TL0,#0B0H TH0,#3CH TR0 ET0 EA $
开始 T0初始化(TMOD,TL0,TH0赋值) P3.2=0? Y 启动T0工作 P3.2=1? Y P3.2=0? Y 停止T0工作 取出TH0和TL0的值送入30H和31H 结束 N N
N
ORG 4000H MOV TMOD,#09H MOV TH0, #00H MOV TL0, #00H JB P3.2, $ SETB TR0 JNB P3.2, $ JB P3.2, $ CLR TR0 MOV 30H,TH1 , MOV 31H,TL1 , SJMP $ END
采用定时方式进行溢出次数的累计,计满10次即得 ② 采用定时方式进行溢出次数的累计,计满 次即得 到秒计时。 到秒计时。 ③ 从秒到分和从分到时的计时是通过累计和数值比较 实现的。 实现的。 时钟显示即及显示缓冲区部分在这里略, ④ 时钟显示即及显示缓冲区部分在这里略,可自行设 计。 (2)程序流程及程序清单 ) 主程序( ① 主程序(MAIN)的主要功能 ) 是进行定时器T1的初始化编程并启动 的初始化编程并启动T1, 是进行定时器 的初始化编程并启动 ,然后通 过反复调用显示子程序,等待100ms定时中断的到来。 定时中断的到来。 过反复调用显示子程序,等待 定时中断的到来
a
为模式1 设T1为模式 为模式 设中断次数
保护现场 赋计数初值 到1s? N N (30H)=24? Y N (30H)清0 恢复现场 返回 (31H)清0 (30H)加1
清计时单元 开中断 启动T1 启动 调用显示子程序 等待定时中断
Y (32H)加1 (32H)=60? Y (32H)清0 (31H)加1 N (31H)=60? Y a
C调音符 调音符 频率 (Hz) ) 半周期 (ms) 定时值
·
5
·
6
7
·
1 524 0.95 FE25
2 588 0.85 FE57
3 660 0.76 FE84
4 698 0.72 FE98
5 784 0.64 FEC0
6 880 0.57 FEE3
7 988 0.51 FF01Βιβλιοθήκη Baidu
392 1.28 FD80
ORG AJMP ORG AJMP ORG MAIN: MOV MOV MOV CLR MOV MOV MOV SETB SETB MOV MOV
0000H MAIN 001BH SERVE 2000H SP,#60H TMOD,#10H 20H,#0AH , A 30H,A , 31H,A , 32H,A , ET1 EA TL1,#0B0H TH1,#3CH
用定时器T0方式 来产生歌谱中各音符 用定时器 方式1来产生歌谱中各音符对应频率 方式 来产生歌谱中各音符对应频率 的方波, 输出驱动喇叭。 的方波,由P1.0输出驱动喇叭。节拍可通过调用延时 输出驱动喇叭 子程序D200(延时 子程序 (延时200ms)次数来实现,以每拍 )次数来实现, 800ms的节拍时间为例,那么一拍需要循环调用 的节拍时间为例, 的节拍时间为例 那么一拍需要循环调用D200 延时子程序4次 同理,半拍就需要调用2次 延时子程序 次。同理,半拍就需要调用 次。设单片 机晶振频率为6MHz,乐曲中的音符、频率及定时常 机晶振频率为 ,乐曲中的音符、 数三者的对应关系如下: 数三者的对应关系如下:
产生1s定时 例1:设时钟频率为6MHz。编写利用 产生 定时 设时钟频率为 。编写利用T0产生 的程序。 的程序。 (1)定时器 工作模式的确定 )定时器T0工作模式的确定 模式0最长可定时 最长可定时16.384ms; ∵ 模式 最长可定时 模式1最长可定时 最长可定时131.072ms; 模式 最长可定时 模式2最长可定时 最长可定时512µs; 模式 最长可定时 定时1s,可选用模式1,每隔100ms中断一 次,中 ∴ 定时 ,可选用模式 ,每隔 中断一 断10次为 。 次为1s。 次为 (2)求计数器初值 )求计数器初值X ∵ (216-X)×12/(6 × 106) =100×10-3 s × × ∴ X=15536=3CB0H 因此: (TH0)=3CH 因此:(TL0)=0B0H