单片机-第6章定时器-计数器_第1页
单片机-第6章定时器-计数器_第2页
单片机-第6章定时器-计数器_第3页
单片机-第6章定时器-计数器_第4页
单片机-第6章定时器-计数器_第5页
免费预览已结束,剩余77页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章定时器/计数器第6章定时器/计数器实现定时或计数,通常采用以下三种方法:

1.硬件法硬件定时功能完全由硬件电路完成,不占用CPU时间。但当要求改变定时时间时,只能通过改变电路中的元件参数来实现,很不灵活。

2.软件法软件定时是执行一段循环程序来进行时间延时,优点是无额外的硬件开销,时间比较精确。但牺牲了CPU的时间。

3.可编程定时器/计数器MCS-51系列单片机内部提供2个可编程的定时器/计数器T0和T1,它们可以用于定时或者对外部脉冲计数,还可以作为串行口的波特率发生器。定时器达到预定定时时间或者计数器计满数时,给出溢出标志,还可以发出内部中断。第6章定时器/计数器

T0和T1的电路结构和工作原理基本相同Ti的工作原理简要概括:核心部分是一个由时钟信号触发的按递增规律工作的循环计数器;从预先设定的某一“初始值”开始计起,在累积到超过最大值时产生溢出,并同时会建立一个相应的溢出标志(即中断标志位)TFi。6.1定时器/计数器T0和T1的特性

定时器/计数器的核心:一个加1计数器,其基本功能是加1计数。计数功能:若是对单片机的T0、T1引脚输入信号进行计数,即是计数功能。当外部输入信号由1至0跳变时,计数器加1。定时功能:若是对单片机内部的机器周期进行计数,从而得到定时,这就是定时功能。每个机器周期(等于12个晶体振荡周期)计数器加1。定时功能和计数功能的设定和控制都是通过软件来设定的。6.1定时器/计数器T0和T1的特性

具有以下特性:具有2种功能模式可供选择具有4种工作方式可供选择核心是一个16位宽的循环累加计数寄存器计数寄存器在SFR内统一编址用软件方式可以随时直接读出或改写计数寄存器的内容用软件方式可以随时控制累加计数的开启和停止6.1定时器/计数器T0和T1的特性

具有以下特性:也可以用外接引脚信号控制累加计数过程的开启或停止计数寄存器计满溢出时,产生中断标志位T1可用作异步串行接口UART的波特率发生器通过巧妙编程,还可用来实现输入捕捉、输出比较、脉宽调制等扩展功能。5.1定时器/计数器T0和T1的特性

5.3定时器/计数器电路结构T0、T1的内部结构框图振荡周期:是振荡脉冲的周期,也成为“拍”,用P表示。就是晶体振荡器的周期,或外部振荡脉冲的周期。是MCS-51单片机的最小时序单位。P1P2S1振荡周期时钟周期机器周期机器周期指令周期XTAL2(OSC)S2S3S4S5S6S1S2S4S5S3S6P1P1P1P1P1P1P1P1P1P1P1P2P2P2P2P2P2P2P2P2P2P2时钟周期:是振荡源信号经二分频后形成的时钟脉冲信号,用S表示。每个时钟周期分成P1、P2两个节拍,又被称为一个状态。是MCS-51单片机的最基本的时序单位。机器周期:通常将完成一个基本操作所需的时间称为机器周期,由6个状态(12拍)组成,所以一个机器周期可以依次表示为S1P1、S2P2……S6P1、S6P2。通常算术逻辑操作发生在节拍P1期间,而内部寄存器到寄存器的传送发生在节拍P2期间。指令周期:是指CPU执行一条指令所需要的时间。是MCS-51单片机的最大的时序单位,由若干个振荡周期组成。一个指令周期通常含有1~4个机器周期,MCS-51典型的指令周期为一个机器周期。

