《定时与中断系统》PPT课件.ppt
本章内容本章内容p中断系统中断系统p定时定时/计数器计数器pC语言的函数语言的函数第第4 4章章 定时与中断系统定时与中断系统44.3 3中断系统中断系统 CPU在处理某一事件在处理某一事件A时,发生了另一事时,发生了另一事件件B请求请求CPU迅速去处理(迅速去处理(中断发生中断发生););CPU暂时暂时中断当前的工作,转去处理事件中断当前的工作,转去处理事件B(中断响应和中断服务中断响应和中断服务););待待CPU将事件将事件B处理完毕后,再回到原来处理完毕后,再回到原来事件事件A被中断的地方继续处理事件被中断的地方继续处理事件A(中中断返回断返回),这一过程称为),这一过程称为中断中断。4.3.1 什么是中断什么是中断MCS-51MCS-51单片机的中断系统结构单片机的中断系统结构执行主程序主程序主程序继续执行主程序断点断点中断请求中断响应执行中断处理程序中断返回 引起引起CPU中断的根源,称为中断的根源,称为中断源中断源。中断源向。中断源向CPU提出的中断请求。提出的中断请求。CPU暂时中断原来的事务暂时中断原来的事务A,转去处理事件转去处理事件B。对事件。对事件B处理完毕后,再回到原来被处理完毕后,再回到原来被中断的地方(即中断的地方(即断点断点),称为中断返回。实现上述中),称为中断返回。实现上述中断功能的部件称为断功能的部件称为中断系统中断系统(中断机构)。(中断机构)。随着计算机技术的应用,人们发现中断技术随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速不仅解决了快速主机与慢速I/O设备的数据传送设备的数据传送问题,而且还具有如下优点:问题,而且还具有如下优点:分时操作分时操作。CPU可以分时为多个可以分时为多个I/O设备服设备服务,提高了计算机的利用率;务,提高了计算机的利用率;实时响应实时响应。CPU能够及时处理应用系统的随能够及时处理应用系统的随机事件,系统的实时性大大增强;机事件,系统的实时性大大增强;可靠性高可靠性高。CPU具有处理设备故障及掉电等具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。突发性事件能力,从而使系统可靠性提高。4.3.2 MCS-51中断系统的结构中断系统的结构 80C51的的中中断断系系统统有有5个个中中断断源源(8052有有 6个),个),2个优先级,可实现个优先级,可实现二级中断嵌套二级中断嵌套。一、中断源一、中断源 1、INT0()可可由由IT0()选选择择其其为为低低电电平平有有效效还还是是下下降降沿沿有有效效。当当CPU检检测测到到引引脚脚上上出出现现有有效效的的中中断断信信号号时,中断标志时,中断标志IE0()置()置1,向,向CPU申请中断。申请中断。4.3.3 中断有关寄存器中断有关寄存器一、中断源一、中断源2、INT1()可可由由IT1()选选择择其其为为低低电电平平有有效效还还是是下下降降沿沿有有效效。当当CPU检检测测到到引引脚脚上上出出现现有有效效的的中中断断信信号号时时,中断标志中断标志IE1()置()置1,向,向CPU申请中断。申请中断。3、T0(),片片内内定定时时/计计数数器器T0溢溢出出中中断断请请求求标标志志。当当定定时时/计计数数器器T0发发生生溢溢出出时时,置置位位TF0,并并向向CPU申申请中断。请中断。返回4、T1(),片片内内定定时时/计计数数器器T1溢溢出出中中断断请请求求标标志志。当当定定时时/计计数数器器T1发发生生溢溢出出时时,置置位位TF1,并并向向CPU申申请请中中断。断。5、RX()或或TX(),串串行行口口中中断断请请求求标标志志。当当串串行行口口接接收收完完一一帧帧串串行行数数据据时时置置位位RI或或当当串串行行口口发发送送完完一一帧串行数据时置位帧串行数据时置位TI,向,向CPU申请中断。申请中断。二、中断请求标志二、中断请求标志1、TCON的中断标志的中断标志IT0():外部中断():外部中断0触发方式控制位。触发方式控制位。当当IT0=0时,为电平触发方式。时,为电平触发方式。当当IT0=1时,为边沿触发方式(下降沿有效)。时,为边沿触发方式(下降沿有效)。IE0():外部中断():外部中断0中断请求标志位。中断请求标志位。IT1():外部中断():外部中断1触发方式控制位。触发方式控制位。IE1():外部中断():外部中断1中断请求标志位。中断请求标志位。TF0():定时():定时/计数器计数器T0溢出中断请求标志位。溢出中断请求标志位。TF1():定时():定时/计数器计数器T1溢出中断请求标志位。溢出中断请求标志位。2、SCON的中断标志的中断标志RI():串串行行口口接接收收中中断断标标志志位位。当当允允许许串串行行口口接接收收数数据据时时,每每接接收收完完一一个个串串行行帧帧,由由硬硬件件置置位位RI。注意,注意,RI必须由软件清除。必须由软件清除。TI():串串行行口口发发送送中中断断标标志志位位。当当CPU将将一一个个发发送送数数据据写写入入串串行行口口发发送送缓缓冲冲器器时时,就就启启动动了了发发送送过过程程。每每发发送送完完一一个个串串行行帧帧,由由硬硬件件置置位位TI。CPU响响应中断时,不能自动清除应中断时,不能自动清除TI,TI必须由软件清除。必须由软件清除。当当中中断断源源需需要要向向CPU请请求求中中断断时时,相相应应中中断断标标志志位位由硬件自动置由硬件自动置1。三、中断的开放和禁止三、中断的开放和禁止 CPU对中断系统所有中断以及某个中断源的开放对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器和屏蔽是由中断允许寄存器IE控制的。控制的。EX0(),外部中断(),外部中断0允许位;允许位;ET0(),定时(),定时/计数器计数器T0中断允许位;中断允许位;EX1(),外部中断(),外部中断0允许位;允许位;ET1(),定时(),定时/计数器计数器T1中断允许位;中断允许位;ES(),串行口中断允许位;(),串行口中断允许位;EA(),(),CPU中断允许(总允许)位。中断允许(总允许)位。80C5180C51单片机有两个中断优先级,即可实现二级单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器由中断优先级寄存器IPIP中的相应位的状态来规中的相应位的状态来规定的定的。PX0(),外部中断(),外部中断0优先级设定位;优先级设定位;PT0(),定时(),定时/计数器计数器T0优先级设定位;优先级设定位;PX1(),外部中断(),外部中断0优先级设定位;优先级设定位;PT1(),定时(),定时/计数器计数器T1优先级设定位;优先级设定位;PS (),串行口优先级设定位;(),串行口优先级设定位;PT2(),定时(),定时/计数器计数器T2优先级设定位。优先级设定位。同一优先级中的中断申请不止一个时,则有中断同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:中断系统硬件确定的自然优先级形成,其排列如所示:80C51单片机的中断优先级有三条原则:单片机的中断优先级有三条原则:CPU同时接收到几个中断时,同时接收到几个中断时,首先响应优先级别最首先响应优先级别最高的中断请求高的中断请求。正在进行的中断过程正在进行的中断过程不能被新的同级或低优先级的不能被新的同级或低优先级的中断请求所中断中断请求所中断。正在进行的低优先级中断服务,正在进行的低优先级中断服务,能被高优先级中断能被高优先级中断请求所中断请求所中断。为了实现上述后两条原则,为了实现上述后两条原则,中断系统内部设有两中断系统内部设有两个用户不能寻址的优先级状态触发器个用户不能寻址的优先级状态触发器。其中一个置其中一个置1,表示正在响应高优先级的中断,它将阻断后来所,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置有的中断请求;另一个置1,表示正在响应低优先级,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。中断,它将阻断后来所有的低优先级中断请求。4 4.3 3.4 4 中断处理过程中断处理过程 中断响应条件:中断响应条件:l 中断源发出中断请求;中断源发出中断请求;l 此中断源的中断允许位为此中断源的中断允许位为1;l CPU开中断(即开中断(即EA=1)。)。以上三条同时满足时,以上三条同时满足时,CPU才有可能响应中断。才有可能响应中断。中断函数的完整语法:返回值 函数名(【参数】)interrupt n using n中断处理程序中断编程:中断编程:利用利用INT1作为外部中断输入线,每按一次开关作为外部中断输入线,每按一次开关K使使P1口处的口处的8个个LED轮流点亮一次。轮流点亮一次。#include#includevoid main()EA=1;EX1=1;IT1=1;P1=0 xfe;while(1);void int1()interrupt 2 using 1 P1=_crol_(P1,1);任务任务9:可控霓虹灯控制:可控霓虹灯控制正正常常情情况况下下8个个霓霓虹虹灯灯依依次次顺顺序序点点亮亮,循循环环显显示示,时时间间间间隔隔为为1S。当当按按下下控控制制按按钮钮后后,8个个霓霓虹虹灯灯同同时时亮亮灭一次,时间间隔为。灭一次,时间间隔为。主程序:主程序:8个霓虹灯依次循环点亮,个霓虹灯依次循环点亮,时间间隔为时间间隔为1S中断处理程序:中断处理程序:8个霓虹灯同时亮灭个霓虹灯同时亮灭一次,时间间隔为一次,时间间隔为延时子函数延时子函数1、主程序:、主程序:T0初始化,开中断。初始化,开中断。8个霓虹灯依次循环点亮,时间间隔为个霓虹灯依次循环点亮,时间间隔为1S。2、外部中断、外部中断INT0中断处理程序:中断处理程序:8个霓虹灯同时亮灭一次,时间间隔个霓虹灯同时亮灭一次,时间间隔为为3、定时、定时/计数器计数器T0中断处理程序:中断处理程序:50ms定时时间到,定时时间到,num+;#define uchar unsigned charuchar num;void main()uchar num1,w;TMOD=0 x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;EX0=1;IT0=1;PT0=1;TR0=1;while(1)w=0 x01;for(num1=0;num18;num1+)P1=w;w=1;while(num!=20);num=0;void int0()interrupt 0 using 1uchar tempt1,tempt2;tempt1=num;tempt2=P1;num=0;P1=0 x00;while(num!=10);P1=0 xff;while(num!=20);num=tempt1;P1=tempt2;void timer0()interrupt 1 using 0num+;TH0=(65536-50000)/256;TL0=(65536-50000)%256;定时器定时器/计数器计数器 实现定时功能,实现定时功能,比较方便的办法是利用单片比较方便的办法是利用单片机内部的定时机内部的定时/计数器计数器。也可以采用下面三种。也可以采用下面三种方法:方法:v软件定时软件定时:软件定时不占用硬件资源,但占用了:软件定时不占用硬件资源,但占用了CPU时间,降低了时间,降低了CPU的利用率。的利用率。v采用时基电路定时采用时基电路定时:例如采用:例如采用555电路,外接必要电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。件进行控制和修改,即不可编程。v采用可编程芯片定时采用可编程芯片定时:这种定时芯片的定时值及:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时时功能强,使用灵活。在单片机的定时/计数器不够计数器不够用时,可以考虑进行扩展。用时,可以考虑进行扩展。4.1.1 4.1.1 定时定时/计数器的结构和工作原理计数器的结构和工作原理 一、定时一、定时/计数器的结构计数器的结构 定时定时/计数器的实质是加计数器的实质是加1计数器(计数器(16位),由高位),由高8位和低位和低8位两个寄存器组成。位两个寄存器组成。TMOD是定时是定时/计数器的工作方式寄存计数器的工作方式寄存器,确定工作方式和功能;器,确定工作方式和功能;TCON是控制寄存器,控制是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。的启动和停止及设置溢出标志。二、定时二、定时/计数器的工作原理计数器的工作原理 加加1计数器计数器输入的计数脉冲有两个来源输入的计数脉冲有两个来源,一个是由一个是由系统的时钟振荡器输出脉冲经系统的时钟振荡器输出脉冲经12分频后送来;一个分频后送来;一个是是T0或或T1引脚输入的外部脉冲源。每来一个脉冲计引脚输入的外部脉冲源。每来一个脉冲计数器加数器加1,当加到计数器为全,当加到计数器为全1时,再输入一个脉冲时,再输入一个脉冲就使计数器回零,且计数器的溢出使就使计数器回零,且计数器的溢出使TCON中中TF0或或TF1置置1,向,向CPU发出中断请求(定时发出中断请求(定时/计数器中计数器中断允许时)。如果定时断允许时)。如果定时/计数器工作于定时模式,则计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示表示定时时间已到;如果工作于计数模式,则表示计数值已满。计数值已满。可见,由溢出时计数器的值减去计数初值才是加可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值计数器的计数值。设置为定时器模式时设置为定时器模式时,加,加1计数器是对内部机器周期计数器是对内部机器周期计数(计数(1个机器周期等于个机器周期等于12个振荡周期,即计数频率个振荡周期,即计数频率为晶振频率的为晶振频率的1/12)。)。计数值计数值N乘以机器周期乘以机器周期Tcy就就是定时时间是定时时间t。设置为设置为计数器模式时计数器模式时,外部事件计数脉冲由,外部事件计数脉冲由T0或或T1引脚输入到计数器。在每个机器周期的引脚输入到计数器。在每个机器周期的S5P2期间采期间采样样T0、T1引脚电平。当某周期采样到一高电平输入,引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加而下一周期又采样到一低电平时,则计数器加1,更,更新的计数值在下一个机器周期的新的计数值在下一个机器周期的S3P1期间装入计数期间装入计数器。由于检测一个从器。由于检测一个从1到到0的下降沿需要的下降沿需要2个机器周期,个机器周期,因此要求被采样的电平至少要维持一个机器周期。当因此要求被采样的电平至少要维持一个机器周期。当晶振频率为晶振频率为12MHz时时,最高计数频率不超过,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于,即计数脉冲的周期要大于2 s。定时定时/计数器的控制计数器的控制 80C51单片机定时单片机定时/计数器的工作由两个特殊功计数器的工作由两个特殊功能寄存器控制。能寄存器控制。TMOD用于设置其工作方式;用于设置其工作方式;TCON用于控制其启动和中断申请。用于控制其启动和中断申请。一、工作方式寄存器一、工作方式寄存器TMOD 工作方式寄存器工作方式寄存器TMOD用于设置定时用于设置定时/计数器的计数器的工作方式,低四位用于工作方式,低四位用于T0,高四位用于,高四位用于T1。其格式。其格式如下:如下:GATE:门控位。:门控位。GATE0时,只要用软件使时,只要用软件使TCON中的中的TR0或或TR1为为1,就可以启动定时,就可以启动定时/计数器工作;计数器工作;GATA1时,时,要用软件使要用软件使TR0或或TR1为为1,同时外部中断引脚或也为高电,同时外部中断引脚或也为高电平时,才能启动定时平时,才能启动定时/计数器工作。即此时定时器的启动条计数器工作。即此时定时器的启动条件,加上了或引脚为高电平这一条件。件,加上了或引脚为高电平这一条件。:定时定时/计数模式选择位。计数模式选择位。0为定时模式;为定时模式;=1为计数模式。为计数模式。M1M0:工作方式设置位。定时:工作方式设置位。定时/计数器有四种工作方式,由计数器有四种工作方式,由M1M0进行设置。进行设置。二、控制寄存器二、控制寄存器TCON TCON的低的低4位用于控制外部中断位用于控制外部中断,已在前面介绍。已在前面介绍。TCON的高的高4位用于控位用于控制定时制定时/计数器的启动和中断申请。其格式如下:计数器的启动和中断申请。其格式如下:TF1():):T1溢出中断请求标志位。溢出中断请求标志位。T1计数溢出时由硬件自动置计数溢出时由硬件自动置TF1为为1。CPU响应中断后响应中断后TF1由硬件自动清由硬件自动清0。T1工作时,工作时,CPU可随时查可随时查询询TF1的状态。所以,的状态。所以,TF1可用作查询测试的标志。可用作查询测试的标志。TF1也可以用软件也可以用软件置置1或清或清0,同硬件置,同硬件置1或清或清0的效果一样。的效果一样。TR1():):T1运行控制位。运行控制位。TR1置置1时,时,T1开始工作;开始工作;TR1置置0时,时,T1停止工作。停止工作。TR1由软件置由软件置1或清或清0。所以,用软件可控制定时。所以,用软件可控制定时/计数器的计数器的启动与停止。启动与停止。TF0():):T0溢出中断请求标志位,其功能与溢出中断请求标志位,其功能与TF1类同。类同。TR0():):T0运行控制位,其功能与运行控制位,其功能与TR1类同。类同。4.1.2 定时定时/计数器的工作方式计数器的工作方式 一、方式一、方式0 方式方式0为为13位计数位计数,由,由TL0的低的低5位(高位(高3位未用)和位未用)和TH0的的8位组成。位组成。TL0的低的低5位溢出时向位溢出时向TH0进位,进位,TH0溢出溢出时,置位时,置位TCON中的中的TF0标志,向标志,向CPU发出中断请求。发出中断请求。定时器模式时定时器模式时有有:Nt/Tcy 计数初值计算的公式为:计数初值计算的公式为:定时器的初值还可以采用计数个数直接取补法获得。定时器的初值还可以采用计数个数直接取补法获得。计数模式时,计数脉冲是计数模式时,计数脉冲是T0引脚上的外部脉冲。引脚上的外部脉冲。门控位门控位GATE具有特殊的作用。当具有特殊的作用。当GATE=0时,经反相后使时,经反相后使或门输出为或门输出为1,此时仅由,此时仅由TR0控制与门的开启,与门输出控制与门的开启,与门输出1时,控制开关接通,计数开始;时,控制开关接通,计数开始;当当GATE=1时时,由外中断引,由外中断引脚信号控制或门的输出,此时控制脚信号控制或门的输出,此时控制与门的开启由外部中断引与门的开启由外部中断引脚信号和脚信号和TR0共同控制共同控制。当。当TR0=1时,外中断引脚信号引脚时,外中断引脚信号引脚的的高电平启动计数高电平启动计数,外部中断引脚信号引脚的,外部中断引脚信号引脚的低电平停止计低电平停止计数数。这种方式常用来测量外中断引脚上正脉冲的宽度。这种方式常用来测量外中断引脚上正脉冲的宽度。二、方式二、方式1 方式方式1的计数位数是的计数位数是16位,由位,由TL0作为低作为低8位、位、TH0作为高作为高8位,组成了位,组成了16位加位加1计数器计数器。计数个数与计数初值的关系为:计数个数与计数初值的关系为:三、方式三、方式2 方式方式2为自动重装初值的为自动重装初值的8位计数方式。位计数方式。工作方式工作方式2特别适合于用作较精确的脉冲信号发生器。特别适合于用作较精确的脉冲信号发生器。计数个数与计数初值的关系为计数个数与计数初值的关系为:四、方式四、方式3 方式方式3只适用于定时只适用于定时/计数器计数器T0,定时器定时器T1处于方式处于方式3时相当时相当于于TR1=0,停止计数。,停止计数。工作方式工作方式3将将T0分成为两个独立的分成为两个独立的8位计数器位计数器TL0和和TH0。定时定时/计数器的初始化计数器的初始化 一、初始化步骤一、初始化步骤程序应完成如下工作:程序应完成如下工作:v对对TMOD赋值,以确定赋值,以确定T0和和T1的工作方式。的工作方式。v计算初值计算初值,并将其写入并将其写入TH0、TL0或或TH1、TL1。v中断方式时,则对中断方式时,则对IE赋值,开放中断。赋值,开放中断。v使使TR0或或TR1置位,启动定时置位,启动定时/计数器定时或计数。计数器定时或计数。二、定时器的初值二、定时器的初值Xv定时方式:计数初值定时方式:计数初值X=2n 定时时间定时时间/机器周期。机器周期。v其中其中n=13、16、8、8分别对应方式分别对应方式0、1、2、3。1、求、求T1的方式控制字的方式控制字TMOD:0 1000 0 0 0TMOD=0X01;例例1:T0工作于定时方式工作于定时方式1,定时时间,定时时间T=10ms,系统主频,系统主频f=12MHZ,允许中断,允许中断,对对T0进行初始化编程。进行初始化编程。2、计算计数初值、计算计数初值Count:由于晶振为由于晶振为12 MHz,振荡周期,振荡周期=1/12MHZ,所以,所以机器周期机器周期Tcy为为1 s。所以:所以:Nt/Tcy 10000/110000 Count 655361000055536D8F0H 即应将即应将0 xD8送入送入TH0中,中,0 xF0送入送入TL0中中机器周期机器周期=(1/fosc)12Count=2n 定时时间定时时间/机器周期。机器周期。(1/12MHZ)123、开中断、开中断 EA=1;ET0=1;4、启动定时、启动定时/计数器计数器 TR0=1;初始化程序初始化程序:TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET1=1;TR1=1;定时器的应用举例定时器的应用举例例例2:设单片机晶振频率:设单片机晶振频率f=6MHZ,使用定,使用定时器时器T1以方式以方式1产生周期为产生周期为500uS的等宽正的等宽正方形脉冲,并由脚输出。方形脉冲,并由脚输出。确定确定TMOD寄存器的内容寄存器的内容定时器定时器/计数器计数器1的工作方式为方式的工作方式为方式1,从而,从而M1M0=01;实现定时功能,从而实现定时功能,从而C/T=0;设通过给设通过给TR1置位来启动定时器工作置位来启动定时器工作,从而从而GATE=0;另外,定时器另外,定时器/计数器计数器0不用,从而低四位全为不用,从而低四位全为0;所以(所以(TMOD)=10H。计算计数初值计算计数初值要产生要产生500us的等宽正方波脉冲,只需在端以的等宽正方波脉冲,只需在端以250us为周期交替输出高低电平即可实现,从为周期交替输出高低电平即可实现,从而定时时间为而定时时间为250us,f=6MHz。则。则机器周期机器周期=2us,利用公式:,利用公式:定时时间定时时间t=计数个数计数个数N机器周期机器周期T,可得,可得N=t/T=250us/2us=125;计数初值计数初值X=216-125=65536-125;这样这样:TH1=(65536-125)/256;TL1=(65536-125)%256。一、采用中断方式一、采用中断方式#include void main()TMOD=0 x10;TH1=(65536-125)/256;TL1=(65536-125)%256;ET1=1;EA=1;TR1=1;while(1);void timer1_int()interrupt 3 P1_0=P1_0;TH1=(65536-125)/256;TL1=(65536-125)%256;系统电路图系统电路图二、采用查询方式二、采用查询方式void main()TMOD=0 x10;TH1=(65536-125)/256;TL1=(65536-125)%256;TR1=1;While(1)While(TF1)P10=P10;TR1=0;TH1=(65536-125)/256;TL1=(65536-125)%256;TF1=0;TR1=1;例例3:设单片机晶振频率:设单片机晶振频率f=12MHZ,在端,在端接一个发光二极管,利用定时接一个发光二极管,利用定时T0工作在方工作在方式式0,使,使LED亮亮1s、灭、灭1s,闪烁。(中断,闪烁。(中断/查询)查询)用用T0、工作方式、工作方式0实现实现1秒延时,晶振频率为秒延时,晶振频率为12MHz。因工作方式因工作方式0是是13位计数器,其最大定时时间为:位计数器,其最大定时时间为:2131 s=8192,为实现,为实现1秒延时,可选择定时时秒延时,可选择定时时间为间为5ms,再循环,再循环200次。定时时间选定后,可确定计次。定时时间选定后,可确定计数值为数值为5ms/1 s=5000,则,则T0的初值为:的初值为:X=213 计数值计数值=8192 5000。采用采用T0方式方式0工作,因此,工作,因此,TMOD=0 x00。/*中断方式中断方式*/#includesbit P1_0=P10;unsigned char num0;/全局变量全局变量void main()TMOD=0 x00;TH0=(8192-5000)%32;TL0=(8192-5000)/32;ET0=1;EA=1;TR0=1;While(1)if(num=200)num=0;P1_0=P1_0;void timer0_int()interrupt 1 num;TH0=(8192-5000)%32;TL0=(8192-5000)/32;/*查询方式查询方式*/#includesbit P1_0=P10;unsigned char num0;void main()TMOD=0 x00;TH0=(8192-5000)%32;TL0=(8192-5000)/32;TR0=1;While(1)while(TF0)num+;if(num=200)num=0;P1_0=P1_0;TR0=0;TH0=(8192-5000)%32;TL0=(8192-5000)/32;TF0=0;TR0=1;1、利用定时、利用定时/计数器计数器T0从输出周期为从输出周期为1s的方的方波,让发光二极管以波,让发光二极管以1HZ闪烁,设晶振频率为闪烁,设晶振频率为12MHz。试设计程序。试设计程序。2、采用晶振、采用晶振12MHz,在引脚上输出周期为,在引脚上输出周期为,占空比为占空比为20%的脉冲信号。的脉冲信号。3、利用定时、利用定时/计数器计数器T1产生定时时钟产生定时时钟,由由P1口口控制控制8个发光二极管。编一个程序个发光二极管。编一个程序,使使8个指示个指示灯依次一个一个闪动,闪动频率为灯依次一个一个闪动,闪动频率为10次次/秒秒(8个灯依次亮一遍为一个周期)。个灯依次亮一遍为一个周期)。习题习题 1、MCS-51系列单片机的五个中断源是哪些?请按自系列单片机的五个中断源是哪些?请按自然优先级的顺序写出。然优先级的顺序写出。2、允许外部中断源、允许外部中断源INT1开中断,开中断,IE=_。3、采用定、采用定时时/计数器计数器T1计数,工作方式计数,工作方式0,软硬结合启,软硬结合启动,动,TMOD=_。4、利用定时利用定时/计数器计数器T1的方式的方式1,产生,产生10ms的定时,的定时,并使并使P1.0引脚上输出周期为引脚上输出周期为20ms的方波,采用中断方的方波,采用中断方式,设系统时钟频率为式,设系统时钟频率为12 MHz。定时定时/计数器计数器 设置定时设置定时/计数器工作方式计数器工作方式p通过对方式寄存器通过对方式寄存器TMODTMOD的设置,确定相应的定时的设置,确定相应的定时/计数器计数器是定时功能还是计数功能,工作方式以及启动方法。是定时功能还是计数功能,工作方式以及启动方法。p定时定时/计数器工作方式有四种:方式计数器工作方式有四种:方式0 0、方式、方式1 1、方式、方式2 2和方和方式式3 3。p定时定时/计数器启动方式有两种:软件启动和硬软件共同启计数器启动方式有两种:软件启动和硬软件共同启动。除了从控制寄存器动。除了从控制寄存器TCONTCON发出的软件启动信号外,还有发出的软件启动信号外,还有外部启动信号引脚,这两个引脚也是单片机的外部中断输外部启动信号引脚,这两个引脚也是单片机的外部中断输入引脚。入引脚。定时定时/计数器计数器 p设置计数初值设置计数初值pT0T0、T1T1是是1616位加法计数器,分别由两个位加法计数器,分别由两个8 8位专用寄存器组位专用寄存器组成,成,T0T0由由TH0TH0和和TL0TL0组成,组成,T1T1由由TH1TH1和和TL1TL1组成。组成。TL0TL0、TL1TL1、TH0TH0、TH1TH1的访问地址依次为的访问地址依次为8AH8AH 8DH8DH,每个寄存器均可被,每个寄存器均可被单独访问,因此可以被设置为单独访问,因此可以被设置为8 8位、位、1313位或位或1616位计数器使位计数器使用。用。p在计数器允许的计数范围内,计数器可以从任何值开始在计数器允许的计数范围内,计数器可以从任何值开始计数,对于加计数,对于加1 1计数器,当计到最大值时(对于计数器,当计到最大值时(对于8 8位计数器,位计数器,当计数值从当计数值从255255再加再加1 1时,计数值变为时,计数值变为0 0),产生溢出。),产生溢出。p定时定时/计数器允许用户编程设定开始计数的数值,称为赋计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。初值。初值不同,则计数器产生溢出时,计数个数也不同。例如:对于例如:对于8 8位计数器,当初值设为位计数器,当初值设为100100时,再加时,再加1 1计数计数156156个,计数器就产生溢出;当初值设为个,计数器就产生溢出;当初值设为200200时,再加时,再加1 1计数计数5656个,计数器产生溢出。个,计数器产生溢出。定时定时/计数器计数器 启动定时启动定时/计数器计数器根据设置的定时根据设置的定时/计数器启动方式,启动定时计数器启动方式,启动定时/计数器。如果采用软件启动,则需要把控制寄计数器。如果采用软件启动,则需要把控制寄存器中的存器中的TR0TR0或或TR1TR1置置1 1;如果采用硬软共同启动;如果采用硬软共同启动方式,不仅需要把控制寄存器中的方式,不仅需要把控制寄存器中的TR0TR0或或TR1TR1置置1 1,还需要相应外部启动信号为高电平。,还需要相应外部启动信号为高电平。p在在C C语言程序中,子程序的作用是由函数来实现语言程序中,子程序的作用是由函数来实现的,函数是的,函数是C C语言的基本组成模块,一个语言的基本组成模块,一个C C语言程语言程序就是由若干个模块化的函数组成的。序就是由若干个模块化的函数组成的。pC C程序都是由程序都是由一个主函数一个主函数main()main()和和若干个子函数若干个子函数构成,构成,有且只有一个有且只有一个主函数,程序由主函数开始主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,其它函执行,主函数根据需要来调用其他函数,其它函数可以有多个。数可以有多个。4.2 C语言的函数 1.1.标准库函数标准库函数 标准库函数是由标准库函数是由C51C51的编译器提供的,用户不的编译器提供的,用户不必定义这些函数,可以直接调用。必定义这些函数,可以直接调用。KEIL C51KEIL C51编译编译器提供了器提供了100100多个库函数供我们使用。常用的多个库函数供我们使用。常用的C51C51库函数包括一般库函数包括一般I/OI/O口函数、访问口函数、访问SFRSFR地址函数等,地址函数等,在在C51C51编译环境中,以头文件的形式给出。编译环境中,以头文件的形式给出。2.2.用户自定义函数用户自定义函数 用户自定义函数是用户根据需要自行编写的函用户自定义函数是用户根据需要自行编写的函数,它必须先定义之后才能被调用。数,它必须先定义之后才能被调用。函数分类和定义 函数定义的一般形式是:函数定义的一般形式是:函数类型函数类型 函数名(形式参数表)函数名(形式参数表)形式参数说明形式参数说明 局部变量定义局部变量定义函数体语句函数体语句 其中,其中,“函数类型函数类型”说明了自定义函数返回值的类型。说明了自定义函数返回值的类型。“函数名函数名”是自定义函数的名字。是自定义函数的名字。“形式参数表形式参数表”给出函数被调用时传递数据的形式参数,形给出函数被调用时传递数据的形式参数,形式参数的类型必须要加以说明。式参数的类型必须要加以说明。ANSI CANSI C标准允许在形式参数表标准允许在形式参数表中对形式参数的类型进行说明。中对形式参数的类型进行说明。如果定义的是无参数函数,可如果定义的是无参数函数,可以没有形式参数表,但是圆括号不能省略。以没有形式参数表,但是圆括号不能省略。“局部变量定义局部变量定义”是对在函数内部使用的局部变量进行定义。是对在函数内部使用的局部变量进行定义。“函数体语句函数体语句”是为完成函数的特定功能而设置的语句。是为完成函数的特定功能而设置的语句。函数分类和定义 函数调用就是在一个函数体中引用另外一个函数调用就是在一个函数体中引用另外一个已经定义的函数,前者称为主调用函数,后者称已经定义的函数,前者称为主调用函数,后者称为被调用函数,函数调用的一般格式为:为被调用函数,函数调用的一般格式为:函数名(实际参数列表);函数名(实际参数列表);如:如:delay(250);delay(250);对于有参数类型的函数,若实际参数列表中对于有参数类型的函数,若实际参数列表中有多个实参,则各参数之间用逗号隔开。实参与有多个实参,则各参数之间用逗号隔开。实参与形参顺序对应,个数应相等,类型应一致。形参顺序对应,个数应相等,类型应一致。如:如:P1=_crol_(P1,1);P1=_crol_(P1,1);函数调用 在一个函数中调用另一个函数需要具备如下在一个函数中调用另一个函数需要具备如下条件:条件:(1 1)被调用函数必须是已经存在的函数(库)被调用函数必须是已经存在的函数(库函数或者用户自己已经定义的函数。函数或者用户自己已经定义的函数。如果函数定义在调用之后,那么必须在调用如果函数定义在调用之后,那么必须在调用之前(一般在程序头部)对函数进行声明。之前(一般在程序头部)对函数进行声明。(2 2)如果程序使用了库函数,则要在程序的)如果程序使用了库函数,则要在程序的开头用开头用includeinclude预处理命令将调用函数所需要预处理命令将调用函数所需要的信息包含在本文件中。如果不是在本文件中定的信息包含在本文件中。如果不是在本文件中定义的函数,那么在程序开始要用义的函数,那么在程序开始要用externextern修饰符进修饰符进行函数原型说明。行函数原型说明。函数调用