资源预览内容
第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
第9页 / 共35页
第10页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
发光二极管的闪烁显 示案例功能 定时器T0做定时器使用工作在方 式0下,控制发光二极管,使发光二极 管以亮0.5s后熄0.5s再亮再熄如此反复 的形式进行闪烁。本案例中 fosc=11.0592MHZ,闪烁周期为1s。 相关知识 1、发光二极管的工作特性 这个我们在前面以做过介绍,这里就不重 述了,要求二极管的初始状态是熄灭的。 2、定时器T0、T1的基本结构,工作原理 3、定时/计数器0和定时/计数器1的应用设 计2、定时器T0、T1的基本结构 ,工作原理T0、T1的组成结构 T0/T1的工作方式 T0、T1的控制寄存器计算初值的装入T0、T1的组成结构T0、T1的结构如图6-1所示,图中i=0、 1,表示T0和T1的参数标记.例如TRi就表示 T0的控制位TR0和T1的控制位TR1;Ti为单 片机的外部引脚T0/T1;INTi也为单片机的 外部引脚INT0/INT1;TFi为中断标志位 TF0/TF1,C/T、GATE为特殊功能寄存器 TMOD中的两位,TRi、TFi为特殊功能寄存 器TCON中的二位。从图中可以看出,T0、 T1主要由计数输入、计数器、计数溢出管理 以及控制逻辑等几个部分组成。图6-1 T0、T1的基本结构 定时/计数器的输入有两路,由特殊功能寄存器 TMOD的C/T位来管理。C/T=0时,由振荡频率的12分 频后的脉冲进行计数,定时/计数器工作于定时模式, 实现的是定时功能,所以定时器的实质是对机器周期 进行计数的计数器;C/T=1时,对Ti引脚输入的外部 脉冲进行计数,定时/计数器工作于计数模式,实现计 数器功能。Ti作计数器使用时,引脚Ti用作外部脉冲 输入引脚,不能作普通的I/O端口使用。其它情况下, 可作普通的I/O端口使用。计数溢出管理具有使特殊功能寄存器TCON的TFi 位自动置1和自动清0的功能。当计数器计数满发生溢 出(即计到模值)时,自动使TFi位置1,CPU响应了 对应的定时中断并且进入到中断服务程序中后,TFi位 被自动清0。TFi位也可以用程序指令清0和置1。控制逻辑由受控开关、特殊功能寄存器TCON的TRi 位、TMOD的GATE位、引脚INTi以及门电路组成。控制 C=1时,受控开关闭合,计数脉冲被送往计数器计数器对计 数脉冲计数(计数器运行),控制C=0时,控制开关断开, 计数器停止计数。从图中可以看出:控制C=(GATEINTi)TRi所以,GATE=0时,控制C=TRiGATE=1且TRi=1时,控制C=INTi 实际应用中,常将GATE设为0,用TRi控制计数器的 开启和停止。当需要测量外部脉冲宽度时,可将GATE设为1,TRi 设为1,外部脉冲从INTi引脚引入,用外部脉冲控制计数器 的开启和停止。 T0/T1的工作方式定时/计数器有4种工作方式:方式0、方 式1、方式2、方式3。除方式3外,T0和T1 的工作状态完全相同,在不同的工作下其计 数器的构成不同。在本案例中我们选用工作 方式0,所以只对进行详细的介绍,其它的 方式在以后的案例中涉及到了我们再做介绍 。 方式0:13位的工作方式,定时/计数器的 结构与图6-1所示的基本结构相同,其中的 计数器为13位的计数器,它由Tli的低5位和 Thi的8位组成,Tli的高3位无效。定时/计数器工作时,计数脉冲输入至TLi ,Thi作加1计数,当TLi的低5位发生由11111B 变至00000B时,Thi加1。由TLi和Thi组成的13 位计数器满后回0时硬件电路自动将TFi置1。 T0、T1的控制寄存器T0、T1的运行受控于特殊功能寄存器TCON和 TMOD (1)定时器控制寄存器(TCON)字节地址:88H TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0IT0位地址8F 8E 8D 8C 8B 8A 89 88图6-3 TCON中的结构图 其中,TF1、TR1用于定时/计数器1,TF0、TR0用于 定时/计数器0,IE1、IT1用于外部中断1,IE0、IT0用于 外部中断0。 各位的含义如下:TFi位:定时/计数器回0标志位,也称作定时/计数器 中断请求标志位。对应的计数器计数满回0时,硬件电路自 动将TFi位置1,并向CPU提出中断申请,CPU响应对应的 定时中断,并进入中断服务程序中后,硬件电路自动将TFi 清0。TRi位:定时/计数器运行控制位。它与GATE位、 INTi引脚一起组合来控制定时/计数器的开启和停止。其详 细的控制关系请参考“T0、T1的组成结构”中的有关部分。IEi位:外部中断请求标志。IEi=0 外部中断INTi无中断请求。IEi=1 外部中断INTi有中断请求。 CPU响应了INTi中断后,硬件电路自动将IEi 位清0ITi位:外部中断触发方式控制位。ITi=0 外部中断INTi用低电平方式触发ITi=1 外部中断INTi用下跳沿方式触发单片机复位时,TCON的值为00H,这就意味 着上电时T0、T1均被停止。 其中TR0和TR1分别用于控制T0和T1的启动 和停止,TF0和TF1用于标识T0和T1是否产生溢 出中断请求。(2)、定时器方式寄存器TMODTMOD用于控制T0、T1的运行模式和工作方式,字节地址位89HM1、M0位:工作方式选择控制位。它们的取值组合用来 确定定时/计数器的工作方式。M1、M0的取值组合与定 时/计数器的工作方式之间的关系如表所示。M1M0 方式功能说明00 方式0 13位计数方式01 方式1 16位计数方式10 方式2 8位自动重载初值方式11 方式3 将T0分成2个8位的定时计数器(T1无此 功能)GATE位:门控位。与特殊功能寄存器TCON的TRi位以 及外部引脚INTi的状态组合起来控制定时/计数器Ti开启和 停止,其详细的控制方法在“T0与T1的组成结构”中作了介 绍,这里不再累述计算初值的装入 计数初值的求法 计数初值的装入 计数初值的求法T0、T1开启时,它们的计数器都是在计数初值的基础 上作加1计数,当计数满回0时,TFi置1。也就是说,当计数 器计到模值时,TFi被置1,计数器发生溢出。此时,计数次 数N与计数器的模值M以及计数初值X之间有如下关系 M=NX不同计数方式下,计数器的模值是不同的,各种计数 方式下的模值如下:对于模值为M的计数器,如果要计数N次后发生计数溢出 (TFi位置1),则其计数初值X应为: X=MN 定时/计数器作计数器使用时,一般是已知计数次数要求计 数初值,我们可以用上式计算得出计数初值。定时/计数器 作定时器使用时,一般是已知定时时间t,要确定计数初值 X。由于定时器的实质是对机器周期进行计数,每隔一个机 器周期其计数值就加1,因此,若要定时t时间,则计数器的 计数次数N为: N=t/MC=(fosct)/12 式中的MC为机器周期,fosc为晶振的振荡频率。 计数初值为: X=MN=M(fosct)/12 对于模值为M的计数器,其计数次数N的取值范围为: 1 N M【例6-1】设单片机的晶振频率fosc=12MHz,现拟定 用T0作1ms定时器,试求其在方式0下的计数初值X。 【解】定时器的定时长为1ms,则定时器的计数次数 N为: N=(fosct)/12=(12106110-3)/12=1000 方式0的模值为2000H。所以,计数初值X= MN=2000H1000=1C18H计数初值的装入不同的工作方式下,定时/计数器的构成不同 ,因此其初值的装入方法也不完全相同。 在方式0下,计数器为13位的计数器,它由TLi的低 5位及THi构成,计数器的低5 位二进制数为TLi中低 5二进制数,高8位二进制数为THi中的二进制数。 因此,在装入计数初值时必须将初值的低5位数装入 TLi的低5位中,将初值的高8位数装入THi中,其具 体方法是:将计数初值转换成13位的二进制数,截 取其高8位二进制数并传送至THi中。截取其低5位 二进制数,并在这5位二进制数左端(高位)补上3位 任意二进制数后行成一个字节的二进制数,再将此 二进制数装入TLi中。实际应用中,一般是高3位补0 。 例如,假定通过计算求得计数初值为1234H, T0采用方式0工作,则把初值1234H转换成13位二 进制数为:1 0010 0011 0100B。 截取其高8位二进制数为1 0010 001B=91H。 截取其低5位二进制数为1 0100B,高3位补上0后为 0001 0100B=14H。 因此,TH0中应装入91H,TL0中应装入14H 在方式0下,将计数初装入T0的计数器中的程序段 为: MOV TL0,#14H ;计数初值的低5位数装入TL0中 MOV TH0,#91H ;计数初值的高8位数装入TH0中3、定时/计数器0和定时/计 数器1的应用设计 定时/计数器的应用设计主要是软件设计 ,包括初始化程序的设计和执行程序的设 计两个部分。1)初始化程序的设计2)执行程序的设计初始化程序的设计初始化程序一般安排在系统复位后所要执行的 模块程序中,有时为了提高系统的稳定性,也可以 将初始化程序的一部分代码安排在系统反复执行的 主程序中。初始化程序所要完成的工作是,设置定 时/计数器的运行模式、工作方式、计数初值,如果 执行程序被安排在定时中断服务程序中,则在初始 化程序中还要包括设置定时中断的优先级、开定时 中断等。也就是设特殊功能寄存器TMOD、TCON 、THi、TLi以及IE、IP的值。 在实际应用中,一般 对TCON、IE、IP三个特殊功能寄存器采用位操作 ,只设置与T0或T1有关的位的值,以避免改变其它 功能部件的工作状态。【例6-2】某实际应用系统需用定时/计数器T0对外部输入脉 冲进行计数,每计数满1000个脉冲后,系统就进入定时中断 服务程序处相应的处理,现拟定T0采用高优先级中断,试编 写出对T0作初始化的子程序INIT_T0。 【分析】依题要求,执行程序放在定时中断服务程序中,T0 初始化程序中除了要设置TMOD、TCON、TH0和TL0的值外 ,还要开中断和设置定时中断的优先级。T0的计数值N为: N=1000=3E8H 28N213 故可采用方式0、方式1进行计数,现采用方式1计数,则计 数初值X为: X=2161000=10000H3E8H=FC18H 因此初始化程序中TL0应装入初始值18H,TH0中应装入初 始值FCH。T0作计数器使用,TMOD应设为:XXX0101B, 现取05H。定时中断的优先级,所以PT0=1【程序清单】INIT_T0:MOV TMOD,#05H ;设置T0的工作模式:计数模式、方 ;式1MOV TL0,#18H;设置T0的计数初值:1000MOV TH0,#0FCHSETB PT0;T0采用高优先级中断SETB EA;开全局中断SETB ET0;开定时/计数T0中断SETB TR0;启动定时/计数器T0RET执行程序的设计执行程序所要完成的任务是,定时/计数器中 的计数器计数满发生溢出(即定时器定时到或者计 数器计数到)时,CPU所要完成的工作。这部分程 序无固定的模式,要根据具体情况来作具体处理 。计数器计数满发生溢出时,硬件电路会自动地 将TFi位置1,并向CPU请求中断。所以执行程序 可以放在定时中断服务程序中,也可以放在主程 序中,通过查询TFi位值来决定执行程序是否被执 行。不过这种结构将要占用CPU的大量时间,单 片机的实时性将会下降,在实际应用中尽量少用 。 将执行程序放在定时中断服务程序中,执行程序 的编写实际上就是定时中断服务程序的设计的问 题。在设计中要注意以下几方面问题: 除方式2外,其它工作方式下,定时/计数器都不具备重 装初值的功能。如果定时/计数器在计数满发生溢出时,还 需计数,则在定时中断服务程序中需重装计数初值。在方式2下,定时/计数器常作
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号