振荡周期、时钟周期、机器周期和指令周期定时器的结构及工作原理在每个机器周期的S5P2期间采样检测引脚输入电平。若前一个机器周期采样值为“1”,后一个机器周期采样值为“0”,则计数器加1。新的计数值在检测到输入引脚电平发生“1”到“0”的负跳变(下降沿)后,于下一个机器周期的S3P1期间装入计数器中。由于CPU需要两个机器周期来识别一个“1”到“0”的跳变信号,所以最高的计数频率为振荡周期的1/24。P1P2S1振荡周期状态周期机器周期机器周期指令周期XTAL2(OSC)S2S3S4S5S6S1S2S4S5S3S6P1P1P1P1P1P1P1P1P1P1P1P2P2P2P2P2P2P2P2P2P2P25.1定时器的结构及工作原理定时/计数器对输入信号的要求外部计数脉冲的最高频率为系统振荡器频率的1/24,例如选用12MHz频率的晶体,则可输入500KHz的外部脉冲。输入信号的高、低电平至少要分别保持一个机器周期。 如图所示,图中Tcy为机器周期。可编程定时器的工作方式、启动、停止、溢出标志、计数器等都是可编程的——通过设置寄存器TMOD,TCON,TH0,TL0,TH1和TL1实现。当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定好的工作方式独立工作,不再占用CPU,只有在计数器计满溢出时才向CPU申请中断,占用CPU。由此可见,定时器是单片机中工作效率高且应用灵活的部件。5.1定时器的结构及工作原理与T0和T1模块有关的SFR共有8个定时器控制寄存器TCON定时器方式寄存器TMOD中断允许寄存器IE中断优先权管理寄存器IP累加计数器存器TH0+TL0、TH1+TL15.2T0和T1相关的寄存器

方式寄存器TMOD

GATE=1,T0、T1的启动由INTi引脚和TRi位共同控制。只有INTi为高电平时,TRi置“1”才能启动定时器/计数器。GATE=0,T0、T1由软件设置TRi来控制启动。TRi=1,启动;TRi=0,停止。定时器/计数器的工作方式

TMOD用于控制T0和T1工作方式,低4位用于控制T0,高4位用于控制T1。M1M0:工作方式控制位,对应4种工作方式。C/T:定时器/计数器功能方式选择位。控制寄存器TCON

控制寄存器TCON

TCON用于控制定时器/计数器的启、停、溢出标志和外部中断信号触发方式。TFi:T0、T1溢出位。当计数溢出时,由硬件自动使TFi置1,并向CPU申请中断。进入中断服务程序后,TFi又被硬件自动清0。TFi也可作为程序查询的标志位,在查询方式下由软件清0。TRi:T0、T1运行控制位。TRi=1启动计数,TRi=0,停止工作。5.4定时器/计数器的工作方式及应用每一种工作方式对应最大计数值:

方式0 13位计数器213=8192

方式1 16位计数器 216=65536

方式2 8位计数器 28=256

方式3 8位计数器 28=256T0优于T1的方面:多一种工作方式T1优于T0的方面:可以作为串口的波特率发生器MCS-51的定时器T0有4种工作方式: 即:方式0,方式1,方式2,方式3。MCS-51的定时器T1有3种工作方式: 即:方式0,方式1,方式2。5.3定时器的工作方式5.2.1方式0

M1、M0设置为00,为13位计数器,以T1为例,其框图如下:5.3定时器的工作方式——方式0计数脉冲输入加1计数器5.3定时器的工作方式——方式0TH1D12D11D10D9D8D7D6D5TL1×

×

×

D4D3D2D1D0在这种方式下,16位寄存器TH1和TL1只用13位,由TH1的8位和TL1的低5位组成。TL1的高3位不定。当TL1的低5位计数溢出时,向TH1进位。而TH1计数溢出时,则向中断标志位TF1进位(即硬件将TF1置1),并请求中断。可通过查询TF1是否置“1”或考察中断是否发生来判定定时器T1的操作完成与否。5.3定时器的工作方式——方式0当C/T=0时,为定时工作模式,开关接到振荡器的12分频器输出上,计数器对机器周期脉冲计数。其定时时间为:

