微机原理及应用第6章MCS51单片机的定时计数器_第1页
微机原理及应用第6章MCS51单片机的定时计数器_第2页
微机原理及应用第6章MCS51单片机的定时计数器_第3页
微机原理及应用第6章MCS51单片机的定时计数器_第4页
微机原理及应用第6章MCS51单片机的定时计数器_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6章章 mcs-51单片机的单片机的定时定时/计数器计数器复复 习习 1、sfr使用使用的注意事项?的注意事项? 字节地址、位地址;字节地址、位地址;位定义;位定义;区分控制位和标志区分控制位和标志位;位;标志位的清除。标志位的清除。 2、中断的处理过程?、中断的处理过程? 采样;采样;查询;查询;响应;响应;处理;处理;返回。返回。 3、主程序设计主程序设计及结构框架?及结构框架? 中断子程序设计中断子程序设计及结构框架?及结构框架? 4、mcs-51中断源有哪些?中断源有哪些?第第6章章 mcs-51单片机的单片机的定时定时/计数器计数器 6.1 定时器的定时与计数功能定时器的定时与计

2、数功能 6.2 定时器的有关特殊功能寄存器定时器的有关特殊功能寄存器 6.3 定时器的四种工作方式定时器的四种工作方式 6.4 定时器的应用定时器的应用6.1 定时器的定时与计数功能定时器的定时与计数功能 1 定时器的结构定时器的结构 2 定时器的计数功能定时器的计数功能 3 定时器的定时功能定时器的定时功能1 定时器的结构定时器的结构 定时器的实质是定时器的实质是16位位加加1计数器计数器1 定时器的结构定时器的结构加加1计数器计数器输入的计数脉冲有两个来源输入的计数脉冲有两个来源,一个是由一个是由系统的时钟振荡器输出脉冲经系统的时钟振荡器输出脉冲经12分频后送来;一个分频后送来;一个是是t

3、0或或t1引脚输入的外部脉冲源。引脚输入的外部脉冲源。每来一个脉冲计数器加每来一个脉冲计数器加1,当加到计数器为全,当加到计数器为全1时,时,再输入一个脉冲就使计数器回零,且计数器的溢出再输入一个脉冲就使计数器回零,且计数器的溢出使使tcon中中tf0或或tf1置置1,向,向cpu发出中断请求发出中断请求(定时(定时/计数器中断允许时)。计数器中断允许时)。如果定时如果定时/计数器工作于定时模式,则表示定时计数器工作于定时模式,则表示定时时时间已到间已到;如果工作于计数模式,则表示;如果工作于计数模式,则表示计数值已满计数值已满。 可见,由溢出时计数器的值减去计数初值才是加可见,由溢出时计数器

4、的值减去计数初值才是加1计数器的计数值。计数器的计数值。2 定时器的定时器的计数计数功能功能设置为设置为计数器模式时计数器模式时。在每个机器周期的。在每个机器周期的s5p2期间期间采样采样t0、t1引脚电平。引脚电平。当晶振频率为当晶振频率为12mhz时时,最高计数频率不超过,最高计数频率不超过1/2mhz,即计数脉冲的周期要大于,即计数脉冲的周期要大于2 s。 3 定时器的定时功能定时器的定时功能设置为定时器模式时:设置为定时器模式时:加加1计数器是对内部机器周期计数器是对内部机器周期计数(计数(1个机器周期等于个机器周期等于12个振荡周期,即计数频率个振荡周期,即计数频率为晶振频率的为晶振

5、频率的1/12)。)。计数值计数值n乘以机器周期乘以机器周期tcy就是定时时间就是定时时间t 。6.2 定时器的有关寄存器定时器的有关寄存器6.2.1 tctcon n定时器控制定时器控制/ /状态寄存器状态寄存器1 1)启动控制位)启动控制位tr0tr0、tr1tr1=0=0,停止定时器工作,停止定时器工作;=1;=1,启动定时器工作,启动定时器工作例:例:启动启动t0t0:setbsetbtr0 tr0 停止停止t0t0:clrclrtr0tr02 2)标志位标志位tf0tf0、tf1tf1定时器溢出时定时器溢出时, ,由硬件置位由硬件置位tfxtfx=1=1;若若,向,向cpucpu请求

