1 / 35

3.3 MCS-51 单片机的定时器 / 计数器(一)

3.3 MCS-51 单片机的定时器 / 计数器(一). 一、 MCS-51 单片机定时器/计数器组成: 定时器 / 计数器 0(T0) : 16 位的加计数器 定时器 / 计数器 1(T1) : 16 位的加计数器 二、定时器 / 计数器的功能 对外部输入信号的计数功能。定时器 / 计数器 0(T0 )的外来脉冲输入端为 P3.4 ;定时器 / 计数器 1(T1 )的外来脉冲输入端为 P3.5 。 定时功能。定时器 / 计数器的定时功能也是通过计数实现的,它的计数脉冲是由单片机的片内振荡器输出经 12 分频后产生的信号,即为对机器周期计数。.

kura
Download Presentation

3.3 MCS-51 单片机的定时器 / 计数器(一)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3.3 MCS-51单片机的定时器/计数器(一) • 一、MCS-51单片机定时器/计数器组成: • 定时器/计数器0(T0):16位的加计数器 • 定时器/计数器1(T1):16位的加计数器 • 二、定时器/计数器的功能 • 对外部输入信号的计数功能。定时器/计数器0(T0)的外来脉冲输入端为P3.4;定时器/计数器1(T1)的外来脉冲输入端为P3.5。 • 定时功能。定时器/计数器的定时功能也是通过计数实现的,它的计数脉冲是由单片机的片内振荡器输出经12分频后产生的信号,即为对机器周期计数。

  2. T1由TH1、TL1构成,字节地址为8DH、8BH T0由TH0、TL0构成,字节地址为8CH、8AH 特殊功能寄存器TMOD控制定时计数器的工作方式 TCON则用于控制定时计数器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等。 MCS-51单片机定时器/计数器逻辑结构图

  3. 定时器/计数器的控制 • 定时器/计数器的控制主要是通过以下几个寄存器实现的: • TCON---定时器/计数器控制寄存器 • TMOD---定时器/计数器工作方式控制寄存器 • IE ---中断允许控制寄存器

  4. GATE —— 门控位。 GATE = 0 启动不受 /INT0或 /INT1的控制; GATE = 1 启动受/INT0 或/INT1 的控制。 C/T —— 外部计数器 / 定时器方式选择位 C//T = 0 定时方式; C //T = 1 计数方式。 M1M0—— 工作模式选择位(编程可决定四种工作模式)。 TMOD 89H

  5. T N个方波 = 0 ——定时; = 1 —— 对外计数。 定时:fosc / 12 = 1 /(12/fosc)= 1 / T 波形等间隔,次数已定,时间确定 即对机器周期进行计数。 左图定时时间为 N*T 计数:脉冲不等间隔。 每个下降沿计数一次 确认一次负跳变需两个机器周期, 所以,计数频率最高为fosc / 24。

  6. TR0 —— 定时 / 计数器0运行控制位。 软件置位,软件复位。 TR1 —— 定时 / 计数器1运行控制位。(用法与TR0类似) TCON 88H TF0、TF1 分别是定时、计数器T0、T1的溢出标志位。

  7. (1)定时/计数器的工作方式 • M1M0—— 工作模式选择位(编程可决定四种工作模式) • 0 0 13位定时/计数器 模式0 • 0 1 16位定时/计数器 模式1 • 0 8 位定时/计数器(自动重装初值) 模式2 • 1 1 T0 8位定时/计数 模式3 • 1 1 T1 停止工作 模式3

  8. 1)工作方式0 T0的等效逻辑结构

  9. 在计数工作方式下,计数器的计数值范围是: 1~8192(2的13方) 当为定时工作方式时,定时时间的计算公式为:          ( 8192 -计数初值)×晶振周期×12 或    ( 8192 -计数初值)×机器周期 其时间单位与晶振周期或机器周期相同。 如果单片机的晶振选为6.000MHz,则最小定时时间为: [8192—(8192—1)]×1/6×10-6×12=2×10-6(s)=2(us) 最长定时时间为: (8192—0)×1/6×10-6×12=16384×10-6(s)=16384(us)。

  10. 2)工作方式1 T0的等效逻辑结构

  11. 在工作方式1下,计数器的计数值范围是: 1~65536(2的16方) 当为定时工作方式1时,定时时间的计算公式为:          (65536—计数初值)× 晶振周期×12 或    (65536—计数初值)× 机器周期 其时间单位与晶振周期或机器周期相同。 如果单片机的晶振选为6.000MHz,则最小定时时间为: [65536—(65536—1)]×1/6×10-6×12=2×10-6(s)=2(us) 最长定时时间为: (65536—0)×1/6×10-6×12=131072×10-6(s)=131072(us)。

  12. 3)工作方式2 T0的等效逻辑结构

  13. 方式2与方式0、1的区别: 工作方式0和工作方式1的最大特点就是计数溢出后,计数器为全0,因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。 工作方式2就具有自动重装载功能,即自动加载计数初值,所以也有的文献称之为自动重加载工作方式。在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再象方式0和方式1那样需要“人工干预”,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。 方式2在串口通讯时,常用作波特率发生器。

  14. 4)工作方式3

  15. 如果定时/计数器0工作于工作方式3,那么定时/计数器1的工作方式就因为自己的一些控制位已被定时/计数器0借用,只能工作在方式0、方式1或方式2下,等效电路参见下图:

  16. 2.怎样编制计数程序? 首先必须对定时计数器进行初始化,然后再开启定时或计数。简单的总结一下,定时计数器的初始化包括以下内容。 (1)确定工作方式——对TMOD赋值; 如:任务中的MOV TMOD,#06H指令,设定T0为计数器工作方式。 (2)预置定时计数器中计数的初值——直接写入TH和TL; 如:任务中的MOV TH0,#00H 两条指令,设定计数初值。 MOV TL0,#00H

  17. (3)根据需要开放定时器/计数器的中断——对IE位赋值;(3)根据需要开放定时器/计数器的中断——对IE位赋值; (4)启动定时器/计数器; 如:任务中的SETB TR0 指令 初值的计算方法 X=M-计数值 M是定时器的最大计数值。视工作方式不同而不同。 工作方式0: 13位定时/计数方式,因此,最多可以计到2的13次方,也就是8192次。 工作方式1: 16位定时/计数方式,因此,最多可以计到2的16次方,也就是65536次。 工作方式2和工作方式3:都是8位的定时/计数方式,因此,最多可以计到2的8次方,也说是256次。

  18. 预置值计算: 用最大计数量减去需要的计数次数即可。 通过上面的任务,我们掌握了计数程序的编制方法,下面我们再看看定时程序怎样编制。 首先我们看一下下面的程序段。 MOV TMOD,#01H MOV TL0,#00H MOV TH0,#4CH SETB TR0 以上程序是任务一中的定时程序段,它的初始化过程和计数方式类似。

  19. MCS-51单片机的定时器/计数器(二) • MCS-51单片机的定时器/计数器应用举例: • 利用定时器/计数器实现固定时间的定时 • 利用定时器/计数器实现对外来信号脉冲的计数 • 利用定时器/计数器实现对外来信号脉冲信号脉宽的测量

  20. 实例一:定时器/计数器实现固定时间的定时 • 题目:利用T0,使用工作方式0,在单片机的P1.0输出一个周期为2ms,占空比为1:1的方波信号。 • 解:周期为2ms,占空比为1:1的方波信号,只需要利用T0产生定时,每隔1ms将P1.0取反即可。 • 编程步骤: • 计算TMOD的值 •        由于GATE=0;M1M0=00;C/T=0; •        所以 (TMOD)=00H • 计算初值(单片机振荡频率为12MHZ) •  所需要的机器周期数: • n=(1000us/1us)=1000 • 计数器的初始值: • X=8192-1000=7192 • 所以:(TH0)=0E0H,(TL0)=18H

  21. 开始 中断入口地址 设置堆栈地址 P1.0取反 设置TMOD方式 重新给T0赋初值 送定时器初值 中断返回 开T0中断 启动T0 等待 流程图 中断程序: 主程序:

  22. 中断程序的主程序和中断服务程序的布局 • 3:程序清单 • ORG 4000H • LJMP MAIN • ORG 400BH ;T0中断入口地址 • LJMP SER ;中断服务程序 • MAIN:MOV SP,#50H ;开辟堆栈 • MOV TMOD,#00H ;工作方式设置 • MOV TH0,#0E0H ;初始值设置 • MOV TL0,#18H • SETB EA ;开中断 • SETB ET0 ;开T0中断 • SETB TR0 ;运行T0 • HERE:SJMP $ ;等待中断 • SER:CPL P1.0 ;定时到,输出取反 • MOV TH0,#0E0H ;重新加载初战值 • MOV TL0,#18H • RETI ;中断返回 • END 主程序 定时器初始化 开定时器中断 中断服务程序

  23. 实例二:利用方式1定时 • 题目:用定时器T1,使用工作方式1,在单片机的P1.0输出一个周期为2分钟、占空比为1:1的方波信号。 • 解:周期为2分钟,占空比为1:1的方波信号,只需要利用T1产生定时,每隔1分将P1.0取反即可。 • 由于定时器定时时间有限,设定T1的定时为50ms,软件计数1200次,可以实现1分钟定时。 • 编程步骤: • 1、计算TMOD的值 •        由于:GATE=0;M1、M0=0、1;C/T=0; •        所以:(TMOD)=10H • 2、计算初值(单片机的振荡频率为12MHZ) •  所需要的机器周期数: • n=(50000us/1us)=50000 • 计数器的初始值:X=65536-50000=15536 • 所以:(TH0)=3CH;(TL0)=0B0H

  24. 中断入口地址 开始 设置堆栈地址 重装初值 N (20H)-1=0? 设置TMOD方式 Y 20H单元赋值20 送定时初值 N (21H)-1=0? 开T0中断 Y 启动T0 21H单元赋值60 计数单元赋值(20H,21H) P1.0取反 等待 中断返回 流程图 中断程序: 主程序:

  25. 中断程序的主程序和中断服务程序的布局 • 程序清单 • ORG 4000H • LJMP MAIN • ORG 401BH ; T0中断入口地址 • LJMP SER ; 中断服务程序 • MAIN:MOV SP,#50H ; 开辟堆栈 • MOV TMOD,#10H ; 工作方式设置 • MOV TH1,#3CH ; 初始值设置 • MOV TL1,#0B0H • SETB EA ; 开中断 • SETB ET1 ; 开T0中断 • SETB TR1 ; 运行T0 • MOV 20H,#20 • MOV 21H,#60 • HERE:SJMP $ ; 等待中断 定时器初始化 主程序 开定时器中断 计数单元赋初值

  26. 中断服务程序 • SER: MOV TH1,#3CH ;初始值重新设置 • MOV TL1,#0B0H • DJNZ 20H,NO • MOV 20H,#20 • DJNZ 21H,NO • MOV 21H,#60 • CPL P1.0 ;定时到,输出取反 • NO:RETI;中断返回 • END 判断中断的次数 注意:此程序的#20和#60这两个立即数后面没有加H表示是十进制数。 思考:能否利用定时器来实现一个电子钟?

  27. 测量每1秒钟之内的按键按下次数 要求: • 每秒的次数用发光管显示出来 • 每秒钟按键的按下次数不超过255次

  28. 工作原理 • 实现的方法:利用T0计数器对从T0输入的脉冲进行计数,利用T1工作于定时。每定时达到1秒钟,取出计数器的值进行显示。由于每秒钟按键的按下次数不超过255次,所以只需要显示TL0的内容即可。 • 步骤: • 由于定时器的最大定时时间不能够达到1秒钟,我们设定T1定时100mS,每10次取一次计数值。 • 设定TMOD,TH1,TL1的内容,(fosc)=6MHz • 所以:(TMOD)=51H • (TH1)=3CH • (TL1)=0B0H

  29. 程序清单 • ORG 0000H • LJMP MAIN • ORG 001BH • LJMP SER • MAIN: MOV TMOD,#51H • MOV TH1,#3CH • MOV TL1,#0B0H • MOV TL0,#00H • MOV TH0,#00H • SETB EA • SETB TR0 • SETB TR1 • SETB ET1 • MOV P1,#00H • SJMP $ 中断程序的主程序和中断服务程序的布局 主程序 T0和T1初始化 T1定时,T0计数 启动T0计数,T1定时,开T1中断

  30. 中断程序清单 关T0和T1 重新对T1赋值 • SER:CLR TR0 • CLR TR1 • MOV TH1,#3CH • MOV TL1,#0B0H • DJNZ R1,#10,LL • MOV R1,#10 • MOV A,TL0 • MOV P1,A • MOV TH0,#00H • MOV TL0,#00H • LL: SETB TR0 • SETB TR1 • RETI • END 判断是否到10次 取值显示 清除T0的计数值 开T0和T1,返回

  31. 测量在(P3.2)端出现的正脉冲宽度 T P3.2

  32. 工作原理 • 实质:利用门控制位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)上正脉冲的宽度。

  33. 开始 T0初始化(TMOD,TL0,TH0赋值) N P3.2=0? Y 启动T0工作 N N P3.2=1? P3.2=0? Y Y 停止T0工作 取出TH0和TL0的值送入30H和31H 结束 流程图:

  34. 程序如下: • ORG 4000H • MOV TMOD,#09H ;定时器T0模式1定时 • MOV TH0, #00H ;设定初值 • MOV TL0, #00H ; • JB P3.2, $ ;等待INT1变低 • SETB TR0 ;启动T1 • JNB P3.2, $ ;等待INT1变高 • JB P3.2, $ ;开始计数,等待变低 • CLR TR0 ;停止计数 • MOV 30H,TH1 ;取出T1中的高八位 • MOV 31H,TL1 ;取出T1中的低八位 • SJMP $ • END 对T0进行初始化 T0计数过程 取计数值

  35. 小 结 • 本章要求: • 了解中断源、中断的功能、中断系统的组成与功能、中断优先权管理、中断响应条件、中断响应过程、中断嵌套等基本概念; • 掌握MCS-51单片机的5个中断源;掌握外部中断的触发方式,与的触发方式有边沿方式与电平方式两种; • 掌握定时器/计数器的计数脉冲来源,计数脉冲来自内部振荡频率的12分频后的脉冲则称为定时器方式,计数脉冲来自外部引脚则称为计数器方式; • 掌握中断请求标志的清除方式,边沿方式下的与、T0、T1的中断请求标志是自动被清除的,而串行口的中断是用户通过软件清除的,电平触发的与还需要硬件的支持才能被清除; • 掌握T0与T1的工作方式,以及各种方式的应用; • 掌握TCON、SCON、IE、IP、TMOD等特殊功能寄存器的功能与应用; • 掌握MCS-51单片机对各中断源的响应条件与过程。

More Related