(213-初值)×振荡周期×12

例如:若晶振频率为12MHz,则最长的定时时间为(213-0)×(1/12)×12us=8.191ms当C/T=1时,为计数工作模式,开关与外部引脚T1(P3.5)接通,计数器对来自外部引脚的输入脉冲计数。当外部信号发生负跳变时计数器加1。

5.3定时器的工作方式——方式0GATE控制定时器Tx(T1或T0)的条件:(1)当GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。

TRx=1;计数启动;

TRx=0;计数停止;(2)当GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRx·INTx), 当且仅当TRx=1且INTx=1(高电平)时,计数启动;

否则,计数停止。

返回T0、T1的内部结构框图5.3.2方式1

M1、M0=01,为16位的计数器,除位数外,其他与方式0相同。其定时时间为:

(216-初值)×振荡周期×12

例如:若晶振频率为12MHz,则最长的定时时间为

(216-0)×(1/12)×12us=65.536ms5.3定时器的工作方式——方式15.3.3方式2

M1、M0=10,为自动恢复初值的8位计数器,等效框图如下:TLx作为8位计数器,THx作为重置初值的缓冲器。5.3定时器的工作方式——方式2

THx作为常数缓冲器,当TLx计数溢出时,在置“1”溢出标志TFx的同时,还自动的将THx中的初值送至TLx,使TLx从初值开始重新计数。定时器/计数器的方式2工作过程如图(x=0,1)。优点:

方式0和方式1用于循环重复定时或计数时,在每次计数器挤满溢出后,计数器复0。若要进行新一轮的计数,就得重新装入计数初值。这样一来不仅造成编程麻烦,而且影响定时精度。而方式2具有初值自动装入的功能,避免了这个缺点,可实现精确的定时。缺点: 只有8位计数器,定时时间短、计数范围小。其定时时间为:

(28-初值)×振荡周期×12若晶振频率为12MHz,则最长的定时时间为(28-0)×(1/12)×12us=0.256ms5.3定时器的工作方式——方式2方式2工作过程图

(x=0,1)。5.3.4方式3

只适用于定时器/计数器T0。T1不能工作在方式3。 如果将T1置为方式3,则相当于TR1=0,停止计数(此时T1可用来作串行口波特率产生器)。1.工作方式3下的T0

T0在方式3时被拆成两个独立的8位计数器:TH0和TL0。

8位计数器TL0使用T0的状态控制位C/T*、GATE、TR0、INT0,它既可以工作在定时方式,也可以工作在计数方式。8位定时器TH0被固定为一个8位定时器(不能作外部计数模式),并使用定时器T1的状态控制位TR1,同时占用定时器T1的中断请求源TF1。此时,定时器TH0的启动或停止只受TR1控制。

TR1=1时,启动TH0的计数;TR1=0时,停止TH0的计数5.3定时器的工作方式——方式35.3定时器的工作方式各引脚与T0的逻辑关系如图所示:2.T0工作在方式3下T1的各种工作方式注意:当T0处于方式3时,T1仍可设置为方式0、方式1和方式2。当时由于TR1、TF1和T1的中断源都已被定时器T0(中的TH0)占用,所以定时器T1仅有控制位C/T来决定其工作在定时方式或计数方式。当计数器计满溢出时,不能置位“TF1”,而只能将输出送往串口。所以,此时定时器T1一般用作串口的波特率发生器,或不需要中断的场合。

(1)T1工作在方式05.3定时器的工作方式(2)T1工作在方式1(3)T1工作在方式25.3定时器的工作方式第5章定时器/计数器及其应用5.4定时器的编程和应用5.4定时器的编程和应用编程说明MCS-51单片机的定时器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:(1)确定工作方式字:对TMOD寄存器正确赋值;(2)确定定时初值:计算初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1; 初值计算:设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。 (模式0M为213,模式1M为216,模式2和3M为28)(3)根据需要,对IE置初值,开放定时器中断;(4)启动定时/计数器,对TCON寄存器中的TR0或TR1置位,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。定时初值:

对机器周期进行计数。T:定时时间,X:初值,N:计数器位数,fosc:系统时钟频率,则:(2N-X)×12/fosc=TX=2N-fosc/12×T计数初值:

对外部脉冲进行计数,计数值根据要求确定。N:计数器位数,X:初值,则:

X=2N-计数值5.4定时器的编程和应用

例5-1

要在P1.0上输出一个周期为2ms的方波,假设系统振荡频率采用12MHz。

利用T0方式0产生1ms的定时

方波的周期用T0来确定,让T0每隔1ms计数溢出1次,即TF0=1;查询到TF0=1则CPU对P1.0取反。即要使P1.0每隔1ms取反一次。5.4定时器/计数器的工作方式及应用每一种工作方式对应最大计数值:

方式0 13位计数器213=8192

方式1 16位计数器 216=65536

方式2 8位计数器 28=256

方式3 8位计数器 28=256T0优于T1的方面:多一种工作方式T1优于T0的方面:可以作为串口的波特率发生器5.4定时器的编程和应用第一步:确定工作方式字 方式0(13位)最长可定时8.192ms;

方式1(16位)最长可定时65.536ms;

方式2(8位)最长可定时256s。T0为方式0,M1M0=00定时工作状态,C/T=0GATE=0,不受INT0控制,T1不用全部取“0”值。故TMOD=00H5.4定时器的编程和应用第二步:计算1ms定时的初值X

设初值为X,则有: (213-X)×12×10-6×1/12=1×10-3

可求得:X=8192-1000=7192 X化为16进制,即X=1C18H=1,1100,000

1,1000B。 所以,T0的初值为:

TH0=E0HTL0=18HTH011100000TL0×

×

×

11000第三步:程序设计

采用查询TF0的状态来控制P1.0的输出,同时要重新装入初值。5.4定时器的编程和应用

参考程序:

ORG 0100HMAIN: MOV TMOD,#00H ;设置T0为方式0 MOV TL0, #18H ;送计数初值

MOV TH0, #0E0H ;送计数初值

SETB TR0 ;启动T0LOOP: JBC TF0, NEXT;查询定时时间到,转NEXT,同时清TF0

SJMP LOOP ;重复循环NEXT:

MOV TL0,#18H

;T0重置初值

MOV TH0,#0E0H;T0重置初值

CPL P1.0

;P1.0的状态取反

SJMP LOOP ;重复循环

END例5-2

将[例5-1]中的输出方波周期改为1秒。

分析:周期为1s的方波要求500ms的定时。

(1)T0工作方式的确定

因定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出:

方式0(13位)最长可定时8.192ms;

方式1(16位)最长可定时65.536ms;

方式2(8位)最长可定时256s。

所以采用定时器定时加软件计数的方法来实现延长定时。 选方式1,定时50ms,软件计数10次。

50ms×10=500ms。

所以,TMOD=01H5.4定时器的编程和应用以上各方式都不满足要求

(2)计算计数初值 因为:(216-X)×12×10-6×1/12=50×10-3

所以:X=15536=3CB0H

因此:TH0=3CH,TL0=B0H

(3)10次计数的实现 设计一个软件计数器,初始值设为10。每隔50ms定时时间到,产生溢出标志TF0,程序查询到TF0=1,则软件计数器减1。这样减到0时就获得了500ms的定时。5.4定时器的编程和应用(4)程序设计(参考程序)

MAIN: MOVTMOD, #01H ;设T0工作在方式1 MOVTL0, #0B0H;给T0设初值

MOVTH0, #3CH MOV R7, #10 ;软件计数器初值

SETBTR0 ;启动T0LOOP: JBC TF0,NEXT