6、请求中断,中断,cpucpu响应响应txtx中断后,自动清中断后,自动清0 tfx0 tfx。若若,可用软件检测,可用软件检测tfxtfx(判跳),必须软件清(判跳),必须软件清0 0。waitwait:jbc tf0jbc tf0,nextnext;检测;检测t0t0是否溢出,溢出,是否溢出,溢出,tf0tf0清清0 0。sjmpsjmpwaitwait ;未溢出,继续检测;未溢出,继续检测nextnext: ;处理溢出;处理溢出d0d1d2d3d4d5d6d7it0ie0it1ie1tr0tf0tr1tf188898a8b8c8d8e8f位地址位地址位定义位定义6.2.2 tmtmod d

7、定时器方式寄存器(定时器方式寄存器(89h89h)2 2)功能选择位)功能选择位c/tc/t: =0=0,定时功能,计数内部机器周期脉冲;,定时功能,计数内部机器周期脉冲; =1=1,计数功能,计数引脚,计数功能,计数引脚t0(t1)t0(t1)输入的负脉冲。输入的负脉冲。3 3)方式选择位)方式选择位m1m1、m0m0:4 4种工作方式:种工作方式:13/16/813/16/8位位1 1)门控方式选择位)门控方式选择位gategate : =0=0,非门控方式,非门控方式( (内部启动内部启动) ):只要只要trxtrx=1=1,就,就启动启动定时器工作定时器工作;只要只要trxtrx=0=

8、0,就就停止定时器工作。停止定时器工作。 =1=1,门控方式,门控方式( (外启动外启动) ):只有当只有当trxtrx=1=1且且引脚引脚intx=1intx=1才启动才启动定时器定时器。确定定时器工作方式指令:确定定时器工作方式指令:m mov tmv tmod d,# #方式字;方式字;例例:设:设t0t0用方式用方式2 2非门控定时,非门控定时,t1t1用方式用方式1 1门控计数。门控计数。m mov vtmtmod d,# #gatec/tm1m0gatec/tm1m0t1t0m1 m0方方式式功功能能描描述述0 0013 位位0 1116 位位1 028 位位自自动动重重装装1 1

9、3t0 为为两两个个 8 位位11010010b6.2.3 定时器定时器的的数据数据寄存器寄存器 th1 tl1、th0 tl08dh 8ch、8bh 8ah可预置初值的可预置初值的计数器计数器 th0th0、tl0tl0、 th1th1、tl1tl1预置预置t0t0初值指令:初值指令:m mov v th0th0,#x#xh hm mov v tl0tl0,#x#xl l任何时候都可对它的当前值进行读任何时候都可对它的当前值进行读/写操作,写操作,它们都只能它们都只能字节字节寻址。寻址。6.3 定时器的四种工作方式定时器的四种工作方式 6.3.1 定时定时/计数器的工作方式计数器的工作方式0

10、 方式方式0为为13位计数位计数,由,由tl0的低的低5位(高位(高3位未用)位未用)和和th0的的8位组成加位组成加1计数器。计数器。tl0的低的低5位溢出时向位溢出时向th0进位,进位,th0溢出时,置位溢出时,置位tcon中的中的tf0标志,标志,向向cpu发出中断请求。发出中断请求。定时器模式时定时器模式时有有:nt/tcy 计数初值计算的公式为:计数初值计算的公式为:定时器的初值还可以采用计数个数直接定时器的初值还可以采用计数个数直接取补法取补法获得。获得。计数模式时,计数脉冲是计数模式时,计数脉冲是t0引脚上的外部脉冲。引脚上的外部脉冲。13x=2 -n门控位门控位gate具有特殊

11、的作用。当具有特殊的作用。当gate=0时,经反相后使时,经反相后使或门输出为或门输出为1,此时仅由,此时仅由tr0控制与门的开启,与门输出控制与门的开启,与门输出1时,控制开关接通,计数开始;时,控制开关接通,计数开始;当当gate=1时时,由外中断引,由外中断引脚信号控制或门的输出,此时控制脚信号控制或门的输出,此时控制与门的开启由外中断引与门的开启由外中断引脚信号和脚信号和tr0共同控制共同控制。当。当tr0=1时,外中断引脚信号引脚时,外中断引脚信号引脚的的高电平启动计数高电平启动计数,外中断引脚信号引脚的,外中断引脚信号引脚的低电平停止计低电平停止计数数。这种方式常用来测量外中断引脚

