51单片机中断系统详解
- 格式:docx
- 大小:15.75 KB
- 文档页数:7
MCS-51单⽚机的中断系统单⽚机中断技术概述在任何⼀款事件驱动型的CPU⾥⾯都应该会有中断系统,因为中断就是为响应某种事件⽽存在的。
中断的灵活应⽤不仅能够实现想要的功能,⽽且合理的中断安排可以提⾼事件执⾏的效率,因此中断在单⽚机应⽤中的地位是⾮常重要的。
单⽚机中断(Interrupt)是硬件驱动事件,它使得CPU暂停当前的主程序,转⽽去执⾏⼀个中断服务⼦程序。
为了更形象地理解中断,下⾯以学⽣上⾃习时接电话为例阐述⼀下中断的概念。
单⽚机的中断系统有5个中断源、2个中断优先级,可实现两级中断服务程序嵌套。
如果单⽚机没有中断系统,单⽚机的⼤量时间可能会浪费在查询是否有服务请求发⽣的定时査询操作上。
采⽤中断技术完全消除了单⽚机在査询⽅式中的等待现象,⼤⼤地提⾼了单⽚机的⼯作效率和实时性。
单⽚机中断系统结构及中断控制中断系统结构图如图5-2所⽰。
由图5-2可见,MCS-51中断系统共有5个中断请求源:INT0——外部中断请求0,中断请求信号由INT0引脚输⼊。
定时/计数器T0计数溢出发出的中断请求。
INT1——外部中断请求1,中断请求信号由INT1引脚输⼊。
定时/计数器T1计数溢出发出的中断请求。
串⾏⼝中断请求。
中断优先级从⾼到底排列。
单⽚机如何知道有中断请求信号?是否能够响应该中断?若5个中断源请求信号同时到来,单⽚机如何响应?这些问题都可以由中断寄存器来解决。
单⽚机中断寄存器有中断标志寄存器TCON和SCON、中断使能寄存器IE和中断优先级寄存器IP,这些寄存器均为8位。
中断标志寄存器5个中断请求源的中断请求标志分别由TCON和SCON的相应位锁存,单⽚机通过这些中断标志位的状态便能知道具体是哪个中断源正在申请中断。
TCON寄存器TCON寄存器为定时/计数器的控制寄存器,字节地址为88H,可位寻址。
特殊功能寄存器TCON的格式如图5-3所⽰。
TCON各标志位功能如下。
TF1——定时/计数器T1的溢出中断请求标志位。
一、中断的概念CPU在处理某一事件A时,发生了另一事件B请求C PU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待C PU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断二、中断源在51单片机中有5个中断源中断号优先级中断源中断入口地址0 1(最高)外部中断0 0003H1 2 定时器0 000BH2 3 外部中断1 0013H3 4 定时器1 0018H4 5 串口总段0023H三、中断寄存器单片机有10个寄存器主要与中断程序的书写控制有关1.中断允许控制寄存器IE2.定时器控制寄存器TC ON3.串口控制寄存器SCON4.中断优先控制寄存器IP5.定时器工作方式控制寄存器TMOD6.定时器初值赋予寄存器(TH0/TH1,TL0/TL1)四、寄存器功能与赋值说明注:在用到中断时,必须要开总中断EA,即EA=1。
//开总中断1.中断允许控制寄存器IEEX0(EX1):外部中断允许控制位EX0=1 外部中断0开关闭合//开外部0中断EX0=0 外部中断0开关断开ET0(ET1):定时中断允许控制位ET0=1 定时器中断0开关闭合//开内部中断0ET0=0 定时器中断0开关断开ES: 串口中断允许控制位ES=1 串口中断开关闭合//开串口中断ES=0 串口中断开关断开2.定时器控制寄存器TCON //控制外部中断和定时器中断外部中断:IE0(IE1):外部中断请求标志位当INT0(INT1)引脚出现有效的请求信号,此位由单片机自动置1,cpu开始响应,处理终端,而当入中断程序后由单片机自动置0.//外部中断,即外部中断相应的引脚接入低电平或下降沿信号时,中断开始响应。
IT0(IT1):外部中断触发方式控制位//选择有效信号IT0(IT1)=1:脉冲触发方式,下降沿有效。
IT0(IT1)=0:电平触发方式,低电平有效。
51单片机中断详解1、中断发生CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理2、中断响应和中断服务CPU暂时中断当前的工作,转去处理事件B3、中断返回待CPU将事件B处理完毕后,再回到原来事件A 被中断的地方继续处理事件A这一过程称为中断二、中断过程示意图3、 MCS51中断系统的结构MCS51的中断系统有5个中断源(8052有6个),2个优先级,可实现二级中断嵌套四、中断寄存器单片机有10个寄存器主要与中断程序的书写控制有关1、中断允许控制寄存器IE2、定时器控制寄存器TCON3、串口控制寄存器SCON4、中断优先控制寄存器IP5、定时器工作方式控制寄存器TMOD6、定时器初值赋予寄存器(TH0/TH1,TL0/TL1)五、部分寄存器详解1、中断允许控制寄存器(IE)EX0:外部中断0允许位;ET0:定时/计数器T0中断允许位;EX1:外部中断1允许位;ET1:定时/计数器T1中断允许位;ES :串行口中断允许位;EA :CPU中断允许(总允许)位。
2、定时器/计数器控制寄存器控制寄存器(TCON)IT0:外部中断0触发方式控制位当IT0=0时,为电平触发方式(低电平有效)当IT0=1时,为边沿触发方式(下降沿有效)IE0:外部中断0中断请求标志位IT1:外部中断1触发方式控制位IE1:外部中断1中断请求标志位TF0:定时/计数器T0溢出中断请求标志位TF1:定时/计数器T1溢出中断请求标志位3、串行口控制寄存器(SCON)RI:串行口接收中断标志位。
当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。
注意,RI必须由软件清除。
TI:串行口发送中断标志位。
当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。
每发送完一个串行帧,由硬件置位TI。
CPU响应中断时,不能自动清除TI,TI必须由软件清除。
4、中断优先级控制寄存器(IP)PX0:外部中断0优先级设定位PT0:定时/计数器T0优先级设定位PX1:外部中断0优先级设定位PT1:定时/计数器T1优先级设定位PS :串行口优先级设定位PT2:定时/计数器T2优先级设定位六、中断响应条件1、中断源有中断请求2、此中断源的中断允许位为13、开中断(即EA=1)。
引言:C51单片机中断是单片机开发中一个非常重要的概念。
通过中断,程序能够在运行过程中及时响应外部事件,提高系统的实时性和可靠性。
本文将进一步探讨C51单片机中断的相关知识,特别是中断优先级、中断嵌套、中断服务函数等方面的内容。
概述:C51单片机中断机制是通过改变程序的执行流程来实现的。
当中断事件发生时,CPU会暂停当前的执行任务,保存现场后转去执行中断服务程序,待中断服务程序执行完毕后,再恢复到之前的执行状态。
C51单片机中断机制通过这样的方式,有效地实现了对外部事件的及时响应。
正文内容:1. 中断优先级1.1 中断优先级的概念中断优先级是指在多个中断事件同时发生时,CPU按照一定的优先级顺序处理这些中断请求。
在C51单片机中,中断优先级是通过中断控制器来实现的。
中断控制器按照预先设定的优先级进行中断请求的响应,优先级越高的中断请求将被优先处理。
1.2 中断优先级的设置在C51单片机中,中断优先级的设置是通过特殊功能寄存器(SFR)来完成的。
通过设置SFR中的相关位,可以对不同的中断请求进行优先级设置。
具体的设置方法可以参考C51单片机的相关手册和数据手册。
2. 中断嵌套2.1 中断嵌套的概念中断嵌套是指在中断服务程序执行过程中,又发生了其他的中断事件,并且这些中断事件的优先级高于当前正在执行的中断服务程序。
在C51单片机中,中断嵌套是通过中断控制器的中断请求线来实现的。
当一个中断事件发生时,如果其优先级高于当前执行的中断服务程序,CPU会立即切换到新的中断服务程序中去执行。
2.2 中断嵌套的处理方法在C51单片机中,中断嵌套的处理是通过中断服务程序的堆栈来实现的。
当发生中断嵌套时,CPU将当前的现场信息保存到堆栈中,然后切换到新的中断服务程序中执行。
当新的中断服务程序执行完毕后,CPU会从堆栈中恢复之前的现场信息,并回到原来的中断服务程序继续执行。
3. 中断服务函数3.1 中断服务函数的概念中断服务函数是指用来处理中断事件的函数。
51单片机中断系统工作原理
51单片机中断系统是处理器与外部设备之间通信的一种机制,它允许外设在需要时中断CPU的正常程序执行,从而执行一些高优先级的任务。
本文将从以下几个方面介绍51单片机中断系统的工作原理:
1. 中断源和中断向量表
51单片机中断系统的中断源可以是内部或外部的。
内部中断源包括定时器、串口、ADC等模块,而外部中断源则可以是外部中断引脚、外部数据存储器等。
中断向量表则是一个存储各中断服务程序入口地址的表格,它可以在CPU执行中断时快速定位相应的中断服务程序。
2. 中断控制器和优先级
中断控制器是一个用于控制中断的硬件模块,它可以根据中断源的优先级来决定哪个中断请求会被响应。
优先级高的中断请求会被优先响应,而低优先级的则会被忽略。
在中断控制器中还有一个中断允许寄存器,它用于允许或禁止特定的中断源。
3. 中断服务程序的编写
中断服务程序是一段特殊的程序,它用于响应中断请求并执行相应的操作。
在编写中断服务程序时,需要注意以下几点:首先,中断服务程序必须尽快完成,以便让CPU恢复正常的程序执行;其次,中断服务程序需要保存现场,即保存一些特定的寄存器值,以便后续程序恢复时可以正确地执行;最后,中断服务程序需要执行IRET指令,
以便将中断返回地址出栈并返回到原来的程序执行点。
通过深入了解51单片机中断系统的工作原理,我们可以更好地理解中断系统的原理和应用,并在实际应用中更好地使用它。
51单片机中断介绍引言:单片机是一种具有计算机功能的集成电路芯片,通常用于控制和处理各种电子设备。
中断是单片机中一个重要的概念和功能,可以使单片机在进行其他任务时及时中止当前的任务,响应外部的事件或者内部的事件。
本文将详细介绍51单片机中断的概念、原理、分类和应用。
一、中断的概念:中断是指在单片机进行正在执行的任务时,主动跳转到指定的中断处理程序,响应外部或内部事件的一种机制。
中断可以打破程序的顺序执行,提高系统的实时性和响应性。
一般来说,中断可以分为外部中断和内部中断两种。
二、中断的原理:中断的原理是通过中断触发器和中断向量表来实现的。
当外部或内部事件发生时,中断触发器会被触发,并向单片机发送中断请求信号。
单片机在执行完当前指令后,检测到中断请求信号时会暂停当前的任务,加载中断向量表,根据中断类型跳转到相应的中断处理程序,在中断处理程序执行完毕后再返回到原来的任务。
三、中断的分类:1.外部中断:外部中断是由外部事件触发的中断,常用的触发事件包括按键按下、外部引脚电平变化等。
MCU通常会提供多个外部中断引脚,可以通过设置引脚的中断触发方式和优先级来实现外部中断的功能。
2.定时中断:定时中断是由定时器模块触发的中断,可以用于实现定时任务、定时采样等功能。
通过设置定时器的计数值和工作模式,可以实现不同的定时中断功能。
3.串口中断:串口中断是由串口通信模块触发的中断,可以实现数据的收发、处理等功能。
通过设置串口的波特率、数据位、校验位等参数,可以实现数据的可靠传输。
4.ADC/DAC中断:ADC/DAC中断是由模数转换模块触发的中断,可以实现模拟信号的采集和输出。
通过设置采样率、精度等参数,可以获取和处理模拟信号。
四、中断的应用:中断在单片机的应用非常广泛,可以提高系统的实时性和响应性,实现各种功能。
以下是一些常见的中断应用场景:1.外部事件的响应:通过外部中断,可以很方便地实现对按键、光电传感器等外部事件的响应。
51单片机中断系统关单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。
你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。
这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。
仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。
第一、什么可经引起中断,生活中很多事件能引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把能引起中断的称之为中断源,单片机中也有一些能引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。
第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢,如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。
如果不是这两者(即不等电话,也不是等人上门),你可能会按你常常的习惯去处理。
总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。
优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。
考虑一下我们会怎么办吧。
第三、中断的响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不一样的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不一样的中断,我们要在不一样的地点处理,而这个地点常常还是固定的。
计算机中也是采用的这种办法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。
51单片机中断系统在单片机的世界里,中断系统就像是一位高效的调度员,能够让单片机在处理复杂任务时有条不紊,实现高效、实时的响应。
今天,咱们就来好好聊聊 51 单片机中断系统这个重要的概念。
咱们先来理解一下啥是中断。
想象一下,单片机正在专心致志地执行一个任务,比如说计算一组数据的平均值。
这时候,突然有个更紧急、更重要的事情发生了,比如外部设备传来了一个急需处理的数据。
这时候,单片机就得暂时放下手头正在做的事情,先去处理这个紧急任务,处理完之后再回来继续之前的工作。
这个过程,就是中断。
51 单片机的中断系统呢,有 5 个中断源。
这 5 个中断源就像是 5 个不同的紧急信号通道,分别是外部中断 0、外部中断 1、定时器/计数器0 溢出中断、定时器/计数器 1 溢出中断和串行口中断。
外部中断 0 和外部中断 1 通常是由外部的信号触发的。
比如说,你可以通过连接一个按钮到单片机的引脚,当你按下按钮时,就会产生一个外部中断信号,让单片机暂停当前的工作,去执行与这个按钮相关的处理程序。
定时器/计数器 0 溢出中断和定时器/计数器 1 溢出中断则是跟单片机内部的定时器/计数器有关。
你可以设定定时器/计数器的值,当它计数到满或者定时时间到了,就会产生中断。
这在很多需要定时操作的场景中非常有用,比如定时发送数据、定时控制电机转动等。
串行口中断则是在单片机进行串行通信时发挥作用。
当串行口接收到数据或者发送完数据时,就会产生中断,通知单片机进行相应的处理。
那单片机是怎么知道有中断发生的呢?这就得提到中断标志位了。
每个中断源都有一个对应的中断标志位,当中断发生时,这个标志位就会被置位。
单片机会定期检查这些标志位,一旦发现有标志位被置位了,就知道有相应的中断发生了。
但是,单片机也不能一有中断就马上跑去处理呀,万一首先正在执行的任务很重要不能中断呢?所以,51 单片机还有中断允许控制寄存器和中断优先级控制寄存器。
中断允许控制寄存器就像是一个总开关,你可以通过设置它来决定是否允许某个中断源产生中断。
51单片机中断系统详解51 单片机中断系统详解(定时器、计数器)51 单片机中断级别中断源INT0---外部中断0/P3.2 T0---定时器/计数器0 中断/P3.4 INT1---外部中断1/P3.3 T1----定时器/计数器1 中断/P3.5 TX/RX---串行口中断T2---定时器/计数器 2 中断第5 最低4 5 默认中断级别最高第2 第3 第4 序号(C 语言用) 0 1 2 3 intrrupt 0中断允许寄存器IE位序号符号位EA/0 ------ET2/1 ES ET1 EX1 ET0 EX0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 EA---全局中允许位。
EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。
EA=0,关闭全部中断。
-------,无效位。
ET2---定时器/计数器2 中断允许位。
ET2=1, 打开T2 中断。
ET2=0,关闭T2 中断。
关,。
ES---串行口中断允许位。
关,。
ES=1,打开串行口中断。
关,。
ES=0,关闭串行口中断。
关,。
ET1---定时器/计数器1 中断允许位。
关,。
ET1=1,打开T1 中断。
ET1=0,关闭T1 中断。
EX1---外部中断1 中断允许位。
EX1=1,打开外部中断1 中断。
EX1=0,关闭外部中断1 中断。
ET0---定时器/计数器0 中断允许位。
ET0=1,打开T0 中断。
EA 总中断开关,置1 为开;EX0 为外部中断0 (INT0) 开关,。
ET0 为定时器/计数器0(T0)开EX1 为外部中断1(INT1)开ET1 为定时器/计数器1(T1)开ES 为串行口(TX/RX)中断开ET2 为定时器/计数器2(T2)开ET0=0,关闭T0 中断。
EX0---外部中断0 中断允许位。
EX0=1,打开外部中断0 中断。
EX0=0,关闭外部中断0 中断。
中断优先级寄存器IP位序号位地址------PS/0 PT1/0 PX1/0 PT0/0 PX0/0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -------,无效位。
PS---串行口中断优先级控制位。
PS=1,串行口中断定义为高优先级中断。
PS=0,串行口中断定义为低优先级中断。
PT1---定时器/计数器 1 中断优先级控制位。
PT1=1,定时器/计数器1 中断定义为高优先级中断。
PT1=0,定时器/计数器 1 中断定义为低优先级中断。
PX1---外部中断 1 中断优先级控制位。
PX1=1,外部中断 1 中断定义为高优先级中断。
PX1=0,外部中断1 中断定义为低优先级中断。
PT0---定时器/计数器0 中断优先级控制位。
PT0=1,定时器/计数器0 中断定义为高优先级中断。
PT0=0,定时器/计数器0 中断定义为低优先级中断。
PX0---外部中断0 中断优先级控制位。
PX0=1,外部中断0 中断定义为高优先级中断。
PX0=0,外部中断0 中断定义为低优先级中断。
定时器/计数器工作模式寄存器TMOD位序号位符号GATE C/T M1 M0 GATE C/T M1 M0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0|---------定时器1-----------------------|-------- ------定时器0----------------------| GATE---门控制位。
GATE=0,定时器/计数器启动与停止仅受TCON寄存器中TRX(X=0,1)来控制。
GATE=1, 定时器计数器启动与停止由TCON 寄存器中TRX(X=0,1)和外部中断引脚(INT0 或INT1)上的电平状态来共同控制。
C/T---定时器和计数器模式选择位。
C/T=1,为计数器模式;C/T=0,为定时器模式。
M1M0---工作模式选择位。
M 1 0 M 工作模式0 0 1 1 位序号符号位TF1 DB70 1 0 1 DB6 DB5方式0,为13 位定时器/计数器方式1,为16 位定时器/计数器方式2,8 位初值自动重装的8 位定时器/计数器方式3,仅适用于T0,分成两个8 位计数器,T1 停止工作DB4 DB3 DB2 DB1 DB0定时器/控制器控制寄存器TCONTR1TF0TR0IE1 /1IT1/P3.3 0/1IE0IT0P3.2TF1---定时器1 溢出标志位。
当定时器1 记满溢出时,由硬件使TF1 置1,并且申请中断。
进入中断服务程序后,由硬件自动清0。
需要注意的是,如果使用定时器中断,那么该位完全不用人为去操作,但是如果使用软件查询方式的话,当查询到该位置1 后,就需要用软件清0。
TR1---定时器1 运行控制位。
由软件清0 关闭定时器1。
当GATE=1,且INIT 为高电平时,TR1 置 1 启动定时器1;当GATE=0 时,TR1 置 1 启动定时器1。
TF0---定时器0 溢出标志,其功能及其操作方法同TF1。
TR0---定时器0 运行控制位,其功能及操作方法同TR1。
IE1---外部中断1 请求标志。
当IT1=0 时,位电平触发方式,每个机器周期的S5P2 采样INT1 引脚(p3.3), 若NIT1 脚为低电平,则置1,否则IE1 清0。
当IT1=1 时,INT1 为跳变沿触发方式,当第一个及其机器周期采样到INIT1 为低电平时,则IE1 置1。
IE1=1,表示外部中断1 正向CPU 中断申请。
当CPU 响应中断,转向中断服务程序时,该位由硬件清0。
IT1 外部中断1 触发方式选择位。
IT1=0,为电平触发方式,引脚INT1 上低电平有效。
IT1=1,为跳变沿触发方式,引脚INT1上的电平从高到低的负跳变有效。
IE0---外部中断0 请求标志,其功能及操作方法同IE1。
IT0---外部中断0 触发方式选择位,其功能及操作方法同IT1。
从上面的知识点可知,每个定时器都有4 种工作模式,可通过设置TMOD 寄存器中的M1M0 位来进行工作方式选择。
方式1 的计数位数是16 位,对T0 来说,由TL0 寄存器作为低8、TH0 寄存器作为高8 位,组成了16 位加1 计数器。
关于如何确定定时器T0 的初值问题。
定时器一但启动,它便在原来的数值上开始加1 计数,若在程序开始时,我们没有设置TH0 和TL0,它们的默认值都是0,假设时钟频率为12MHz,12 个时钟周期为一个机器周期,那么此时机器周期为1us,记16 满TH0 和TL0 就需要 2 -1 个数,再来一个脉冲计数器溢出,随即向CPU 申请中断。
因此溢出一次共需65536us,约等于65.6ms,如果我们要定时50ms 的话,那么就需要先给TH0 和TL0 装一个初值,在这个初值的基础上记__ 个数后,定时器溢出,此时刚好就是50ms 中断一次,当需要定时1s 时,我们写程序时当产生20 次50ms的定时器中断后便认为是1s,这样便可精确控制定时时间啦。
要计__个数时,TH0和TL0中应该装入的总数是__-__=__.,把__对256求模:__/256=60装入TH0中,把__对256求余:__/256=176装入TL0中。
以上就是定时器初值的计算法,总结后得出如下结论:当用定时器的方式1时,设机器周期为TCY,定时器产生一次中断的时间为t,那么需要计数的个数为N=t/TCY ,装入THX和TLX 中的数分别为:THX=(__-N)/256 , TLX=(__-N)%256 x为0或1 中断服务程序的写法void 函数名()interrupt 中断号using 工作组{中断服务程序内容}在写单片机的定时器程序时,在程序开始处需要对定时器及中断寄存器做初始化设置,通常定时器初始化过程如下:(1)对TMOD赋值,以确定T0和T1的工作方式。
(2)计算初值,并将初值写入TH0、TL0或TH1、TL1。
(3)中断方式时,则对IE赋值,开放中断。
(4)使TR0和TR1置位,启动定时器/计数器定时或计数。
例:利用定时器0工作方式1,实现一个发光管以1s亮灭闪烁。
程序代码如下:#includereg52.h#define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() {TMOD=0x01; //设置定时器0位工作模式1(M1,M0位0,1)TH0=(__-__)/256; //装初值11.0592M晶振定时50ms数为__ TL0=(__-__)%256; EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0 while(1) { if(num==20) //如果到了20次,说明1秒时间{led1=~led1; //让发光管状态取反num=0; } } }void T0_time()interrupt 1{TH0=(__-__)/256; //重新装载初值TL0=(__-__)%256; num++; }。