;查询定时时间到,转NEXT,同时清TF0 SJMPLOOPNEXT: DJNZR7,EXIT ;R7不等于0,则不对P1.0取反

CPL P1.0 MOV R7,#10 ;重置软件计数器初值EXIT:

MOVTL0,#0B0H ;T0中断子程序,重装初值

MOVTH0,#3CH SJMP LOOP END以上的定时程序中,程序都要重置计时器初值,这样从定时器溢出发出溢出标志,到重装完定时器初值,在开始计数,之间总会有一段时间间隔,使定时时间增加了若干微秒,造成定时不够精确。 为了减小这种定时误差,单片机中设置了工作方式2(自动重装初值),则可避免上述因素,省去程序中重装初值的指令,实现精确定时。但是工作方式2的缺点是只有8位计数器,定时时间受到很大限制。5.4定时器的编程和应用定时器/计数器工作方式2方式2是能自动重装计数初值的8位计数器。低8位作计数器用,高8位保存计数初值。定时方式计数初值:X=28-T×fosc/12。计数方式计数初值:

X=28-计数值。例5-3

利用T0方式2产生250us的定时,在P1.0引脚上输出周期为500us的方波(要求精确定时)。(设系统振荡为12MHz)(1)工作方式选择

实现精确定时,采用方式2。 对于12MHz晶振,方式2的最大计数时间为28=256us,所以可实现250us的精确定时。 故,设置TMOD=02H。(2)计算初值

设初值为X:则(28-X)×12×10-6×1/12=250×10-6

X=28-250=6=06H(3)程序设计

采用查询TF0的状态来控制P1.0的输出。5.4定时器的编程和应用(4)参考程序MAIN: MOV TMOD,#02H ;置T0方式2 MOV TH0, #06H ;送计数初值

MOV TL0, #06H SETBTR0 ;启动T0LOOP:JBC TF0, NEXT ;查询定时时间到,转NEXT,同时清TF0

SJMPLOOPNEXT: CPL P1.0

;输出取反

SJMP LOOP

;重复循环

END5.4定时器的编程和应用工作方式2举例(1)例5-3:用定时器T1,采用工作方式2,计数方式,要求每计满156次,将P1.7取反。思路:

T1工作于计数方式,外部计数脉冲由T1(P3.5)引脚引入,每来一个由1至0的跳变计数器加1,由程序查询TF1的状态。计数初值:X=28-156=100=64HTH1=TL1=64H,TMOD=60H(计数方式,方式2)程序设计:

ORG2000H MOVTMOD,#60H ;T1方式2,计数方式

MOVTH1,#64H;T1计数初值

MOVTL1,#64H SETBTR1 ;启动T1LOOP:JBCTF1,REP;TF1=1转移

SJMPLOOP ;等待REP:CPLP1.7 ;取反输出

SJMPLOOP工作方式2举例(2)例5-4:由P3.4引脚(T0)输入一低频脉冲信号(其频率<0.5kHz),要求P3.4每发生一次负跳变时,P1.0输出一个200μs的同步负脉冲,同时P1.1输出一个400μs的同步正脉冲。已知fosc=6MHz。初态P1.0为高,P1.1为低。思路:T0工作于方式2,初值为FFH(一次计数就产生中断),查询TF0,为1后改为200μs定时计数,设置P1.0和P1.1状态。第一次200μs定时完成,设置P1.0和P1.1状态,继续第二次200μs定时。第二次200μs定时完成,设置P1.0和P1.1状态,恢复初值FFH,循环。即:反复改变计数初值。工作方式2举例(3)例5-4程序:START:MOVTMOD,#06H;T0方式2,计数方式

MOVTH0,#0FFH;计数初值

MOVTL0,#0FFH CLRP1.1;P1.1初态为0 SETBTR0;启动T0LOOP:JBCTF0,LP1;检测外部信号负跳变

SJMPLOOP ;等待LP1:CLRTR0 ;关定时器

MOVTMOD,#02H;T0改变为;定时200μs方式2 MOVTH0,#156 ;定时的计数初值