12、上正脉冲的宽度。这种方式常用来测量外中断引脚上正脉冲的宽度。 16x=2 -n6.3.2 定时定时/计数器的工作方式计数器的工作方式1方式方式1的计数位数是的计数位数是16位,由位,由tl0作为低作为低8位、位、th0作为高作为高8位,组成了位,组成了16位位加加1计数器计数器 。计数个数计数个数n与计数初值与计数初值x的关系为:的关系为: 8x=2 -n6.3.3 定时定时/计数器的工作方式计数器的工作方式2 方式方式2为自动重装初值的为自动重装初值的8位计数方式。位计数方式。 工作方式工作方式2特别适合于用作较精确的脉冲信号发生器。特别适合于用作较精确的脉冲信号发生器。如:串行口波特率发生

13、器的使用如:串行口波特率发生器的使用计数个数计数个数n与计数初值与计数初值x的关系为的关系为: 6.3.4 定时定时/计数器的工作方式计数器的工作方式3 方式方式3只适用于定时只适用于定时/计数器计数器t0,将将t0分成为两个独分成为两个独立的立的8位计数器位计数器tl0和和th0 。tl0tl0作为作为定时定时/ /计数器:计数器:tl0tl0占用原占用原t0t0控制位及相关引脚:其操控制位及相关引脚:其操作和功能与方式作和功能与方式0 0、1 1基本相同基本相同th0th0仅作仅作定时器:定时器:th0th0占用占用t1t1控制位:控制位: tr1tr1、tf1tf1及及t1t1中断源。中

14、断源。 6.3.4 定时定时/计数器的工作方式计数器的工作方式3 定时器定时器t0工作于方式工作于方式3时,时, t1只能工作在方式只能工作在方式0、1、2计数溢出时输出送串行口,此时计数溢出时输出送串行口,此时t1作为串行口波特率发生器使用。作为串行口波特率发生器使用。以确定串行通讯的速率以确定串行通讯的速率。启动:设置好工作方式启动:设置好工作方式0、1、2时时相当于相当于tr1=1,t1便自动开始运行便自动开始运行;停止:停止:当设置为工作方式当设置为工作方式3时时相当于相当于tr1=0, t1停止计数。停止计数。6.4 定时器的应用定时器的应用 1、定时器的、定时器的 2、定时器的、定

15、时器的编程格式编程格式 3、定时器的应用举例、定时器的应用举例1、使用定时器工作之前,先写入方式、控制寄存器,确定好使用定时器工作之前,先写入方式、控制寄存器,确定好定时器工作方式:定时器工作方式: mov tmod,# 方式字方式字;启动方式选择启动方式选择(内外共同启动(内外共同启动/ /内启动)内启动) 功能选择功能选择(计数(计数/ /定时)定时) 位数选择位数选择 (8/13/168/13/16位)位) mov thx,#xh;计算时间常数计算时间常数x x,mov tlx,#xl ;tx时间常数初值装入数据寄存器时间常数初值装入数据寄存器 , (setb ea) ;开;开tx中断中

16、断(setb etx) setb trx ;启动控制;启动控制txtx定时器(启动定时器(启动/ /停止)停止)gatec/tm1m0gatec/tm1m0定时器初始化编程定时器初始化编程:在主程序中进行:在主程序中进行. .计算时间常数计算时间常数x(x(计算初值计算初值) )计数功能:计数功能:x= 2x= 2n n - -计数值计数值n n:13/16/813/16/8定时功能定时功能:x= 2x= 2n n - t/t- t/t t t:定时时间:定时时间 s s 、t t:机器周期:机器周期 s s由于计数器是加由于计数器是加1 1计数器,并在计数器,并在, 因此不能将因此不能将计数

