模块6 单片机的定时器计数器.ppt_第1页
模块6 单片机的定时器计数器.ppt_第2页
模块6 单片机的定时器计数器.ppt_第3页
模块6 单片机的定时器计数器.ppt_第4页
模块6 单片机的定时器计数器.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1,单片机原理与接口技术,主编任元吉,“十二五”高职高专“教与做1+1”体验互动式创新规划教材,2,模块6单片机的定时器计数器,从单片机的角度来看,因为AT89C51系列单片机具有串行口的通信机制,以单片机或计算机作为通信的主体,以串行信道作为通信的媒介,以单片机串口的逻辑电平、数据格式、数据传输波特率等作为通信的协议基础,单片机也就具有了多系统信息传递,协同工作的能力,这也就为单片机的多系统控制和应用打开了崭新的天地。,3,项目6.1定时器/计数器,项目6.2电子钟的制作及应用,项目6.3智能抢答器的制作及应用,技能训练:设计DS18B20与单片机的连接实验,基础训练,4,知识目标:,广州城建职业学院电子系谢元成制作手机Q:79652257Email:x_yuancheng,1、了解单片机的中断定时计数器系统的结构2、掌握单片机的定时计数器控制3、掌握在程序设计中应用定时计数器的方法,5,技能目标:1、能够熟悉单片机的定时计数器2、能够掌握输入/输出的控制方式3、能在程序设计中应用中断方式【课时建议】6课时教学重点:单片机的定时计数器教学难点:应用中断定时计数器方式进行程序设计,核心职业技术基础课,项目6.1定时器/计数器,广州城建职业学院电子系谢元成制作手机Q:79652257Email:x_yuancheng,6.1.1定时器/计数器概述之前我们学习过用延时子程序实现一段时间的定时功能,但这种方法有它的局限性,在定时的过程中因延时子程序的运行会一直占用CPU,在延时时间段内单片机无法再做其它的事情了。如果我们需要用到一种不占用CPU的定时方法,就要用到单片机自带的定时/计数器进行定时工作。80C51的中断系统有5个中断源,2个优先级,可实现二级中断嵌套。器属于五个中断源包含两个外部中断,两个定时/计数器,一个串行中断。,图1中断控制电路,如图1所示,80C51单片机共有五个中断源,每个中断源都可根据相应条件产生中断请求,中断请求会将相应的标志位置1,当单片机允许使用中断源时,会每过一个指令周期对相应中断标志位进行一次查询。如发现该标志位为1,则会停下当前工作转到中断子程序处进行程序处理,之后再返回刚才中断处继续执行。从中断请求的发生到处理完中断返回这一过程成为一个完整的中断过程。,图2定时/计数器的原理图,定时/计数器的原理图如图2所示,单片机共有两个定时计数器,每一个定时/计数器的主要组成部分是两个连续的8位的存储单元,这两个存储单元分为低8位和高8位,低位可向高位进位。在定时计/数器进行定时工作时,每过一个机器周期(6MHZ晶振-2us,12MHZ晶振-1us),定时计数器的低8位存储单元会自动加一;当低8位(TL0或TL1)加满溢出后会向高8位存储单元(TH0或TH1)进位;当高、低两个8位存储单元全部加满溢出后会将与之对应的中断标志位(TF0或TH1)置1;当单片机允许使用定时/计数器这一中断源时,CPU会每过一个指令周期对与被使用的定时/计数器相应的中断标志位进行一次查询。如发现中断标志位为1,则说明定时到时,会停下当前工作,进入中断子程序进行相应的中断处理,之后返回原来的工作位置继续之前的工作。,TCON(88H),TMOD(89H),内部总线,知识1:了解定时/计数器的功能,1.什么是单片机的定时和计数功能,定时(Timer):是对机器周期计数,每到一个机器周期,计数器加1,直至计满并产生溢出信号。计数器(Counter):是对外部信号计数,计数脉冲来自外部引脚T0,(P3.4)、T1(P3.5),并采用其下降沿触发计数。共同:计数;不同:计数对象不同。,6.1.2定时器/计数器控制分析,AT89S51单片机内部定时器/计数器结构如图3所示。内部设有两个16位的可编程定时器/计数器。可编程是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。,图3定时/计数器的内部结构,从图3可看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。这些工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。定时/计数器的的控制就是要对这些寄存器进行相应的赋值,使定时/计数器按照需要完成初始化,起到定时/技术作用。,6.1.3定时器/计数器的工作模式,定时计数器在使用时首先要对其工作模式进行设定,与之有关的特殊功能寄存器在上一节已经有了介绍,下面我们就对其各自的作用做详细的介绍。1.定时/计数器控制寄存器TCONTCON是定时/计数器控制寄存器,它包含两个定时/计数器的溢出中断标志及外部中断和的中断标志。,TCON的内部结构如表1所示,TCON位定义如表2所示。,表1TCON位格式,表2TCON位定义,2.定时/计数器工作模式控制寄存器TMOD定时器方式控制寄存器TMOD,其结构如表3所示。,表3TMOD格式,TMOD的高4位用控制于T1,低4用于控制T0,每一位的具体作用如下:,GATE:门控制位。GATE和软件控制位TR0(或TR1)、外部引脚信号,(或,)的状态,共同控制定时器计数器的打开或关闭。,C/:定时器计数器选择位。C/1,为计数器方式;C/0,为定时器方式。M1M0:工作方式选择位,定时器计数器工作方式由M1M0设定。具体如表4所示。,表4定时/计数器的工作方式,3.中断允许寄存器IEIE控制CPU总断源的允许或禁止以及每个中断源是否允许中断。IE内部结构如表5所示,IE位定义如表6所示。,表5IE格式,表6IE位定义,4.中断优先寄存器IPIP用来控制各中断源优先级的选择,即设定中断源的中断响应优先级别,IP内部结构如表7所示,IP位定义如表8所示。,表7IP位格式,表8IP位定义,单片机复位后,IP低五位全部清零,并将所有中断源设置为低优先级中断。如果几个同优先级的中断源同时向CPU申请中断,哪一个申请得到服务,取决于它们在CPU内部登记排队的序号。CPU通过内部硬件查询登记序号,按自然优先级响应各个中断请求。其内部登记序号是由硬件形成的,先后顺序如下:,T0,T1RI/TI,6.1.4定时器/计数器的容量在使用AT89S51的定时器计数器之前,一般完成以下几个步骤:1)确定定时/计数器工作方式,对TMOD赋值;2)计算定时/计数器的初值,对TH0、TL0或TH1、TL1赋值;3)开放CPU、定时/计数器中断,对IE中的EA、ET0、ET1赋值;4)启动定时器计数器,对TCON中TRl或TR0位赋值。,下面我们来学习定时/计数器的初值的具体方法:因为在不同工作方式下计数器位数不同,因而最大计数值也不同。现假设最大计数值为M,那么各方式下的最大值M值如下:方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定时器0分成两个8位计数器,所以两个M均为256。因为定时器/计数器是作“加1”计数,并在计数满溢出时产生中断,因此初值X可以这样计算:X=M-N/(12/fosc)其中N为定时时间,fosc为晶振频率。在实际应用中经常采用16位的方式1,下面以16位的方式1说明如何确定初值。,例如,T0选用方式1用于定时,外接晶振频率为12MHz,定时时间为10ms,计算过程如下:方式1时,M=65536,定时时间N=1010-3s,fosc=12MHz=12106HzX=M-N/(12/fosc)=65536-1010-3/(12/12106)=65536-10000=55536拆分X的高八位送TH0,低八位送TL0:MOVTH0,#0D8H;MOVTL0,#0F0H;,6.2.1定时器/计数器应用步骤经过以上学习我们知道要想使用定时/计数器必须先对其进行初始化,流程图如图4。,项目6.2电子钟的制作及应用,图4定时/计数器初始化流程,定时器/计数器初始化函数及中断服务函数格式:T0方式1:以10ms定时时间、12MHz晶振为例ORG0000HLJMPSTARTORGOO13HLJMPINTT0ORG0040HLCALLCSH.SJMP$;ORG0100HCSH:MOVEA,01H;MOVET0,01H;MOVTMOD,01H;MOVTH0,0D8H;MOVTL0,0F0H;MOVTR0,01H;RETORG0200HINTT0:MOVTH0,0D8H;MOVTL0,0F0H;.RETI,6.2.2电子钟系统制作分析1.任务要求六位数码显示,采用动态扫描方式,两位显示时位,两位显示分位,两位显示秒位,初始时间为23点58分46秒,如图5所示。,图5数字钟电路图,2.任务分析在本任务中要解决两个问题,一个是显示问题,一个是定时问题。断码显示器的使用在之前的学习中我们已经掌握了,在本任务中我们要同时显示六位不同的数字,但是80C51单片机只有4组I/O驱动引脚,无法同时对六位断码显示器输出显示数据,这就需要用到动态扫描的方法来完成显示功能。下面以两位数显示为例来说明动态扫描在断码显示中的应用。电路图如图6所示。,图6动态扫描显示电路,ORG0000HLJMPSTARTORG0030HSTART:MOVR0,#40H;40H.41H是显示缓冲区,依次存放十,个位MOVA,#06H;十位MOVR0,A;INCR0;个位MOVA,#00HMOVR0,ADS1:MOVR0,#40H;置显示缓冲区首址MOVR2,#02H;置扫描初值,点亮最左边的LED6DS2:MOVA,R0;得到的段显码输出到段数据口ACALLTABLEMOVP0,AMOVA,R2;向位数据口P1输出位显码CPLAMOVP2,A,MOVR3,#0ffH;延时一小段时间DEL:NOPDJNZR3,DELINCR0;显示缓冲字节加一CLRCMOVA,R2RRCA;显码右移一位MOVR2,A;最末一位是否显示完毕?,如无则JNZDS2;继续往下显示MOVA,TBFMOVB,#10DIVABMOV40H,AMOVA,BMOV41H,ASJMPDS1TABLE:INCA;取与数字对应的段码MOVCA,A+PCRETDB0EDH,48H,0E6H,6EH,4BHDB2FH,0AFH,68H,0EFH,6FHEND,图中使用两位共阳极段码显示器,P1口用来提供显示断码,P2.0、P2.1两位引脚用来提供显示器位选择码。在显示时,先由P2.0引脚输出高电平,P2.1引脚输出低电平选择个位显示器工作,这时让P1口输出“0”的断码使各位显示内容为“0”。这时开始一小段时间的延时(在视觉残留允许范围内,如10ms),之后改变P2.0、P2.1、P1的值使十位显示器工作,并显示“6”,再加入一小段时间的延时。这时只要重复上面的过程就可以让两位显示器交替显示,达到同时显示“60”的动态显示效果了。程序如下。在动态扫描显示的时候,程序进入了无限循环的状态,无法在进行其他的工作了,要想完成一秒钟的定时以及到时后的显示内容修改工作就要中断当前的循环工作进程,在1S到时的时候进行中断,处理完显示内容修改后再返回动态扫描的显示程序中,这样就可以实现任务要求的数字钟设计了。下面以60S倒计时为例,编程实现动态扫描与定时/计数器中断的使用方法。,BUFEQU23H;存放计数值TBFEQU22H;存放显示值ORG0000HLJMPSTARTORG000BHLJMPCLOCKORG0030HSTART:MOVR0,#40H;40H.41H是显示缓冲区,依次存放十,个位MOVA,#06H;十位MOVR0,A;INCR0;个位MOVA,#00HMOVR0,AMOVTMOD,#01H;定时器0初始化为方式1MOVTH0,#0D8H;置时间常数,延时0.1秒MOVTL0,#0F0HMOVBUF,#00H;置0MOVTBF,#60SETBET0SETBEASETBTR0DS1:MOVR0,#40H;置显示缓冲区首址MOVR2,#02H;置扫描初值,点亮最左边的LED6DS2:MOVA,R0;得到的段显码输出到段数据口ACALLTABLEMOVP0,A,MOVA,R2;向位数据口P1输出位显码CPLAMOVP2,AMOVR3,#0ffH;延时一小段时间DEL:NOPDJNZR3,DELINCR0;显示缓冲字节加一CLRCMOVA,R2RRCA;显码右移一位MOVR2,A;最末一位是否显示完毕?,如无则JNZDS2;继续往下显示MOVA,TBFMOVB,#10DIVABMOV40H,AMOVA,BMOV41H,ASJMPDS1,TABLE:INCA;取与数字对应的段码MOVCA,A+PCRETDB0EDH,48H,0E6H,6EH,4BHDB2FH,0AFH,68H,0EFH,6FHCLOCK:MOVTL0,#0D0H;置时间常数MOVTH0,#0F0HPUSHPSWPUSHACCINCBUF;计数加一MOVA,BUF;计到10否?没有则转到QUIT退出中断CJNEA,#02H,QUITMOVBUF,#00H;置初值MOVA,TBFDECA;MOVTBF,ACJNEA,#00H,QUITCLRTR0QUIT:POPACCPOPPSWRETI;中断返回END,6.2.3编制程序将这样的动态扫描内容进行扩充即可实现六位数的动态扫描显示效果。在上一节两位数码显示中已经学习了如何显示、如何产生1秒计时,数字钟在此基础上又增加了分位和时位,我们知道当秒位计够60秒时,自身归0,同时让分位上加1,当分位计够60时,分为归0,时位加1,当时位计够24时,时位归0,数字钟的程序就是按照这样的逻辑关系进行编写的。,BUFEQU23H;存放计数值SBFEQU22H;存放秒值MBFEQU21H;存放分值HBFEQU20H;存放时值CSEGAT0000HLJMPSTARTCSEGAT01BHLJMPCLOCKCSEGAT0030HSTART:MOVR0,#40H;40H-45H是显示缓冲区,依次存放时分秒MOVA,#02H;时高位MOVR0,A;INCR0;时、底位MOVA,#03HMOVR0,AINCR0;分高位MOVA,#05HMOVR0,AINCR0;存分低位MOVA,#08HMOVR0,AINCR0;秒高位MOVA,#04HMOVR0,AINCR0;秒低位MOVA,#06HMOVR0,A,MOVTMOD,#10H;定时器1初始化为方式1MOVTH1,#0D8H;置时间常数,延时0.1秒MOVTL1,#0F0HMOVBUF,#00H;置0MOVHBF,#23MOVSBF,#58MOVMBF,#46SETBET1SETBEASETBTR1DS1:MOVR0,#40H;置显示缓冲区首址MOVR2,#20H;置扫描初值,点亮最左边的LED6DS2:MOVA,R0;得到的段显码输出到段数据口ACALLTABLEMOVP0,AMOVA,R2;向位数据口P1输出位显码CPLAMOVP1,A,MOVR3,#0FFH;延时一小段时间DEL:NOPDJNZR3,DELINCR0;显示缓冲字节加一CLRCMOVA,R2RRCA;显码右移一位MOVR2,A;最末一位是否显示完毕?,如无则JNZDS2;继续往下显示MOVR0,#45HMOVA,SBF;把秒值分别放于44H,45H中ACALLGETMOVA,MBF;把分值分别放入40H,41H中ACALLGETMOVA,HBFACALLGETSJMPDS1;转DS1从头显示起,TABLE:INCA;取与数字对应的段码MOVCA,A+PCRETDB3FHDB06HDB5BHDB4FHDB66HDB6DHDB7DHDB07HDB7FHDB6FHDB40HGET:MOVR1,A;把从时。分或秒字节中取来的值的高ANLA,#0FH;位屏蔽掉,并送入缓冲区MOVR0,ADECR0MOVA,R1;把时。从分或秒字节中取来的值的低SWAPA;位屏蔽掉,并送入缓冲区ANLA,#0FHMOVR0,ADECR0;R0指针下移一位RET,CLOCK:MOVTL1,#0D8H;置时间常数MOVTH1,#0F0HPUSHPSWPUSHACCCPLP1.0CPLP1.1CPLP1.2CPLP1.3INCBUF;计数加一MOVA,BUF;计到10否?没有则转到QUIT退出中断CJNEA,#0AH,QUITMOVBUF,#00H;置初值MOVA,SBFINCA;秒值加一,经十进制调整后放入DAA;秒字节MOVSBF,ACJNEA,#60H,QUIT;计到60否?没有则转到QUIT退出中断MOVSBF,#00H;是,秒字节清零,MOVA,MBFINCA;分值加一,经十进制调整后放入DAA;分字节MOVMBF,ACJNEA,#60H,QUIT;分值为60否?不是则退出中断MOVMBF,#00H;是,清零MOVA,HBFINCADAAMOVHBF,ACJNEA,#24H,QUITMOVHBF,#00HQUIT:POPACCPOPPSWRETI;中断返回END,6.2.4系统调试在Proteuse软件上自行设计电路图,并根据自己设计的电路图在Keilc软件中编译程序进行调试,观察仿真运行结果。在程序中修改使数字钟的显示初始值为18点26分56秒,在进行运行观察变化。,6.3.1电路原理分析及设计抢答器可同时供不大于8名选手或8个代表队参加比赛,各用一个抢答按钮,按钮的编号与选手的编号是相对应的,分别是S1、S2、S3、S4、S5、S6、S7、S8;给节目主持人设置二个控制按钮开关,用来控制系统的清零和抢答的开始;抢答开始后,若有选手按动抢答按钮,在数码管上显示出选手的编号,同时蜂鸣器给出音响提示,禁止其他选手抢答,优先抢答选手的编号一直保持到主持人将系统清零为止。当节目主持人启动开始键后,要求定时器立即减计时,并用显示器显示,同时蜂鸣器发出短暂的声响,声响持续时间0.5S,参赛选手在设定的时间内抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零;如果定时抢答的时间不大于5S后,却没有选手抢答时,系统持续报警,直到定时抢答的时间为零,本次抢答无效,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示FFF犯规处理;如果主持人没按开始键,就有选手抢答,则显示选手编码,并持续报警;如果已经有选手抢答了,别的选手则按键无效。直到主持人重新复位按下开始键为止,电路图如图8所示。,项目6.3智能抢答器的制作及应用,图8抢答器电路,6.3.2硬件系统制作分析在制作硬件电路时应注意各元件的工作电压以及工作电流条件,在相应的电路中应添加适当的限流电阻,同时要注意P0引脚在使用时应连接上拉电阻。为了使蜂鸣器具有足够的驱动电流,在P3.7引脚增加了三极管做电流放大。同时为了使设计电路图符合实际电路需求,在电路图中增加了上拉电阻及缓存器。,6.3.3编制程序ORG0000HLJMPSTARTORG0003HLJMPESS;跳转到外部中断0中断子函数ORG00A0HSTART:SETBEASETBEX0SETBIT0;外部中断初始化LP:MOVR2,#00HINCR2JBP1.0,LP1LCALLLOPLP1:INCR2JBP1.1,LP2LCALLLOPLP2:INCR2JBP1.2,LP3LCALLLOPLP3:INCR2JBP1.3,LP4LCALLLOPLP4:INCR2JBP1.4,LP5LCALLLOPLP5:INCR2JBP1.5,LP6LCALLLOPLP6:INCR2JBP1.6,LP7LCALLLOPLP7:INCR2JBP1.7,LP8LCALLLOPLP8:LJMPLP;按键判断,LOP:MOV56H,#02HLP16:MOV51H,#10DMOV52H,#10HCLRP3.7;蜂鸣器报警LP10:LCALLDELAYDJNZ51H,LP10SETBP3.7;蜂鸣器结束报警LP15:LCALLDELAYDJNZ52H,LP15DJNZ56H,LP16MOVDPTR,#TABMOVA,R2MOVCA,A+DPTRLP11:MOVP2,#01HMOVP0,ALJMPLP11RETESS:MOVP2,#00HCLRP3.7MOVTMOD,#00000001BMOVR3,#0AHL12:MOVR4,#14HL11:MOVTH0,#3CHMOVTL0,#0B0HMOVDPTR,#TABSETBTR0;定时/计数器0初始化MOVA,R3MOVB,#0AHDIVABMOVCA,A+DPTRMOVP2,#01HMOVP0,ALCALLDLAYMOVA,BMOVCA,A+DPTRMOVP2,#02HMOVP0,ALCALLDLAY,L10:JNBTF0,L10;查询方式进行定时/计数器中断处理CLRTF0SETBP3.7DJNZR4,L11DECR3CJNER3,#0FFH,L19LJMPL18L19:CJNER3,#00H,L12MOV51H,#50DCLRP3.7L15:LCALLDELAYDJNZ51H,L15SETBP3.7MOVP2,#00HLJMPL18L18:RETIDLAY:MOV53H,#05HL14:MOV54H,#0F0HL13:MOVR2,#00HINCR2JBP1.0,L1LCALLLOOP,L1:INCR2JBP1.1,L2LCALLLOOPL2:INCR

温馨提示

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

评论

0/150

提交评论