MOVTL0,#156工作方式2举例(4) SETBP1.1 ;P1.1输出为1 CLRP1.0 ;P1.0输出0 SETBTR0 ;启动T0定时LOOP1: JBCTF0,LP2;第一个200μs到否?

SJMPLOOP1;未到等待LP2: SETBP1.0 ;到了P1.0恢复LOOP2: JBCTF0,LP3;第二个200μs到否?

SJMPLOOP2LP3: CLRP1.1 ;P1.0恢复0 CLRTR0 ;关定时器

AJMPSTARTGATE门可使定时器Tx(T0或T1)的启动计数受INTx*的控制,可测量引脚INTx*(P3.2或P3.3)上正脉冲的宽度(机器周期数)。以T1为例:门控制位GATE的应用—测量脉冲宽度回顾当GATE=1时,K=TRx·INTxK利用GATE测试外部输入脉冲宽度

GATE=0时,定时器的启动只受TRi位控制。GATE=1时,定时器的启动将受TRi位和外部中断信号INTi的共同控制。只有当INTi=1,同时TRi=1时才能启动计数;INTi=0时停止计数。换一个角度看,当GATE=1时,定时器实际记录的时间就是相应INTi引脚上高电平的持续时间。通过反相器,则可测得相应INTi引脚上低电平的持续时间。二个时间的和即为INTi引脚上输入波形的周期,其倒数即为INTi引脚上输入波形的频率。还可算出占空比等参数。测试原理:以T0为例

GATE=1TR0=1例5-4利用T1门控位GATE测试INT1*(P3.3)引脚上出现的正脉冲的宽度。分析:根据设计要求,将T1设定为定时工作模式、方式1、GATE=1;当TR1=1时,一旦INT1*(P3.3)引脚上出现高电平就开始计数,直到出现低电平为止。然后读取TH1、TL1中的计数值,分别送到寄存器A和B中。由于T1工作在定时方式,计数器计数的是机器周期的脉冲数;将脉冲数转化成时间,就可得到正脉冲的宽度。门控制位GATE的应用—测量脉冲宽度 ORG0100HMAIN: MOVTMOD,#90H ;T1为方式1定时控制字

MOVTL1,#00H ;计数器初值为0 MOVTH1,#00HLOOP: JBP3.3,LOOP ;等待INT1*低

SETBTR1 ;如INT1*为低,启动T1LOOP1:JNBP3.3,LOOP1 ;等待INT1*升高,开始计数LOOP2:JBP3.3,LOOP2 ;等待INT1*降低,停止计数

CLRTR1 ;停止T1计数

MOVA,TL1 ;T1计数值的低8位送A MOVB,TH1 ;T1计数值的高8位送B

……

由于定时器最长为16位计数器,因此被测脉冲高电平的宽度不能超过65536个机器周期。参考程序:例5-5

当T0(P3.4)引脚上发生负跳变时,从P1.0引脚上输出一个周期为1ms的方波,如图所示。(系统振荡为6MHz)

两个计数器同时使用5.4定时器的编程和应用(1)工作方式选择T0为方式1计数,初值0FFFFH,即外部计数输入端T0(P3.4)发生一次负跳变时,T0加1且溢出,溢出标志TF0置“1”,发中断请求。在进入T0中断程序后,把F0标志置“1”,说明T0引脚上已接收了负跳变信号。T1定义为方式2定时。在T0引脚产生一次负跳变后,启动T1每500s产生一次中断,在中断服务程序中对P1.0求反,使P1.0产生周期1ms的方波。TMOD=0010,0101=25H(2)计算T1初值

设T1的初值为X:

则(28-X)×2×10-6=5×10-4

X=28-250=6=06H5.4定时器的编程和应用MAIN: MOVTMOD,#25H

;初始化,T1为方式2定时,T0为方 式1计数

MOVTL0,#0FFH ;T0置初值