17、值计数值送入计数器作为初值,而应送入计数送入计数器作为初值,而应送入计数值的值的数作为初值数作为初值计数器运行之前,需要预先给定初值计数器运行之前,需要预先给定初值. .预置预置初值初值方式方式0 mov thx,#x高高8位位mov tlx,#x方式方式1 mov thx,#x高高8位位mov tlx,#x低低8位位方式方式2 mov thx,#x8位位mov tlx,#x8位位方式方式3 mov th0,#x8位位mov tl0,#2、 编程格式及编程格式及方式(自动重装方式(自动重装/)1 1)查询方式:先查询定时器溢出标志,再进行溢出处理。)查询方式:先查询定时器溢出标志,再进行溢出处

18、理。 ;定时器初始化;定时器初始化sjmp sjmp waitwait ;溢出处理溢出处理sjmpsjmpwaitwait2 2)中断方式:初始化后执行其他任务,中断服务程序中处理溢出)中断方式:初始化后执行其他任务,中断服务程序中处理溢出o orgrg0000h0000hljmpljmpmainmaino orgrg000bh(001bh)000bh(001bh);t0t0(t1t1)中断入口)中断入口ljmpljmpptsptsmainmain:;初始化后执行其他程序;初始化后执行其他程序ptspts: m mov vthxthx,#x#xh h;软件软件重装时间常数重装时间常数m mov

19、 vtlxtlx,#x#xl l;溢出中断服务程序;溢出中断服务程序retireti3、定时器的应用举例、定时器的应用举例【例【例6-2、3】 :设:设foscosc=12mhz=12mhz。由。由p1.0p1.0输出周期输出周期为为2ms2ms的等宽度连续方波,使用的等宽度连续方波,使用t1t1的方式的方式0 0、1 1。2ms解:每隔解:每隔1ms1ms改变一次改变一次p1.0p1.0的输出状态。用的输出状态。用t1t1非门控方式定时。非门控方式定时。计算时间常数:计算时间常数:方式方式1:x = 216 - t/t = 216 -1000/1 = fc18h(1 1)查询方式:)查询方式

20、:org0000hstart:movtmod, #10h;(主程序开始)定时器(主程序开始)定时器t1工作方式工作方式1clrp1.0;设置方波的起始状态设置方波的起始状态movtl1, #18hmovth1, #0fch;送初值,保证定时时间为送初值,保证定时时间为1mssetbtr1;启动定时器启动定时器loop: jnbtf1, $;查询是否溢出,等待查询是否溢出,等待1ms定时到定时到movtl1, #18h;溢出处理溢出处理movth1, #0fch;再送计数初值,保证定时时间始终为再送计数初值,保证定时时间始终为1msclrtf1;清溢出标志,以便下次判断清溢出标志,以便下次判断c

21、plp1.0;改变改变p1.0的状态的状态sjmploop;产生连续的方波产生连续的方波end(2 2)中断方式)中断方式org0000hajmpstart;跳转主程序跳转主程序org 001bhljmppito1;跳转中断服务程序跳转中断服务程序org 0100hstart:movsp, #60h;堆栈初始化堆栈初始化movtmod, #10h;(主程序开始)定时器(主程序开始)定时器t1工作方式工作方式1movth1, #0fch;设置计数初值设置计数初值movtl1, #18hclrp1.0;设置方波的起始状态设置方波的起始状态setbea;开中断开中断setbet1setbtr1;启动

22、定时器启动定时器sjmp$;等待中断等待中断pito1: movtl1, #18hmovth1, #0fch;再送计数初值,保证定时时间始终为再送计数初值,保证定时时间始终为1mscplp1.0;输出方波输出方波reti;中断返回中断返回end解解:计算初值:方式计算初值:方式2:x = 28 - 100 = 156 = 9ch tmod初始化:初始化: gate=0 , c/t=1, m1m0=10borg0000hajmpstart;转主程序转主程序org0100hstart:movie, #00h;(主程序开始)关中断(主程序开始)关中断movtmod, #06h;设置定时器设置定时器t

