AT89S51汇编语言程序设计.ppt
《AT89S51汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《AT89S51汇编语言程序设计.ppt(44页珍藏版)》请在三一办公上搜索。
1、第6章 AT89S51单片机定时器/计数器,6.1 定时器/计数器的结构定时器/计数器T0由特殊功能寄存器TH0、TL0构成,定时器/计数器T1由特殊功能寄存器TH1、TL1构成。图6-1 AT89S51单片机的定时器/计数器结构,2种工作模式,4种工作方式(方式0、方式1、方式2和方式3)。属于增计数器。TMOD选择定时器/计数器T0、T1的工作模式和工作方式。TCON控制T0、T1的启动和停止计数,包含了T0、T1的状态。计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数。定时器工作模式是对单片机的时钟振荡器信号经片内12分频后的内部脉冲信号计数。由于时钟频率
2、是定值,所以可根据计数值可计算出定时时间。计数器的起始计数都是从计数器初值开始的。单片机复位时计数器的初值为0,也可用指令给计数器装入一个新的初值。,6.1.1 工作方式控制寄存器TMOD 字节地址89H,不能位寻址。(1)GATE门控位。0:仅由运行控制位TRx(x=0,1)来控制定时器/计数器运行。1:外中断引脚上电平与运行控制位TRx共同来控制定时器/计数器运行。(2)M1、M0工作方式选择位 M1、M0共有4种编码,如表6-1所示。,4,5,(3)C/计数器模式和定时器模式选择位 0:为定时器工作模式,对单片机的晶体振荡器12分频后脉冲进行计数。1:为计数器工作模式,计数器对外部输入引
3、脚T0(P3.4)或T1(P3.5)外部脉冲(负跳变)计数。6.1.2 定时器/计数器控制寄存器TCON 字节地址为88H,可位寻址,位地址为88H8FH。(1)TF1、TF0计数溢出标志位。当计数器计数溢出时,该位置“1”。使用查询方式时,此位作为状态位供CPU查询,查询后应使用软件及时将该位清“0”。使用中断方式时,为中断请求标志位,进入中断服务程序后由硬件自动清“0”。,图6-3 TCON格式,(2)TR1、TR0计数运行控制位。TR1位(或TR0位)=1,启动定时器/计数器工作。TR1位(或TR0位)=0,停止定时器/计数器工作。该位可由软件置“1”或清“0”。6.2 定时器/计数器4
4、种工作方式6.2.1 方式0M1、M0=00时,被设置为工作方式0,等效逻辑结构框图(以定时器/计数器T1为例,TMOD.5、TMOD.4=00)。13位计数器,由TLx(x=0,1)低5位和THx高8位构成。TLx低5位溢出则向THx进位,THx计数溢出则把TCON中溢出标志位TFx置“1”。,图6-4 定时器/计数器方式0逻辑结构框图(1)C/=0,电子开关打在上面位置,T1(或T0)为定时器工作模式,时钟振荡器12分频后脉冲作为计数信号。(2)C/=1,电子开关打在下面位置,T1(或T0)为计数器工作模式,计数脉冲为P3.4(或P3.5)引脚上外部输入脉冲,当引脚上发生负跳变时,计数器加
5、1。,GATE位状态决定定时器/计数器运行控制取决TRx一个条件还是TRx和(x=0,1)引脚状态两个条件。(1)GATE=0,A点电位恒为1,B点电位仅取决于TRx状态。TRx=1,B点为高电平,控制端控制电子开关闭合,允许T1(或T0)对脉冲计数。TRx=0,B点为低电平,电子开关断开,禁止T1(或T0)计数。(2)GATE=1,B点电位由(x=0,1)的输入电平和TRx的状态这两个条件来确定。当TRx=1,且=1时,B点才为1,控制端控制电子开关闭合,允许T1(或T0)计数。,9,6.2.2 方式1当M1、M0=01时,定时器/计数器工作于方式1。方式1和方式0的差别仅仅在于计数器的位数
6、不同,方式1为16位计数器,由THx高8位和TLx低8位构成(x=0,1),方式0则为13位计数器,有关控制状态位含义(GATE、C/、TFx、TRx)与方式0相同。,图6-5 定时器/计数器方式1逻辑结构框图,10,6.2.3 方式2方式0和方式1最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值问题。当M1、M0为10时,定时器/计数器处于工作方式2,这时定时器/计数器的等效逻辑结构如图6-6所示(以定时器T1为例,x=1)。,图6-6 定时器/计数器方式2逻辑结构框图,定时器/计数器方式2为自动恢复初值8位定时器/计数器。TLx(x=0,1)作
7、为常数缓冲器,当TLx计数溢出时,在溢出标志TFx置“1”同时,还自动将THx中的初值送至TLx,使TLx从初值开始重新计数。图6-7 方式2工作过程,11,6.2.4 方式3 为增加一个8位定时器/计数器,使AT89S51单片机具有3个定时器/计数器。方式3只适用于T0,T1不能工作在方式3。T1处于方式3时相当于TR1=0,停止计数(此时T1可用来作为串行口波特率产生器)。1工作方式3下的T0TMOD的低2位为11时,T0工作方式选为方式3,各引脚与T0逻辑关系如图6-8所示。定时器/计数器T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位C/、GATE、TR0、TF0
8、,而TH0被固定为一个8位定时器(不能作为外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF1。,13,2T0工作在方式3时T1的各种工作方式一般当T1用作串行口的波特率发生器时,T0才工作在方式3。T0处于工作方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合。,图6-8 定时器/计数器T0方式3的逻辑结构框图,(1)T1工作在方式0T1控制字中M1、M0=00时,T1工作在方式0。(2)T1工作在方式1当T1的控制字中M1、M0=01时,T1工作在方式1。,图6-9 T0工作在方式3时T1为方式0的工作示
9、意图,图6-10 T0工作在方式3时T1为方式1的工作示意图,(3)T1工作在方式2当T1的控制字中M1、M0=10时,T1的工作方式为方式2。,图6-11 T0工作在方式3时T1为方式2的工作示意图,16,(4)T1设置在方式3当T0设置在方式3,再把T1也设成方式3,此时T1停止计数。6.3 对外部输入的计数信号要求 当定时器/计数器工作在计数器模式时,计数脉冲来自外部输入引脚T0或T1。当输入信号产生负跳变时,计数器的值增1。每个机器周期的S5P2期间,都对外部输入引脚T0或T1进行采样。如在第一个机器周期中采得的值为1,而在下一个机器周期中采得的值为0,则在紧跟着的再下一个机器周期S3
10、P1期间,计数器加1。由于确认一次负跳变要花2个机器周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。,17,例如,选用6MHz频率的晶体,允许输入脉冲频率最高为250kHz。如果选用12MHz频率的晶体,则可输入最高频率为500kHz的外部脉冲。对于外部输入信号的占空比并没有什么限制,但为了确保某一给定电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。故对外部输入信号的要求如图6-12所示,图中,Tcy为机器周期。,图6-12 对外部计数输入信号的要求,6.4 定时器/计数器的编程和应用6.4.1 方式1应用【例6-1】假设系统时钟频率采用6MHz,在P1.0引脚
11、上输出一个周期为2ms的方波,如图6-13所示。基本思想:方波周期T0确定,T0每隔1ms计数溢出1次,即T0每隔1ms产生一次中断,CPU响应中断后,在中断服务子程序中对P1.0取反。,图6-13 P1.0引脚上输出周期为2ms的方波,(1)计算计数初值X机器周期=2s=2106s设需要装入T0的初值为X,则有(216X)2106=1103,216X=500,X=65036。X化为十六进制数,即:65036=FE0CH。T0的初值为TH0=FEH,TL0=0CH。(2)初始化程序设计采用定时器中断方式工作。包括定时器初始化和中断系统初始化,主要是对寄存器IP、IE、TCON、TMOD的相应位
12、进行正确的设置,并将计数初值送入定时器中。(3)程序设计中断服务子程序除了完成所要求的产生方波的工作之外,还要注意将计数初值重新装入定时器,为下一次产生中断做准备。,ORG0000H;程序入口RESET:AJMP MAIN;转主程序 ORG 000BH;T0中断入口 AJMP IT0P;转T0中断处理程序IT0P ORG 0100H;主程序入口MAIN:MOV SP,#60H;设堆栈指针 MOV TMOD,#01H;设置T0为方式1定时 ACALL PT0M0;调用初始化子程序PT0M0HERE:AJMP HERE;原地循环,等待中断PT0M0:MOV TL0,#0CH;T0初始化,装初值的低
13、8位 MOV TH0,#0FEH;装初值的高8位 SETB ET0;允许T0中断 SETB EA;总中断允许 SETB TR0;启动T0 RET,IT0P:MOV TL0,#0CH;中断子程序,T0重装初值 MOV TH0,#0FEH CPL P1.0;P1.0的状态取反 RETI程序说明:当执行完中断返回的指令“RETI”后,又返回断点处继续执行循环指令“AJMP HERE”。在实际程序中,“AJMP HERE”实际上是一段主程序。如CPU不做其他工作,可用查询方式进行控制,程序要简单得多。MOVTMOD,#01H;设置T0为方式1LOOP:MOVTH0,#0FEH;T0置初值 MOVTL0
14、,#0CH SETBTR0;接通T0LOOP1:JNB TF0,LOOP1;查TF0,TF0=0,T0未溢出;TF0=1,T0溢出,CLRTR0;T0溢出,关断T0 CPLP1.0;P1.0的状态求反 SJMPLOOP,【例6-2】系统时钟为6MHz,编写定时器T0产生1s定时的程序。基本思想:采用定时器模式。因定时时间较长,首先确定采用哪一种工作方式。时钟为6MHz的条件下,定时器各种工作方式最长可定时时间:方式0最长可定时16.384ms;方式1最长可定时131.072ms;方式2最长可定时512s。由上可见,可选方式1,每隔100ms中断一次,中断10次为1s。(1)计算计数初值X因为(
15、216X)2106=101,所以X=15536=3CB0H。因此TH0=3CH,TL0=B0H。(2)10次计数的实现对于中断10次的计数,采用B寄存器作为中断次数计数器。,(3)程序设计参考程序如下:ORG0000H;程序运行入口RESET:LJMP MAIN;跳向主程序入口MAIN ORG000BH;T0的中断入口 LJMPIT0P;转T0中断处理子程序IT0P ORG1000H;主程序入口MAIN:MOVSP,#60H;设堆栈指针 MOVB,#0AH;设循环次数10次 MOVTMOD,#01H;设置T0工作在方式1定时 MOV TL0,#0B0H;给T0设初值 MOV TH0,#3CH
16、SETBET0;允许T0中断 SETBEA;总中断允许 SETBTR0;启动T0HERE:SJMPHERE;原地循环,等待中断,IT0P:MOVTL0,#0B0H;T0中断子程序,T0重装初值 MOVTH0,#3CH DJNZB,RTURN;B中断次数计数,减1非0则;中断返回 CLRTR0;1s定时时间到,停止T0工作SETBF0;1s定时时间到标志F0置1RTURN:RETI程序说明:不论1s定时时间是否已到,都返回到“SJMP HERE”指令处。“SJMP HERE”指令实际是一段主程序。在这段主程序中再通过对F0标志的判定,可知1s定时是否到,再进行具体处理。,6.4.2 方式2应用方
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AT89S51 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-5415951.html