MOVTH0,#0FFH SETBTR0 ;启动T0 MOVTL1,#06H ;T1置初值

MOVTH1,#06HLOOP0:

JBC TF0, NEXT0

;查询T0有无负跳变,有则转到NEXT0 SJMP LOOP0NETX0:

CPL P1.0 ;P1.0取反

SETB TR1 ;启动T1LOOP1:

JBC TF1, NEXT1;查询T1定时时间到否,到则转到NEXT1 SJMP LOOP1NEXT1:

CPL P1.0 ;P1.0取反

SJMP LOOP1 END(3)程序设计定时器/计数器工作方式3方式3下,T0和T1的结构、功能不同。T0方式3:

TL0和TH0分成两个互相独立的8位计数器。其中TL0用原T0的各控制位、引脚和中断源,即GATE0、TR0、TF0和T0引脚、INT0引脚。

TH0只有内部定时,占用定时器T1的TR1和TF1。T1无方式3:将T1设置为方式3,会使T1立即停止计数。在T0方式3时,T1仍可设置为方式0~2。由于TR1和TF1被T0的TH0占用,计数器开关K已被接通,此时仅用T1的C/T控制T1运行。计数器溢出时,只能将输出送入串行口或用于不需要中断的场合。在一般情况下,当T1用作串行口波特率发生器时,T0才设置为工作方式3。此时,常把定时器T1设置为方式2,用作波特率发生器T0方式3

运行中读定时器/计数器单片机可以随时读写TLi和THi,比如用于实时显示计数值等。但在读取时应注意由于分时读取TLi和THi而带来的特殊性。假如先读TLi,再取读THi,由于这时定时器/计数器还在运行,如果在读THi之前刚好发生TLi溢出向THi进位,这样读得的TLi值就不正确,同样,先读THi后读TLi时也可能产生这种错误。解决办法:先读THi,后读TLi,再重读THi,若二次读取THi值一样,则读入的数据是正确的;若二次读取THi值不一致,则必须重读。“飞读”程序RDTIME: MOV A,TH0 ;读TH0 MOV R0,TL0 ;读TL0并存入R0 CJNE A,TH0,RDTIME

;再读TH0,与上;次读入的TH0比较,;若不等,重读

MOV R1,A;存TH0在R1中

RET作业4,15任务导入交通信号灯的各种指示模式就是用红、绿、黄3中颜色按照特定的时间和规律进行显示,在紧急情况下还能进行应急处理,禁止所有方向的车辆通行,四个路口的信号灯状态都变成黄灯并闪烁,延时后全部变为红灯,从而保证紧急车辆的及时通过。任务二

十字路口交通信号灯设计表3-5交通信号灯显示时间表

东西方向信号绿灯亮绿灯闪亮黄灯亮红灯亮时间

55S

3次共3S

2S

30S南北方向信号红灯亮绿灯亮绿灯闪亮黄灯亮时间

60S

25S

3次共3S

2S多少路、时序任务分析系统控制要求如下:(1)正常情况下,首先东西方向绿灯亮,南北方向红灯亮60s;经过后南北方向绿灯亮,东西方向红灯亮30s,根据图3-15时序图,东西方向和南北方向轮流放行。(2)有紧急情况时(用按键开关S0模拟),四个路口的信号灯都变成黄灯并闪烁5s,之后全部变为红灯。任务二

十字路口交通信号灯设计图3-15交通信号灯控制时序图相关知识:利用定时器实现延时

8051单片机内部有两个16位的可编程定时器/计数器,称为定时器0(T0)和定时器1(T1),可编程选择其作为定时器用或作为计数器用。8051定时器/计数器由定时器T0、定时器T1、定时器方式寄存器TMOD和定时器控制寄存器TCON组成。TMOD、TCON与T0、T1间通过内部总线及逻辑电路连接,TMOD用于设置定时器的工作方式,TCON用于控制定时器的启动与停止。本任务采用晶振频率为12MHz,用单片机内部的定时器T1实现延时0.5s,(为什么)实施的具体步骤如下:任务二