23、0方式方式2计数计数movth0, #9ch;设置计数初值设置计数初值movtl0, #9chsetbtr0;启动计数启动计数loop: jbctf0, loop1;查询计数是否计满溢出查询计数是否计满溢出sjmplooploop1:inca;累加器加累加器加1sjmploopend【例【例6-4】用】用t0以工作方式以工作方式2计数,每计计数,每计100次次进行累加器加进行累加器加1操作。操作。解解:计算初值:方式计算初值:方式2:x = 28 t(foscosc/12)=256-100(6/12)=ceh tmod初始化:初始化: gate=0 , c/t=0, m1m0=10borg 0

24、000hstart:mov tmod, #02h;定时器定时器t0工作方式工作方式2clrp1.0;设置方波的起始状态设置方波的起始状态mov tl0, #0ceh ;送计数初值送计数初值,mov th0, #0ceh ; 保证定时时间始终为保证定时时间始终为100ssetb tr0;启动定时器启动定时器loop:jnbtf0, $;等待等待100s定时到定时到clrtf0;清溢出标志,以便下次判断清溢出标志,以便下次判断cplp1.0;改变改变p1.0的状态的状态sjmp loop;产生连续的方波产生连续的方波end【例【例6-5】用】用t0以工作方式以工作方式2产生产生5khz的连续方波,

25、的连续方波,并由并由p1.0输出。输出。设设foscosc=6mhz=6mhz,查询方式。,查询方式。解解:频率:频率=每秒钟内每秒钟内t0输入的脉冲数输入的脉冲数t0:计数方式:计数方式2,t1:定时方式:定时方式1计算基准初值:计算基准初值:t1定时方式定时方式1: x = 216 t(foscosc/12) =65536-125000(6/12) =0bdchtmod初始化:初始化: t1:gate=0 , c/t=0,m1m0=01bt0:gate=0 , c/t=1,m1m0=10b【例【例6-7】用单片机的定时器设计一个工频计,并用】用单片机的定时器设计一个工频计,并用二极管以二进

26、制形式显示所测频率。二极管以二进制形式显示所测频率。设设foscosc=6mhz=6mhzorg0000hajmpmainorg001bhajmpt_1org0100hmain: movsp, #60h;堆栈初始化堆栈初始化movp1,#00;测量前显示测量前显示0movtmod, #16h; t0计数方式计数方式2,定时器,定时器t1定时方式定时方式1movth0, #00h;设置设置t0计数初值计数初值movtl0, #00hmovth1, #0bh;设置设置t1定时初值定时初值125msmovtl1, #0dchmovr3,#8;设置软件计数器设置软件计数器setbea;开中断开中断se

27、tbet1orltcon,#0101000b;同时启动定时器同时启动定时器t1和计数器和计数器t0sjmp$;等待中断等待中断t_1:djnzr3,next;1s时间未到则中断返回,继续定时时间未到则中断返回,继续定时anltcon,#10001111b;1s定时到,同时关闭定时到,同时关闭t1、t0mova,tl0;读出频率值到;读出频率值到acpla;取反,低电平点亮二极管;取反,低电平点亮二极管movp1,a;送;送p1口进行显示口进行显示movth0, #00h;重新设置重新设置t0计数初值计数初值movtl0, #00hmovth1, #0bh;重新设置重新设置t1定时初值定时初值1

28、25msmovtl1, #0dchmovr3,#8;重新设置软件计数器重新设置软件计数器orltcon,#0101000b;同时启动定时器同时启动定时器t1和计数器和计数器t0reti;中断返回中断返回exit:movth1, #0bh; 1s未到未到,重新设置重新设置t1定时初值定时初值125msmovtl1, #0dchreti;中断返回中断返回end解:解: int1int1引脚输入被检测信号,记录在正脉冲的时间内包含引脚输入被检测信号,记录在正脉冲的时间内包含 机器脉冲个数。设机器脉冲个数。设foscosc=12mhz=12mhz,使用门控位,定时方式使用门控位,定时方式1 11)设脉宽小于设脉宽小于65.5ms65.5ms等待查询等待查询int1int1,正脉冲过后,读出,正脉冲过后,读出th1tl1th1tl1,送给,送给r3r2r3r2。start: mov tmod,#90h mov tl1,#0h mov th1,#0hwait1: jbp3.3,wait1 setb tr1 clrtr1mov r2,tl1mov r3,th1tr1=1

温馨提示

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

评论

0/150

提交评论