1.05k likes | 1.3k Vues
第 3 章 MCS-51 单片机的内部资源及应用. 主要内容: MCS-51 单片机内部各器件的具体结构、组成原理、工作方式的设置及典型应用,为读者后续学习单片机应用系统设计、充分利用单片机内部资源解决工程实际问题奠定基础。 重点 在于各器件工作方式的设置及灵活应用, 难点 在于中断系统和定时器 / 计数器的应用。. 3.1 MCS-51 单片机的并行 I/O 口. 3.1.1 MCS-51 内部并行 I/O 口 8051 有 4 个 8 位并行 I/O 口,分别命名为 P0, P1, P2 和 P3 口。 1 . P0 口
E N D
第3章MCS-51单片机的内部资源及应用 主要内容: MCS-51单片机内部各器件的具体结构、组成原理、工作方式的设置及典型应用,为读者后续学习单片机应用系统设计、充分利用单片机内部资源解决工程实际问题奠定基础。重点在于各器件工作方式的设置及灵活应用,难点在于中断系统和定时器/计数器的应用。
3.1 MCS-51单片机的并行I/O口 3.1.1 MCS-51内部并行I/O口 8051有4个8位并行I/O口,分别命名为P0, P1, P2和P3口。 1.P0口 P0口为双向三态输入/输出口, P0口既可作为地址/数据总线口,又可作为通用I/O口,可驱动8个TTL输入。在访问 外部存储器时,P0口作地址/数据总线复用口,是一个真正的双向口,并分时送出地址的低8位和送出(或接收)相应存储单元的数据。作通用I/O口时,P0口只是一个准双向口,需要在外部引脚处外接上拉电阻。 P0口的位结构如右图所示。
2.P2口 P2口常用做外部存储器的高8位地址口。当不用做地址口时,P2口也可作为通用I/O口,这时它也是一个准双向I/O口。不必外接上拉电阻就可以驱动任何MOS驱动电路,且只能驱动4个TTL输入。P2口的位结构如右图所示。 3.P1口 P1口常用做通用I/O口,它也是一个标准的准双向I/O口,不必外接上拉电阻就可以驱动任何MOS驱动电路,且只能驱动4个TTL输入。P1口的位结构如右图所示。
4.P3口 P3口是一个双功能口,第一功能与P1口一样可用做通用I/O口,也是一个准双向I/O口,能驱动4个TTL输入。另外还具有第二功能。P3口工作在第二功能时各管脚定义如下表所示。 P3口的位结构图如右图所示。
3.1.2 MCS-51内部并行I/O口的应用 MCS-51I/O端口的操作方式: (1)输出数据方式:CPU通过一条数据传送指令就可以把输出数据写入P0~P3的端口锁存器,然后通过输出驱动器送到端口引脚线。例如,下面的指令均可在P0口输出数据。 MOV P0, A ANL P0, #data ORL P0, A (2)读端口数据方式:CPU读入的这个数据并非端口引脚线上的数据。读端口数据可以直接读端口。例如,下面的指令均可以从P1口输入数据,这是锁存器上的数据。 MOV A, P1 MOV 20H, P1 MOV R0, P1 MOV @R0, P1
(3)读端口引脚方式:读端口引脚方式可以从端口引脚上读入信息。在这种方式下,CPU首先必须使欲读端口引脚所对应的锁存器置1,然后才能读端口引脚。因此,用户在读引脚时必须先置位锁存器后读,连续使用两条指令。例如,下面的程序可以读P1引脚上的信号。(3)读端口引脚方式:读端口引脚方式可以从端口引脚上读入信息。在这种方式下,CPU首先必须使欲读端口引脚所对应的锁存器置1,然后才能读端口引脚。因此,用户在读引脚时必须先置位锁存器后读,连续使用两条指令。例如,下面的程序可以读P1引脚上的信号。 MOV P1, #0FFH ; 置位P1引脚的锁存器 MOV A, P1 ; 读P1引脚上的信号送累加器A 注意:写引脚时是直接向端口输出要写的数据, 读引脚时就要区分是读端口的引脚信号还是读锁存器信 号。 读端口信号是必须先向端口写“1”,然后再读,这就是单片机口信号的准双向的含义。切记!(见P106)
1.I/O口直接用于输入/输出 在I/O口直接用做输入/输出时,CPU既可以把它们看做数据口,也可以看做状态口,这是由用户决定的。 [例题1]要求设计跑马灯。 硬件电路设计: 1.设计单片机最小系统 2.设计带按键的复位电路 3.使用一个P口连接八个led发光二极管 4.软件设计 各引脚功能如下: VCC:接正电源; Vss:接地;
程序设计: ;实验一:单片机最小系统及流水灯程序 org 00h ;源程序起始地址 jmp main ;跳转到MAIN org 0050h ;主程序开始地址 main: mov a,#11111110B ;立即数送入A loop: mov p1,a ;数据送P1口 rr a ;右循环一下 lcall delay ;延时子程序 ajmp loop ;重复循环 delay: mov r3,#250 ;延时子程序 d1: mov r4,#235 d2: nop nop nop djnz r4,d2 djnz r3,d1 ret end
2.I/O口扩展外部锁存器 为了输出数据并保持这个输出状态,MCS-51单片机常常需要使I/O口通过外部锁存器和输出设备相连。如下图所示为8051通过74LS273与输出设备连接的接口图。8051通过下面的指令输出数据至数码管: MOV DPTR, #7FFFH ; DPTR指向74LS273端口,地址为7FFFH) MOVX @DPTR ,A ; 输出数据到数码管上
74LS273是带有清除端的8D触发器,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存。 CPU 的ALE信号必须经过反相器反相之后才能与74LS273的控制端CLK 端相连。 地址锁存器使用74LS373较多。引脚图如下页图所示。与8051连接电路如下页图所示。 WR
上图中的a~g七个笔划(段)及小数点dp均为发光二极管。数码管显示器根据公共端的连接方式,可以分为共阴极数码管(将所有发光二极管的阴极连在一起)和共阳极数码管(将所有发光二极管的阳极连在一起)。上图中的a~g七个笔划(段)及小数点dp均为发光二极管。数码管显示器根据公共端的连接方式,可以分为共阴极数码管(将所有发光二极管的阴极连在一起)和共阳极数码管(将所有发光二极管的阳极连在一起)。 单片机系统扩展LED数码管时多用共阳LED。共阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴数码管段笔画是用高电平(“0”)点亮的,要求驱动功率较大。但是共阴管的亮度比共阳管的要亮些。 通常每个段笔画要串一个数百欧姆的降压电阻。 笔画的选择称为段选,公共端的选择称为位选。
; 八个数码管动态显示程序 org 00h ajmp main org 50h main: mov r2,#00h ;将要显示的数字送R2 sss: mov dptr,#tab ;查表取得数字的字型码送R0 mov a,r2 movc a,@a+dptr mov r0,a mov r6,#40h ;循环调用显示程序延时1.5S xsh1: lcall disp1 djnz r6,xsh1 inc r2 ;将下一个要显示数字送R2 cjne r2,#0ah,sss;判断数字9显示完否? ajmp main disp1: mov r5,#08h ;显示程序开始,将要显示的位数送R5 mov r1,#0feh ;将要显示的位码送R1
dis00: mov dptr,#7fffh ;将要显示的字型码送74LS273 mov a,r0 movx @dptr,a mov a,r1 ;将位选码送入R1 mov p2,a lcall delay ;调延时1MS子程序 rl a ;位选左移,选中下一位,如果8位数字 mov r1,a ;显示完了则返回 djnz r5,dis00 ret delay: mov r3,#08h ;延时1MS程序 loop: mov r4,#0a0h djnz r4,$ djnz r3,loop ret tab: db 0c0h,0f9h,0a4h,0b0h,99h ;字型表 db 92h,82h,0f8h,80h,90h end
3.2 MCS-51单片机的中断系统 计算机与外界的联系是通过外部设备(也称为外设、输入/输出设备或I/O设备)与外界联系的。计算机与外设之间不是直接相连的,而是通过不同的接口电路来达到彼此间的信息传送的目的。 计算机与外设之间交换信息的方式: (1)无条件传送方式:外设对计算机来说总是准备好的。 (2)查询传送方式:传送前计算机先查询外设的状态,若已经准备好就传送,否则就继续查询/等待。 (3)中断传送方式:外设通过申请中断的方式与计算机进行数据传送。 (4)直接存储器存取方式(DMA):传送数据的双方直接通过总线传送数据, 不经CPU中转。
3.2.1 中断的基本概念 1.中断的定义 所谓“中断”,是指CPU执行正常程序时,系统中出现特殊请求,CPU暂时中止当前的程序,转去处理更紧急的事件(执行中断服务程序),处理完毕(中断服务完成)后,CPU自动返回原程序的过程。 作用:采用中断技术可以提高CPU效率、解决速度矛盾、实现并行工作、分时操作、实时处理、故障处理、应付突发事件,可使多项任务共享一个资源(CPU)。 中断与子程序的最主要区别:子程序是预先安排好的,中断是随机发生的。 中断涉及的几个环节:中断源、 中断申请、开放中断、保护现场、中断服务、恢复现场、中断返回。
2. 中断源 中断源是指引起中断的设备或事件,或发出中断请求的源头。 3. 中断的分类 中断按功能通常可分为可屏蔽中断、非屏蔽中断和软件中断三类。 可屏蔽中断是指CPU可以通过指令来允许或屏蔽中断的请求。 非屏蔽中断是指CPU对中断请求是不可屏蔽的,一旦出现,CPU必须响应。 软件中断则是指通过相应的中断指令使CPU响应中断。 4. 中断优先权与中断嵌套 中断优先级(也称为中断优先权):给每个中断源指定中断响应的优先级别, CPU按中断源的优先级高低顺序响应各中断源发出的中断请求。 中断嵌套:在某一瞬间,CPU因响应某一中断源的中断请求而正在执行它的中断服务程序时,若又有一级别高的中断源向CPU发出中断请求,且CPU的中断是开放的,CPU可以把正在执行的中断服务程序暂停下来,转而响应和处理优先权更高的中断源的中断请求,等处理完后再转回来,继续执行原来的中断服务程序,这就是中断嵌套。 中断嵌套的过程和子程序嵌套过程类似,子程序的返回指令是RET,而中断服务程序的返回指令是RETI。
5. 中断响应及处理过程 ① 保护断点 ② 寻找中断源 ③ 中断处理 ④ 中断返回 保护断点和寻找中断源都是由硬件自动完成的,用户不用考虑。 6. 中断系统的功能 中断系统:能够实现中断功能的硬件电路和软件程序。 中断系统的功能:能够实现中断优先权排队、中断嵌套、自动响应中断和中断返回等功能。 MCS-51单片机的大部分中断电路都是集成在芯片内部的,只有外部中断请求信号产生电路才分散在各中断源电路和接口电路中。
3.2.2 MCS-51的中断系统 MCS-51提供了5个中断源,2个中断优先级控制,可实现2个中断服务嵌套。可通过程序设置中断的允许或屏蔽,设置中断的优先级。 1.MCS-51的中断源 8051允许5个中断源: (1)外部中断源(中断标志为IE0和IE1) 由 ( P3.2 )端口线引入,低电平或下降沿引起。 由 ( P3.3 )端口线引入,低电平或下降沿引起。 (2)内部中断源(中断标志为TF0、TF1和TI/RI) T0:定时/计数器0中断,由T0回零溢出引起。 T1:定时/计数器1中断,由T1回零溢出引起。 TI/RI:串行I/O中断,完成一帧字符发送/接收引起。
CPU识别中断申请的依据: CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。 2.中断控制 MCS-51单片机设置了4个专用寄存器用于中断控制,用户通过设置其状态来管理中断系统。 (1)定时器控制寄存器TCON (88H) TF1TR1TF0TR0IE1IT1IE0IT0 TF0/TF1:定时器溢出中断申请标志位(由硬件自动置位)。 =0:定时器未溢出; =1:定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。
TR0/TR1:定时器运行启停控制位(可由用户通过软件设置 )。 =0:定时器停止运行; =1:定时器启动运行。 IE0/IE1:外部中断申请标志位(由硬件自动置位 ,中断响应后转向中断服务程序时,由硬件自动清0 )。 =0:没有外部中断申请; =1:有外部中断申请。 IT0/IT1:外部中断请求的触发方式控制位(可由用户通过软件设置 )。 =0:在INT0/INT1端申请中断的信号低电平有效; =1:在INT0/INT1端申请中断的信号负跳变有效。
EAES ET1 EX1 ET0 EX0 (2)串行口控制寄存器SCON (98H) SM0SM1SM2RENTB8 RB8 TI RI TI/RI:串行口发送/接收中断申请标志位(由硬件自动置位,必须由用户在中断服务程序中用软件清0)。 =0:没有串行口发送/接收中断申请; =1:有串行口发送/接收中断申请。 SCON的高6位用于串行口工作方式设置和串行口发送/接收控制。 (3)中断允许控制寄存器IE(0A8H)
(3)中断允许控制寄存器IE (0A8H) EAES ET1 EX1 ET0 EX0 EX0/EX1/ET1/ET0/ES 位:分别是 / ,T0/T1,串行口的中断允许控制位。 =0 :禁止中断; =1 :允许中断。 EA:总的中断允许控制位(总开关): =0 :禁止全部中断; =1 :允许中断。
(4)中断优先级控制寄存器IP (0B8H) 8051有两个中断优先级,即高优先级和低优先级,每个中断源都可设置为高或低中断优先级,以便CPU对所有的中断实现两级中断嵌套。 8051内部中断系统对各中断源的中断优先级有一个统一的规定,称为自然优先级(也称为系统缺省优先级)。如下表所示。 8051单片机的中断优先级采用了自然优先级和人工设置高、低优先级的策略,中断处于同一级别时,就由自然优先级确定。开机时,每个中断都处于低优先级,中断优先级可以通过程序来设定,由中断优先级寄存器IP来统一管理。
(4)中断优先级控制寄存器IP (0B8H) PS PT1 PX1 PT0 PX0 PX0/PX1:/优先级控制位: =0 :属低优先级; =1 :属高优先级。 PT0/PT1:T0/T1中断优先级控制位: =0 :属低优先级; =1 :属高优先级。 PS1:串行口中断优先级控制位: =0 :属低优先级; =1 :属高优先级。
中断优先级处理原则: 对同时发生多个中断申请时: 不同优先级的中断同时申请:先高后低 相同优先级的中断同时申请:按序执行 正处理低优先级中断又接到高级别中断:高打断低 正处理高优先级中断又接到低级别中断:高不理低
3.中断响应 (1)中断响应的条件 MCS-51单片机工作时,在每个机器周期中都会去查询各个中断标志,如果有中断请求。必须满足下列条件单片机才能响应中断。 ① 相应的中断是开放的; ② 没有同级的中断或更高级别的中断正在处理; ③ 正在执行的指令必须执行完最后 1个机器周期; ④ 若正在执行RETI,或正在访问IE或IP寄存器,则必须执行完当前指令的下一条指令。后方能响应中断。
(2)中断响应的过程 中断过程包括中断请求、中断响应、中断服务、中断返回四个阶段。 中断请求:中断源将相应请求中断的标志位置 “1”,表示发出请求,并由CPU 查询。 中断响应:在中断允许条件下相应中断。断点入栈→撤除中断标志→关闭低同级中断允许→中断入口地址送PC。 这些工作都是由硬件自动完成的。 中断服务:根据入口地址转中断服务程序,包含保护现场、执行中断主体、恢复现场。 中断返回:执行中断返回RETI指令→断点出栈→开放中断允许→返回原程序。
中断服务程序入口地址: 中断响应的主要内容就是由硬件自动生成一条长调用指令(LCALL addr16),CPU执行这条长调用指令便响应中断,转入相应的中断服务程序。这里的addr16就是程序存储器中相应的中断服务程序的入口地址,MCS-51的5个中断源的中断服务程序入口地址是固定的,如下表所示。
8051的5个中断源的中断服务入口地址之间相差8个单元。这8个存储单元用来存储中断服务程序一般来说是不够的。用户常在中断服务程序地址入口处放一条三字节的长转移指令。一般地,主程序从0030H单元以后开始存放。例如:8051的5个中断源的中断服务入口地址之间相差8个单元。这8个存储单元用来存储中断服务程序一般来说是不够的。用户常在中断服务程序地址入口处放一条三字节的长转移指令。一般地,主程序从0030H单元以后开始存放。例如: ORG 0000H LJMP START ; 转入主程序,START为主程序地址标号 ORG 0003H LJMP INT0 ; 转外中断中断服务程序 ORG 000BH LJMP T0 ; 转定时器T0中断服务程序 ORG 0030H START: …… ; 主程序开始 (3)中断响应时间 正常中断响应时间至少为3~8个机器周期,如果有同级或高级中断服务,将延长中断响应时间。
4.中断请求的撤除 为了避免中断请求标志没有及时撤除而造成的重复响应同一中断请求的错误, CPU在相应中断时必须及时将其中断请求标志位撤除。 8051的5个中断源的中断请求撤除的方法是不同的。 (1)定时器溢出中断请求的撤除 定时器溢出中断得到响应后,其中断请求的标志位TF0和TF1由硬件自动复位。 (2)串行口中断请求的撤除 串行口中断得到响应后,其中断请求的标志位TI和RI不能由硬件自动复位,必须由用户在中断服务程序的适当位置通过如下指令将它们撤除。 CLR TI ; 撤除发送中断请求标志 CLR RI ; 撤除接收中断请求标志 或采用字节型指令:ANL SCON, #0FCH
(3)外部中断请求的撤除 外部中断请求的两种触发方式(电平触发和负边沿触发)的中断请求撤除的方法是不同的。 负边沿触发方式:CPU在前一机器周期采到 / 引脚为高,后一机器周期采到为低才认为是一次中断请求,即依靠CPU两次检测 (或 )上的负边沿触发电平状态而置位外部中断标志位IE0或IE1 。CPU 可记忆申请、可由硬件自动撤除中断申请。 电平触发方式:/ 引脚上的低电平须持续到中断发生。若中断返回前仍未及时撤除低电平,虽然CPU在响应中断时能由硬件自动复位IE0或IE1,但引脚上的低电平仍会使已经复位的IE0或IE1再次置位,产生重复中断的错误。
电平触发型外部中断请求的撤除必须由外部硬件使(或)上的低电平随着其中断被响应而变为高电平。其中断请求撤除的电路如下图所示。电平触发型外部中断请求的撤除必须由外部硬件使(或)上的低电平随着其中断被响应而变为高电平。其中断请求撤除的电路如下图所示。 外来的低电平→反相→CP端产生上跳沿→ D端的“0”输出到Q端→申请中断,中断服务返回前对P1.0送“0” →令Q端变为“1” 指令如下: ANL P1,#0FEH (或CLR P1.0 ) ;令Q端置“1” ORL P1, #01H ( SETB P1.0 ) ;令SD端置“1”,以免下次中断来时Q端不能变“0”
3.2.3 MCS-51中断系统的编程 (1)中断初始化设置:开相应中断允许( IE )、根据需要选择优先级( IP )和选择外中断触发方式(TCON),设置计数器、串行口的有关参数。 (2)中断服务程序的编写:中断入口、保护现场、关中断、中断服务主体程序、恢复现场、开中断、设置计数器、串行口的有关参数、中断返回指令RETI 。 [例题2]设8051外部中断源接引脚 ,中断触发方式为电平触发,试编制8051中断系统的初始化程序。 解:采用位操作指令实现(也可以采用传送指令和逻辑指令)。 SETB EA ; 开总中断 SETB EX0 ; 开中断 SETB PX0 ; 设置为高优先级 CLR IT0 ; 设置为电平触发方式
[例题3]通过外部中断控制八盏灯循环点亮。 解:通过P1口扩展八盏灯,在 引脚接一个按钮开关到地,每按一下按钮就申请一次中断,点亮一盏灯,中断服务则是:依次点亮八盏灯中的一盏。采用边沿触发。硬件电路如下图所示。
程序如下: ORG 0000H LJMP MAIN ORG 0013H ; 中断服务程序入口地址 LJMP IN11 MAIN:SETB EA ; 开总中断允许“开关” SETB EX1 ; 开分中断允许“开关” CLR PX1 ; 低 优先级(也可不要此句) SETB IT1 ; 边沿触发 MOV A , #01H ; 给累加器A赋初值 SJMP $ ; 原地等待中断申请 IN11:RL A ; 左环移一次 MOV P1,A ; 输出到P1口 RETI ; 中断返回 END
3.2.4 MCS-51扩展外部中断请求输入口 8051单片机只提供了两个外部中断请求输入端,如果需要使用多于两个的中断源,就必须扩展外部中断请求输入口。 1.定时器/计数器用于扩展外部中断请求输入口 8051单片机有两个定时器/计数器,它们作为计数器使用时,计数输入端T0(或T1)发生负跳变将使计数器加1,利用此特性,适当设置计数初值,就可以把计数输入端T0(或T1)作为外部中断请求输入口。其特点是以占用内部定时中断为代价的。中断服务程序的入口地址仍然为000BH或001BH。
2.查询方式扩展外部中断请求输入口 把多个中断源通过硬件(如与非门)引入外部中断输入端,同时又连到某个I/O口。当有中断源申请中断时,在中断服务程序中通过软件查询可确定哪一个是正在申请的中断源,其查询的次序可由中断优先级决定。其特点是中断响应速度较慢。 适用于外部中断源较多的场合。下页例题中,我们采用74LS21A四输入端双与门实现该任务。 3.使用专用芯片扩展外部中断请求输入口 当外部中断源较多,同时又要求中断响应速度很高时,查询方式扩展外部中断请求输入口的方法很难满足要求。这时可以使用专用接口芯片进行外部中断请求输入口的扩展。下面例题中,我们采用74LS21A四输入端双与门实现该任务。
查询方式扩展外部中断请求输入口的电路实现:查询方式扩展外部中断请求输入口的电路实现: 74ls21的逻辑表是:当输入全高时输出为高,任一输入低则输出就为低。 电路分析:当没有按键按下时,由于上拉电阻的作用,74ls21输出高,使INT0口为高电平,此时中断程序不被触发。如果任何一个按键按下,则74ls21输出低电平,触发中断程序。 中断程序设计为:如果程序设计检测次序是P1.0、P1.1、P1.2、P1.3口,优先级即按顺序排列,如果同时有多个键被按下,可根据实际要求设定为 1、仅仅只响应最优先中断;2、按优先级顺序依次执行各个中断。
设计程序如下: ORG 0000H LJMP MAIN ORG 0003H ; 外部中断0中断服务入口地址 LJMP INT ; 转中断服务 ORG 0100H MAIN: SETB EA ; 开总中断允许 SETB EX0 ; 开INT0中断 SETB IT0 ; 下降沿有效 …… 中断服务程序清单如下: INTI CALL D20 ; 延时去抖动 MOV P1,#0FFH ;P1口送全1值(准双向口原因) MOV A, P1 ; 读P1口各引脚(设另四口未用) CJNE A, #0FFH,CLOSE ; 验证是否确实有键闭合 AJMP INT0 ; 无键按下(按键时间过短)则退 ;出中断
CLOSE: JNB ACC.3, KEY 0 ; 查询0号键 JNB ACC.2, KEY 1 ; 查询1号键 JNB ACC.1, KEY 2 ; 查询2号键 JNB ACC.0,KEY 3 ; 查询3号键 INT0: RETI KEY 0: …… ; 7号键处理程序 KEY 01: MOV A, P1 ; 再读P1口各引脚 JNB ACC.0, FUNC71 ; 确认键是否释放 RETI KEY 1: …… ; 其他键处理程序 …… D20: …… ; 20ms延时子程序 …… END
3.3 MCS-51单片机的定时器/计数器 3.3.1 定时器/计数器 1.基本概念 (1)计数:计数是指对外部事件的个数进行计量。其实质就是对外部输入脉冲的个数进行计量。实现计数功能的器件称为计数器。 (2)定时:8051单片机中的定时器和计数器是一个部件,只不过计数器记录的是外界发生的事件,而定时器则是由单片机内部提供一个非常稳定的计数源进行定时的。这个计数源是由单片机的晶振经过12分频后获得的一个脉冲源。所以定时器计数脉冲的时间间隔与晶振有关。
(3)定时的种类 软件定时:利用执行一个循环程序进行时间延迟。其特点是定时时间精确,不需外加硬件电路,但占用CPU时间。因此软件定时的时间不宜过长。 硬件定时:利用硬件电路实现定时。其特点是不占用CPU时间,通过改变电路元器件参数来调节定时,但使用不够灵活方便。对于时间较长的定时,常用硬件电路来实现。 可编程定时器:通过专用的定时器/计数器芯片实现。其特点是通过对系统时钟脉冲进行计数实现定时,定时时间可通过程序设定的方法改变,使用灵活方便。也可实现对外部脉冲的计数功能。
2.MCS-51内部定时器/计数器 MCS-51单片机内部有两个16位可编程的定时器/计数器,简称为T0和T1,均可作定时器用也可计数器,它们均是二进制加法计数器,当计数器计满回零时能自动产生溢出中断请求,表示定时时间已到或计数已终止。适用于定时控制、延时、外部计数和检测等。 计数器:对引脚T0(P 3.4 )和T1(P3.5.)输入的外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。 定时器:对系统晶振振荡脉冲的12分频输出进行计数。 (1)定时器/计数器的结构 组成:16位加法计数器、工作方式寄存器TMOD和控制寄存器TCON。 T0: TL0(低8位)和TH0(高8位) T1: TL1(低8位)和TH1(高8位)
(2)控制寄存器TCON(88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TF0/TF1:T0/1计数溢出标志位。可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。 =1 :计数溢出; =0 :计数未满。 TR0/TR1:T0/1启停控制位。 =1 :启动计数; =0: 停止计数。 IE0/IE1和IT0/IT1:用于管理外部中断(前面已介绍过)。
GATE C / T M1 M0 GATE C / T M1 M0 (2)工作方式寄存器TMOD T2 T1 M1,M0:工作方式选择位 。 =00:13位定时器/计数器; =01:16位定时器/计数器(常用); =10:可自动重装的8位定时器/计数器(常用); =11:T0 分为2个8位定时器/计数器;仅适用于T0。 C/ :定时方式/计数方式选择位。 = 1:选择计数器工作方式,对T0/T1引脚输入的外部事件的负脉冲计数; = 0 :选择定时器工作方式,对机器周期脉冲计数定时。 如下页图所示。
GATE:门控位,定时器/计数器的启/停可由软件与硬件两者控制GATE:门控位,定时器/计数器的启/停可由软件与硬件两者控制 = 0 :软件控制,只由TCON中的启/停控制位TR0/TR1控制定时器/计数器的启/停。 = 1 :硬件控制,由外部中断请求信号 / 和TCON中的启/停控制位TR0/TR1组合状态控制定时器/计数器的启/停。 其控制逻辑如下图所示。
3.3.2 定时器/计数器的工作方式 8051单片机的定时器/计数器共有四种工作模式,现以T0为例加以介绍,T1与T0的工作原理相同,但方式3下T1停止计数。方式(如F0)和用户定义名称等几种方式。 1.工作方式0( M1M0=00 ,13位定时器/计数器) 由TH0的全部8位和TL0的低5位( TL0的高3位未用)构成13位加1计数器,当TL0低5位计数满时直接向TH0进位,并当全部13位计数满溢出时,溢出标志位TF0置“1”。 2.工作方式1 ( M1M0=01 ,16位定时器/计数器) 由TH0和TL0构成16位加1计数器,其他特性与工作方式0相同。 3.工作方式2 ( M1M0=10 ,自动重装计数初值的8位定时器/计数器) 16位定时器/计数器被拆成两个8位寄存器TH0和TL0,CPU在对它们初始化时必须装入相同的定时器/计数器初值。以TL0作计数器,而TH0作为预置寄存器。当计数满溢出时,TF0置“1”,同时TH0将计数初值以硬件方法自动装入TL0。这种工作方式很适合于那些重复计数的应用场合(如串行数据通信的波特率发生器)。