十字路口交通信号灯设计1)对TMOD赋值,确定工作方式。

TMOD为T1、T2的工作方式寄存器

任务二

十字路口交通信号灯设计T1控制T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7TMOD(89H)

TMOD=0

0

01

0000

软件启动定时方式1T0未使用∴TMOD赋值为10H2)预置定时器初值X,将初值写入TH1、TL1中。初值X=最大计数值-计数次数在方式1中,定时器T1的最大计数值为65536,而定时50ms需要完成50000次计数。由此可计算出计数器的初始值。初值X=65536-50000=15536D=3CB0H

∴在子程序DELAY中确定计数器初值的指令位:

MOVTH1,#3CHMOVTL1,#0B0H任务二

十字路口交通信号灯设计3)启动定时/计数器工作,当GATE=0时,只要用“SETBbit”指令将TCON寄存器中的启动位TR0或TR1置“1”即可,使用“CLRbit”指令可停止定时器工作。

任务二

十字路口交通信号灯设计0.5s延时子程序如下:DELAY:MOVR3,#0AH;循环次数MOVTMOD,#10H;定时器T1,方式1MOVTH1,#3CH;定时50ms的初值MOVTL1,#0B0HSETBTR1;启动定时器LP1:JBCTF1,LP2SJMPLP1LP2:MOVTH1,#3CH;重装初值MOVTL1,#0B0HDJNZR3,LP1RET1、确定设计方案

选用AT89C51单片机芯片、时钟电路、复位电路、电源、12个发光二极管和一个按键构成最小系统,完成对交通信号灯的控制。任务实施图3-17交通信号灯模拟控制系统设计框图任务二

十字路口交通信号灯设计并行接口AT89C51单片机电源时钟电路复位电路红黄绿灯发光二极管按键表3-6交通灯控制口线分配及控制状态表任务二

十字路口交通信号灯设计P1.5P1.4P1.3P1.2P1.1P1.0P1端口数据状态说明东西方向南北方向红灯黄灯绿灯红灯黄灯绿灯11100011011100,1交替111100011111111011100,1交替1F3HP1.3交替EBHDEHP1.0交替DDH东西向通行,南北向禁行东西向警告,南北向禁行东西向警告,南北向禁行南北向通行,东西向禁行南北向警告,东西向禁行南北向警告,东西向禁行100111100111EDHDBH紧急情况2、硬件电路设计

任务实施图2-24模拟汽车转向灯电路原理图

电路所用仿真元器件:AT89C51:单片机RES:电阻CRYSTAL:晶振CAP:电容CAP-ELEC:电解电容BUTTON:按钮LED-GREEN:绿色发光二极管LED-YELLOW:黄色发光二极管LED-RED:红色发光二极管任务二

十字路口交通信号灯设计任务实施图3-19交通信号灯模拟控制主程序流程图

任务二

十字路口交通信号灯设计3、源程序设计根据任务要求,程序设计思路:(1)正常情况下运行主程序,采用0.5秒延时子程序的反复调用来实现各种定时时间;(2)有紧急车辆通过时,采用外部中断0方式进入与其相应的中断服务程序。

步骤1:流程图设计任务实施图3-20延时子程序流程图图3-21中断服务程序流程图

任务二

十字路口交通信号灯设计3、源程序设计3、源程序设计;***************交通灯信号灯模拟控制程序*******;程序名:交通信号灯模拟控制程序xm3_3.asm;程序功能:简易交通灯信号灯模拟显示(含紧急情况处理)ORG0000HAJMPMAINORG0003H;外部中断0入口地址AJMPEMER;指向中断子程序ORG0100HMAIN:MOVTCON,#00H;设置外部中断0为电平触发MOVIE,#81H;CPU开中断,外部中断0开中断MOVP1,#0F3H;东西向绿灯放行,南北向红灯禁止MOVR2,#6EH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论