已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 12 章 MCS-51的定时器/计数器,内容安排,一. 内部结构及工作原理 二. 定时器/计数器的控制 三. 工作方式 四. 初始化 五. 应用举例,12.1 内部结构及工作原理,MCS-51内部提供2个16位可编程的定时器/计数器,可编程修改定时或计数的参数/方式,特点:,T/C0和T/C1的内部结构基本相同,它们即可独立工作,也可相互组合工作 T/C0是一个16位加1计数器,也可以拆成两个8位的专用寄存器(TH0和TL0)独立使用,它们各自占一个端口地址TH08CH, TL0 8AH, TH18DH, TL1 8BH 16位加1计数器复位后初始值为0000H,用来存放定时或计数的初值 每来一个计数脉冲,计数器加1,加满后(FFFFH 0000H),将产生一个溢出脉冲,使标志位TF0置“1”,该标志位可产生一个中断请求,也可供CPU查询 启动计数后与CPU并行工作 T/C0可工作于定时模式或计数模式,工作方式有四种:方式03,由寄存器TMOD、TCON设定,定时脉冲周期 =机器周期,1. 定时方式 计数固定周期的脉冲,2. 计数方式 外部输入信号是加到T0(P 3.4)或T1(P3.5)端。外部输入脉冲信号产生由1至0的下降沿时,定时器加1 外部输入信号最高的计数速率是晶振频率的1/24,12.2 定时器/计数器的控制,定时器/计数器的工作模式及方式由SFR(TMOD、TCON)控制,方法:由软件将控制字写入TMOD、TCON,目的设定T/C0和T/C1的工作方式和控制功能,定时器/计数器的初始化,1. 工作方式寄存器TMOD(89H),功能:控制T/C0和T/C1的工作方式,其中高四位为T/C1的方式控制字段,低四位为T/C0的方式控制字,(1)M1、M0:工作方式选择位,注意:TMOD不能位寻址,只能通过字节传送方式设定,(2)C/T:计数/定时工作方式选择位,(3)GATE:门控设置位,GATE0:禁止门控工作方式,只要TR0(TR1)=1,不管INT0(INT1)是高电平还是低电平,启动T/C0 (T/C0 ),GATE1:允许门控工作方式,计数器工作于定时方式,2. 控制寄存器TCON(88H),功能:控制定时器的启动、停止以及定时器的溢出和中断情况,注意:通过软件置位/复位TR0/TR1,12.3 工作方式,1. 工作方式0,方式0是选择T/C0(T/C1)高8位和低5位的13位计数器方式,TH0进位,TH0溢出(回零)TF0标志进位(TF0=1) CPU申请中断 通过查询TF0=1?判断TH0是否回零溢出,注意:,初值一次性有效,否则从0开始 再次计数,需通过软件重新装入初值 最大定时/计数值为213,2. 工作方式1,是一个16位定时器/计数器 方式1的结构几乎与方式0一样,唯一的差别:方式1中的TH1(TH0)和TL1(TL0)均是8位的,构成16位计数器 最大定时/计数值为216,3. 工作方式2,T/C0(T/C1)是一个16位计数器,被拆成一个8位的计数器TH0(TH1)和一个8位计数器TL0(TL1),且两者构成可以自动重装载的8位T/C,编程时,须给TH0(TH1)和TL0(TL1)置入相同值,工作过程:,注意: 初值多次有效,硬件自动完成初值赋值 通过软件修改初值 最大定时/计数值为28,4. 工作方式3,TH0只用于简单的内部定时功能,占用T/C1的TR1和TF1位,T/C1不工作于方式3,且只能按非中断的方式工作,常常利用它的定时功能作串行口波特率发生器,T/C1设置为方式3,则T/C1立即停止计数,并保持原有的计数值,T/C1可设置为方式02 TR1及TF1已被T/C0(TH0)占用,计数开关已被接通,此时仅用T/C1的C/T来切换定时或计数工作方式,就可使T/C1工作 计数器(8、13、16位)回零溢出,只能将输出送入串行口或不需要中断的场合,12.4 初始化,1. 初始化步骤,T/C的初始化:通过程序设定和控制T/C的工作方式和模式,初始化的步骤: 确定工作方式,即根据题目要求先给TMOD送一个方式控制字 计算计数/定时初值,并写入TH0、TL0或TH1、TL1中 根据需要,置位EA使CPU开放中断,同时置位ET0/ET1允许T/C中断(IE),IP设定中断优先级 给TCON送命令控制字,即置位TR0/TR1,启动T/C计数,2. 计数器初值的计算,计数/定时器工作于计数模式时,首先给计数器送初值到TH0/TL0、TH1/TL1中 计数器/定时器是加1计数,全“1”到全“0”溢出,置位TF0/TF1中断标志,向CPU提出中断请求 设需要计数器计数的个数为X,计数初值为C,则计算计数初值表达式: C = M - X,3. 定时器初值的计算,定时模式下,计数器对单片机振荡频率fosc经12分频后的机器周期进行加1计数 设X表示计数个数,M表示模,C表示定时初值,Tcy表示机器周期(Tcy =12/ fosc),则定时时间T的计算公式: T = X Tcy =(M - C) Tcy,定时器的溢出率: 1/T = fosc/(12X)= fosc/ (12(M - C),fosc =12MHz,例12-1:设单片机主时钟fosc=12MHz,定时时间2ms,请编出初始化程序,解: 设置工作方式控制字 (TMOD)(89H)= 0 0 0 0 0 0 0 0 = 00H (方式0) = 0 0 0 0 0 0 0 1 = 01H (方式1), 初始化程序 MOV TMOD,#00H(#01H) ;送控制字 MOV TH0,#0C1H(#0F8H) ;送初值高8位 MOV TL0,#10H(#30H) ;送初值低8位 SETB EA ;开中断 SETB ET0 SETB TR0 ;启动定时器, 计算计数器初值: 方式0:Tc2132ms/1 s=6192=1830H 方式1:Tc2162ms/1 s=63536=F830H,12.5 应用举例,1. 方式0的应用,例12-2:利用T/C0方式0产生1ms定时,在P1.0输出周期为2ms的方波。设8031单片机晶振频率fosc=12MHz,解: (1)确定T/C0的工作方式 要使P1.0输出周期为2ms的方波,只要使P1.0每隔1ms取反一次即可,(2)送T/C0的方式控制字 定时:(TMOD)= 0000 0000B = 00H,即T/C0方式0,只由TR0启动,T/C1不用,高4位取0,(3)计算定时初值 Tcy = 12 / fosc=12/(12106) s = 1 s 计数个数: X = 1 ms / 1s = 1000 定时初值: C = (213X)= 8192 1000 = 7192 D = 1C18H = 11100000 11000B TH0初值为E0H,TL0初值为18H,(4)编程 方法:中断或查询两种方式 中断方法 ORG 0000H LJMP MAIN ;转到主程序MAIN ORG 000BH LJMP TC0S ;转到T/C0的中断服务程序TC0S,主程序: ORG 1000H MAIN: MOV SP, #6FH MOV TMOD, #00H ;置T/C0的方式0,定时 MOV TH0, #0E0H ;送定时初值 MOV TL0, #18H SETB EA ;CPU开中断 SETB ET0 ;T/C0允许中断 SETB TR0 ;启动T/C0定时 HERE: SJMP HERE ;等待中断,中断服务程序: ORG 1200H TC0S: MOV TH0, #0E0H ;重新装入计数初值 MOV TL0, #18H CPL P1.0 ;输出方波 RETI END,查询方式,程序: ORG 0000H LJMP MAIN ;转到主程序MAIN ORG 1000H MAIN: MOV SP, #6FH MOV TMOD, #00H ;置T/C0的方式0,定时 MOV TH0, #0E0H ;送定时初值 MOV TL0, #18H SETB TR0 ;启动T/C0定时 LOOP: JBC TF0,DO1 ;查询定时时间到否 SJMP LOOP DO1: MOV TH0, #0E0H ;重新装入计数初值 MOV TL0, #18H CPL P1.0 ;输出方波 SJMP LOOP ;周而复始 END,2. 方式1的应用,例12-3:例12-2也可采用方式1定时,只需修改TMOD及TH0、TL0,其他不变,3. 方式2的应用,例12-4:利用T/C1方式2实现以下功能: 当T1(P3.5)每输入一个负脉冲时,使P1.0输出一个500s的同步脉冲,如图所示。设fosc=6MHz,解:(1)确定T/C1的工作方式 对T1(P3.5)输入的负脉冲采用方式2计数,而后P1.0输出500s的同步脉冲采用方式2定时。T/C1先计数,后定时,分时操作,(2)送T/C1的方式控制字 计数时:(TMOD)= 0110 0000B = 60H 定时时:(TMOD)= 0010 0000B = 20H,(3)计算计数初值 计数个数:X = 1 计数初值:C = 256 X = 256 1 = 255 = 0FFH (TH1)=(TL1)= 0FFH,(4)计算定时初值 计数个数:X = T/Tcy = 500s / 2s = 250 计数初值:C = 256 X = 256 250 = 6 = 06H (TH1)=(TL1)= 06H,(5)编程(查询法): 查询TF1且由软件将TF1清零的方法 程序: ORG 0000H LJMP START ;转到主程序START ORG 1000H START:MOV SP, #6FH MOV TMOD, #60H ;置T/C1的方式2,外部计数 MOV TH1, #0FFH ;计一个数 MOV TL0, #0FFH SETB TR1 ;启动T/C1计数 LOOP1:JBC TF1,TIS ;溢出否 SJMP LOOP1,TIS: CLR TR1 MOV TMOD, #20H ;置T/C1的方式2,定时 MOV TH0, #06H 4H ;定时500s MOV TL0, #06H 4H CLR P1.0 SETB TR1 ;(1个机器周期2s) LOOP2:JBC TF1,TIS1 ; 溢出否(2个机器周期4s) SJMP LOOP2 TIS1: SETB P1.0 ; 输出同步脉冲(1个机器周期2s) CLR TR1 AJMP START END,注意: 考虑到程序中“”指令的机器周期数,定时初值应调整为06H + 4H = 0AH,也就是使T/C1少计4个机器周期,以确保P1.0输出的负脉冲宽度为500s,4. 方式3的应用,解: (1)确定T/C0的工作方式 T/C0方式3中,TL0可以计外部脉冲,令TL0对T0输入的负脉冲计数;TH0定时500s,TF1=1,使P1.0输出一个负脉冲为500s的同步脉冲,例12-5:利用T/C0方式3实现以下功能: 当T0(P3.4)每输入一个负脉冲时,使P1.0输出一个500s的同步脉冲,如图所示。设fosc=6MHz,(3)计算计数初值(TL0) 计数个数:X = 1 计数初值:C = 256 X = 256 1 = 255 = 0FFH (TL0)= 0FFH,(4)计算定时初值(TH0) 计数个数:X = T/Tcy = 500s / 2s = 250 计数初值:C = 256 X = 256 250 = 6 = 06H (TH0)= 06H,(2)送T/C0的方式控制字 计数时:(TMOD)= 0000 0111B = 07H 由于TH0只能定时工作,故方式字中以TL0的计数方式定义,主程序: ORG 1000H MAIN: MOV SP, #6FH MOV TMOD, #07H ;置T/C0的方式3 MOV TH0, #06H ;定时 MOV TL0, #0FFH ;计一个数 MOV IE, # 1000 1010B ;CPU开中断 ;T/C0、T/C1允许中断 SETB TR0 ;启动T/C0计数 HERE: SJMP HERE ;等待中断,(5)编程(中断法): 程序:ORG 0000H LJMP MAIN ;转到主程序MAIN ORG 000BH LJMP T00S ;转到TF0的中断服务程序TC0S ORG 001BH LJMP T01S ;转到TF1的中断服务程序TC1S,TF1中断服务程序: ORG 1300H TC1S: SETB P1.0 ;输出波形 CLR TR1 ;关闭T/C1计数 MOV TH0, #06H ;重新赋TH0初值 RETI END,注意: 程序执行时TF0与TF1中断不会同时产生(?) 根据8051响应单级中断延误时间(3个机器周期)计算,调整TH0在中断服务程序中重新装入的初值?,TF0中断服务程序: ORG 1200H TC0S: CLR P1.0 ;输出波形 SETB TR1 ;启动T/C1计数 MOV TL0, #0FFH ;重新赋TL0初值 RETI,例12-6:设8031时钟频率fosc=12MHz,请编出利用定时器/计数器T0在P1.0引脚上输出2秒的方波程序,解: (1)问题分析 MCS-51系列单片机中有一个16位定时器/计数器(T/C)。当fosc=12MHz时,最大定时为65.536 ms;当fosc=6MHz时,最大定时为131.072 ms;都达不到1 s时间,怎么实现?,解决方法:,方法1:采用两个T/C级联的方法 一个T/C定时,回0溢出时,使P1.0输出一个负脉冲送到另一个T/C的外部脉冲输入端用以计数 如:当fosc=12MHz时,最大定时时间可以达到T = (65536 65536) 1s = 4294967296s = 4294967.296 ms = 4294.967296 s。若再与软件计数相结合,会产生更长时间,方法2:采用一个T/C定时与软件计数相结合的方法 思路:在主程序中设定一个初值为20的软件计数器和使T0定时50ms。这样,每当T0定时到50ms时CPU就响应它的溢出中断请求,从而进入它的中断服务程序。在中断服务程序中,CPU先使用软件计数减1,然后判断它是否为零。若它为零,则表示定时1秒钟已到,便可恢复软件计数器初值和改变P1.0引脚上电平,然后返回主程序;若它不为零,则表示定时1秒未到,也返回主程序,如此重复上述过程,我们便可在P1.0引脚上观察到周期为2秒的方波,(1)确定T/C0的工作方式 要使P1.0输出周期为2 s的方波,只要使P1.0每隔1 s取反一次即可。方式1,(2)送T/C0的方式控制字 定时:(TMOD)= 0000 0001B = 01H,(3)计算定时初值 计数个数:X = T/Tcy = 50ms / 1s = 50000 计数初值:C = 65536 - X = 65536 - 50000 = 15536 = 3CB0H (TH0)= 3CH;(TL0)= 0B0H,主程序: ORG 1000H START: MOV TMOD, #01H ;令T0为定时器方式1 MOV TH0, #3CH ;装入定时初值 MOV TL0, #0B0H MOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拼装院墙施工方案
- 营销策略游戏-方案
- 散户清仓营销方案
- 无味油漆施工方案
- 金昌地坪施工方案
- 芯片车间施工方案
- 武汉春游活动方案策划
- 冲突营销管理方案
- 巨乳症中的染色质重塑与表观遗传调控-洞察及研究
- 抽样误差与非抽样误差联合建模的实证研究与应用进展-洞察及研究
- LY/T 1821-2009林业地图图式
- 动物(兽医)微生物实验(教学实践)报告
- 冶金企业主要负责人、安全管理人员课件
- 课程实验大纲(JavaScript程序设计)
- 强排泵站运行维护方案
- 单相桥式整流电路说课市公开课金奖市赛课一等奖课件
- DB11-T941-2021无机纤维喷涂工程技术规程
- 2022年上海市黄浦区精神卫生中心医护人员招聘笔试模拟试题及答案解析
- 人卫版外科学腹部损伤课件
- 悬臂预应力盖梁专项施工方案
- 财政部金融企业不良资产批量转让管理办法(财金[2012]6号)
评论
0/150
提交评论