80C51单片机-实验报告

实验一 CPU片内(外)清零

1.CPU片内RAM清零

一、实验目的:

    掌握MCS-51汇编语言的设计,了解单片机的寻址方式以及调试方法。

二、实验内容:

把单片机片内的30H~7FH单元清零。

三、实验框图:

四、实验步骤:

用连续或者单步的方式运行程序,检查30H-7FH执行前后的内容变化。

五、参考实验程序:

程序名称:PNQL.ASM

    ORG 0000H

    JMP MAIN

    ORG 0030H

    MAIN:

    MOV R0,#30H              ;30H送R0寄存器

    CLR1:

    MOV A,#00H               ;00送累加器A

    MOV @R0,A                ;00 送到30H-7FH单元

INC R0                   ;R0加1

CJNE R0,#7FH,CLR1        ;不到7F字节再清

WAIT:

LJMP WAIT

END

六、实验思考:

如果把30H-7FH的内容改为99H,如何修改程序。

2.CPU 片外RAM清零

一、实验目的:

掌握MCS-51汇编语言的设计,了解单片机的寻址方式以及调试方法。

二、实验内容:

    把外部扩展的RAM的0000H-00FFH单元内容清零。

三、实验框图:

四、实验步骤:

    用连续或者单步的方式运行程序,检查0000H-00FFH执行前后的内容变化。

五、参考实验程序:

程序名称:PWQL.ASM

ORG 0000H

MAIN:

     MOV SP,#60H

     MOV DPTR,#0000H                    ;0000H送DPTR寄存器

     MOV R6,#0FFH                       ;FFH送R6寄存器(计数)

CLR1:

     MOV A,#00H                         ;00送累加器A

     MOVX @DPTR,A                       ;00 送到0000H-00FFH单元

     INC DPTR                           ;DPTR+1

     DJNZ R6,CLR1                       ;不到FF个字节再清

WAIT:

     SJMP WAIT

END

六、实验思考:

把1-10先对应存入片内0030H起始的单元内,然后再从片内取出,对应存入片外7FFFH起始的单元中去。

实验二  P1口亮灯实验

一、实验目的:

    学习MCS-51单片机P1口的使用方法

二、实验内容:

       P1口做输出,接8个发光管,编写程序,使得8个二极管循环点亮。

三、实验线路:

四、实验步骤:

       P1口做I/O口,用连线把P1.0~P1.7分别接到电平显示检测口的1~8端。

五、参考实验程序:

程序名称:P1LDSY.ASM

ORG 0000H

TIMER0 EQU 30H

TIMER1 EQU 31H

MAIN: PUSH ACC

      MOV A,#80H

      MOV R0,#08H        ;循环8次

      MOV P1,#00H

 LOOP:

      MOV P1,A

      ACALL DELAY1s

      RR A

      DJNZ R0,LOOP

      MOV P1,#0FFH

      ACALL DELAY1s

      MOV P1,#00H

      ACALL DELAY1s

      MOV P1,#0FFH

      ACALL DELAY1s

      POP ACC

      AJMP MAIN

  延时子程序

DELAY:                          ;延时1ms

       PUSH TIMER0

       PUSH TIMER1

DELAY1: MOV TIMER0,#230         ;循环一次需要4个机器周期,时间为4*1uS

DELAY2: NOP                     ; 1个周期

        NOP                     ; 1个周期

        DJNZ TIMER0,DELAY2      ; 2个周期

        DJNZ TIMER1,DELAY1

        POP TIMER1

        POP TIMER0

        RET

DELAY1S: NOP                    ; 延时1S for 11.0592MHz

         PUSH TIMER1

         MOV TIMER1,#250

         LCALL DELAY

         LCALL DELAY

         LCALL DELAY

         LCALL DELAY            ;共延时4*250*1ms=1s

         POP TIMER1

         RET

      END

六、实验思考:

如果把点亮时间改为4s,如何编写程序。

 

第二篇:第四章-80C51单片机的功能单元

第四章   80C51单片机的功能单元

4·1   80C51的四个 I/O口在使用上有哪些分工和特点?试比较各分工的特点? 试比较各口 的特点?何谓分时复用总线?P3口的第二变异功能有哪些?

:(1)80C51的四个I/O口在使用上的分工和特点

   ① P0口: 可作通用I/O口用,也可作地址/数据线用。作通用I/O口用时,输出级为开漏

极电路,在驱动外部电路时应接上拉电阻;在接有外部存储器时,P0口作地址/数据线用,先输出低8位地址到外部地址锁存器,后输人指令代码或输人/输出数据。

   ② Pl口: 是一个8位准双向口,作通用I/O口用。

   ③ P2口: 是一个8位准双向口,作通用I/O口用。当外部接有存储器时,可用于输出高8位地址。

   ④ P3口: 是一个多功能端口。其基本功能仍然是通用I/O口,使用时与Pl、P2口类似。

其第二功能则是串行口、外部中断线、定时器/计数器的输入及外部数据存储器的选通信号等。

   (2)分时复用总线

    分时复用总线是:在一组总线上,在不同的时间,有时输出地址,有时输人代码或输出/输人数据。

   例如,P0口和P2口就组成了一组地址/数据复用总线。

  (3)P3口的第二变异功能

        第一功能                       第二变异功能

                                串行口:

           P3.0                          RXD(串行输入口)

           P3.1                          TXD(串行输出口)

                                中断:

           P3.2                          INT0外部中断0

           P3.3                          INT1外部中断1

                                定时器/计数器(T0、T1):

           P3.4                          T0(定时器/计数器0的外部输入)

           P3.5                          T1(定时器/计数器1的外部输入)

                                数据存储器选通:

           P3.6                          WR(外部存储器写选通,低电平有效,输出)

           P3.7                          RD(外部存储器读选通,低电平有效,输出)

4·2  80C51端口P0~P3作通用I/O 口时,在输入引脚数据时,应注意什么?

答:p0~p3作通用I/O口在输入引脚数据时,应先用软件向口的输出锁存器写1。

4·3  "读一改一写"指令有何特点? 请至少列出五条不同操作的"读—改一写"指令。

答: (1) "读一改一写"指令的优点

    从I/O口的位结构图中可以看出,有两种读口的操作:一种是读引脚操作,一种是读锁存器操作。

    ①在响应CPU输出的读引脚信号时,端口本身引脚的电平值通过缓冲器BUFl进入内部总线。

    这种类型的指令,执行之前必须先将端口锁存器置1,使A点处于高电平;否则,会损坏引脚,而且也使信号无法读出,已于前述。

    这种类型的指令有:

MOV    A,P1             ;A←P1

MOV    direct, P1         ; direct←Pl

②执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2读入内部,进行修改、改变,然后重新写到锁存器中去,这就是"读一改一写"指令。

这种类型的指令包含所有的口的逻辑操作(ANL、ORL、XRL)和位操作(JBC、CPL、 MOV、SETB、CLR等)指令。  

读锁存器操作可以避免一些错误,如用Pl.X去驱动晶体管的基极。当对Pl.X写人1之

后,晶体管导通。若此时CPU接着读该位引脚的值,即晶体管基极的值时,为0;但是正确的值应该是1,这却可从读锁存器得到。

( 2 )"读一改一写"指令的操作

对口的8位一起操作:

ANL   Pi,A         ;i=0~3

ORL   Pi,A         ;i=0~3

XRL   Pi,A         ;i=0~3

INC   Pi            ;i=0~3

DEC   Pi           ;i=0~3

对口的某一位操作

JBC   Pl.j,label     ;j=0~7

CPL   Pl.j           ;j=0~7

4·4  为什么当P2口作为扩展程序存储器的高8位地址后,就不再适宜作通用I/O了?

答: 在系统中如果外接有程序存储器,由于访问片外程序存储器的连续不断地取指操作,P2

口需要不断送出高位地址,故这时p2口的全部口线均不宜再作I/O口使用。

4·5  80C51单片机内部设有几个定时器/计数器?它们各古由哪些特殊功能寄存器所组成?有哪几种工作方式?简述各种工作方式的功能特点。如何选择?

答:①80C51有两个16位的定时器/计数器T0和Tl。

    ②80C51定时器/计数器的特殊功能寄存器有:

       定时器/计数器方式寄存器TMOD;

       定时器/计数器控制寄存器TCON;

       定时器/计数器数据寄存器THl、TLl、TH0、TL0。

    ③80C51的定时器/计数器有四种不同的工作方式:

    ●方式0:

    TMOD中的Ml=0、M0=0,当计数溢出时,TFX置位。如果中断允许,CPU响应中断并转人中断服务程序,由内部硬件清TFX。TFx也可以由程序查询和清零。

    ●方式1:

    TMOD中的Ml=0、M0=1,当计数时,TFx溢出后向THx进位,THx溢出后将TFx置

位并向CPU申请中断。其他与方式0完全相同。

    ●方式2:

    TMOD中的Ml=l、M0=0,当TLx计数溢出时,一方面将TFx置位,并向CPU申请中

断;另一方面将THx的内容重新装入TLx中,继续计数。重新装入不影响THx的内容,所以可以多次连续装入。方式2对定时控制特别有用,它可实现每个预定时间发出控制信号,而且特别适合于串行口波特率发生器的使用。

    ●方式3:

    TMOD中的Ml=l、M0=1,这种方式是将定时器/计数器T0分为一个8位定时器/计数

器和一个8位定时器,TL0用于8位定时器/计数器,TH0用于8位定时器。定时器/计数器

的工作与方式0相同,只是此时的计数器为8位计数器TL0,它占用了T0的GATE、INT0、

TR0、T0引脚以及中断源等资源。TH0所构成的定时器只能作为定时器用,因为此时的外部引脚T0己为定时器/计数器TL0所占用。不过这时它却占用定时器/计数器Tl的启动/停

止控制位TRl、计数溢出标识位TFl及中断源。

4·6  定时器/计数器作定时用时,定时时间与哪些因素有关?作计数用时,对外界计数频率有何限制?

答:①定时器/计数器作定时用时,其定时时间与下面因素有关:晶体振荡器的频率、机器周

期、计数器的长度、定时器/计数器初值。

    ②用做"计数器"时,对外部输入端T0、Tl上1到0的跳变进行加1计数。在计数状态

下,每个机器周期的S5P2时刻采样外部输入,当第一个机器周期采样为高电平,而在第二个机器周期采样为低电平时,内部计数器加1。新的计数值在紧接着采样到跳变后的下一机器周期的S3P1出现在计数器中。由于检测一个1到0的跳变需要2个机器周期,即24个振荡周期,因此外部计数的最快速率为振荡频率的1/24。外部输入信号的速率向下可以不受限制,但是脉冲宽度必须保证在其电平变化之前能被采样到一次,即至少保持一个完整的机器周期;否则,将会由于采样不到而出现漏计现象。

4·7  定时器 T0为方式 3时,由于 TRl位已被T0占用,如何控制定 时器T1的开启和关闭?

答:在方式3T,Tl己将TFl、TRl资源出借给T0使用了,因此,它自己只能作波特率发生

器使用。

    Tl作波特率发生器时,可以设置成方式0~方式2,用在任何不需要中断控制的场合。作波特率发生器时,常设置成方式2的自动重装状态。

    从题图4-1中可以看出,利用置Tl为定时器方式可以启动波特率发生器;而置Tl为计

数器方式,则可以关闭波特率发生器。

          

     此时,只需要

          MOV   TMOD,#63H      ;初始化

                                    ;设T0为方式3

                                    ;设T1为计数器,方式2

                                    ;关闭T1波特率发生器

          MOV   TL1,#38H         ;置定时常数,即设波特率

          MOV   TH1,#38H

          MOV   TMOD,#23H       ;设T1为定时器,方式2

                                     ;启动T1波特率发生器

4·8  在 80C51单片机系统中,己知时钟频率为 6MHZ,选用定时器T0设置方式 3,请编程使 Pl.0和 Pl.1口分别输出周期为 1ms和 400us的方波。

答:以定时器T0设置方式3:TL0和TH0作为两个8位定时器,产生500us和200us的定

时中断,即可使Pl.0和Pl.1口分别输出周期为lms和400us的方波。

    ①时间常数的计算:

    振荡器的频率f osc=6MHz=6×106Hz,方式3计数器长度L=8,28=256。

●定时时间    T=500us=500×10-6s

                          f osc × T           6×106×500×10-6

 定时常数    TC =2L—                  =256—                                    =256—250=6

                             12                    12

 ●定时时间    T=200us=200×10-6s

                          f osc × T         6×106×200×10-6

 定时常数   TC =2L—                    =256—                                =256—100=56=38H

                             12                 12

    ②P1.0和P1.1口分别输出周期为1ms和400us 的方波的程序:

 ORG     000BH

AJMP     IT0P

ORG     001BH

AJMP     IT1P

  ;

ORG      100H

START:MOV     SP,#60H      ;设栈指针

ACALL   PTOM3      ;调定时器初始化程序

PTOM3:MOV    TMOD,#03H   ;定时器初始化,设T0为方式3

MOV    TL0,#6

MOV    TH0,#38H

SETB    TR0           ;定时开始

SETB    ET0          ;开中断

SETB    EA

RET

IT0P:  MOV      TL0,#6H    ;TL0定时器中断程序

        CPL       P1.0        

 RETI

          ;


IT1P:   MOV     TH0,#38H    ;TH0定时器中断程序

         CPL       Pl.1

RETI

4·9  用80C51的定时器测量某正单脉冲的宽度,采用何种方式可得到最大量程?若时钟频率为6MHZ,求允许测量的最大脉冲宽度是多少?

答:①设置:将外部脉冲引至INT0引脚上,设T0为定时器方式,并设T0为方式l,GATE程控为l,TR0为1。

一旦INT0 (P3.2)引脚上出现高电平,定时器即开始定时,也就是它开始对时钟的机器周期进行计数,直至高电平出现。此时读出T0值即可。

TMOD的设定(即控制字):

   

控制字为#09H。

初值为TH0=#00H,TL0=#00H。

②编程:

;脉冲宽度在R3(高字节)、R4(低字节)

START: MOV    TMOD,#09H          ;控制字

MOV    TL0,#00H             ;定时常数

MOV    TH0,#00H

WAITl: JB       P3.2,WAITl            ;等待INT0变低

SETB    TR0                   ;启动定时器T0计数(机器周期数)

WAIT2: JNB     P3.2,WAIT2             ;等待INT0变高(正脉冲到来)

WAIT3: JB      P3.2,WAIT3            ;等待INT0变低

CLR    TR0                    ;定时器停止计数

MOV    A,TL0                  ;先读低位

MOV   R4,A                   存人R4中

MOV   A,TH0                   ;再读高位

MOV   R3,A

RET

③由于定时器方式1的长度为16位,其最大计数值为216=65535,即正脉冲的宽度最大值不能超过65535个机器周期。

如果时钟频率为6MHz,允许测量的最大脉冲宽度是:65535×2us=131.070ms。

4·10  80C51的串行口有几种工作方式及其功能特点?如何选择和设定?

答:在串行口控制寄存器SCON中的SM0和SMl位决定串行口的工作方式;SM2位决定串行口应用于多处理机通信方式。

    (1)方式0

    当SMO=0,SMl=0时,串行口选择方式0。这种工作方式实质上是一种同步移位寄存

器方式。

    方式0时,数据传输波特率固定为1/l2fosc。数据由RXD(P3.0)引脚输入或输出,同步

移位时钟由TXD(P3.1)引脚输出。接收/发送的是8位数据,传输时低位在前。

    帧格式如下:

        

    (2)方式1

    当SMO=0.SMl=1时,串行口选择方式1。方式1时,数据传输波特率由定时器/计数

器Tl和T2的溢出决定,可用程序设定。

    由TxD(P3.1)引脚发送数据,由RXD(P3.0)引脚接收数据。

    发送或接收一帧信息为10位,1位起始位(0)、8位数据位和1位停止位(1)。

帧格式如下:

    (3)方式2和3

    当SM0=l,SMl=0时,串行口选择方式2;当SM0=l,SMl=1时,串行口选择方式3。

    方式2和3的区别在于它们波特率产生方式不同。方式2的波特率是固定的,为振荡器

频率的1/32 fosc或1/64 fosc ;方式3的波特率则由定时器/计数器Tl和T2的溢出决定,可用

程序设定的。

    由TYD(P3.1)引脚发送数据,由RXD(P3.0)引脚接收数据。

    发送或接收一帧信息为11位,1位起始位(0)、9位数据位和1位停止位(1),

 帧格式如下:

              

(4)多处理机通信方式

在串行口控制寄存器SCON中,设有多处理机通信位SM2(SCON.5)。

当串行口以方式2或方式3接收时,若SM2=1,如果接收到的第9位数据(RB8)为l,才将数据送人接收缓冲器SBUF,并RI置1发中断;否则,数据将丢失。若SM2=0,则无论第9位数据(RB8)是1还是0,都能将数据装人SBUF,并且发中断。利用这一特性,便可实现主机与多个从机之间的串行通信。

4·11  何谓波特率、溢出率?如何计算和设置 80C51串行通信的波特率?

答:1·波特率、溢出率

    波特率(Baudrate)是指每秒钟传输的数据位数,波特率发生器用于控制串行口的数据传

输速率。溢出率是指某定时器每秒钟溢出的次数,亦即定时器定时时间的倒数。

    2·波特率的计算和设置

    (1)串行口方式0时的波特率

由振荡器的频率(fosc)所确定:

                              fosc

波特率=

                          12

(2)串行口方式2时的波特率

由振荡器的频率(fosc)和SMOD(PCON.7)所确定

 fosc          2SOMD

波特率=       ×

                         32         2

                        f osc                                         f osc 

当SMOD=l时,波特率=        ;当SMOD=0时,波特率=          。

                             32                             64                         

   

    (3)串行口方式1和3时的波特率

    由定时器Tl和T2的溢出率和SMOD(PCON.7)所确定。定时器Tl和T2是可编程

的,可选择的波特率范围比较大,因此,串行口的方式1和3是最常用的工作方式。

    ①用定时器Tl(C/T=O)产生波特率时:

                              2SMOD

                     波特率=         ×定时器Tl的溢出率

                               32

定时器Tl的溢出率与它的工作方式有关:

●定时器Tl工作于方式0: 此时定时器Tl相当于一个13位的计数器。

                                  f osc        1

                         溢出率=      ×                          

                                  12     [213 – TC+X]

      式中: TC ——13位定时器定时常数(初值);

           X —— 中断服务程序的机器周期数,在中断服务程序中重新对定时器置数。

●定时器Tl工作于方式1: 此时定时器Tl相当于一个16位的计数器。

                                  f osc        1

                         溢出率=      ×                          

                                  12     [216 – TC+X]

●定时器Tl工作于方式2: 此时定时器Tl工作于一个8位可重装的方式,用TLl计

       数,用THl装初值。

                                  f osc        1

                         溢出率=      ×                          

                                  12     [28 –(TH1)]

     方式2是一种自动重装方式,无需在中断服务程序中送数,没有由于中断引起的误差,也应禁止定时器Tl中断。

     这种方式用于波特率设定最为有用。

    ②用定时器T2(80C52)产生波特率时:

                          波特率=(1/16)×定时器T2的溢出率

                                    f osc            1

                           溢出率 =      ×                                                                      

2      [216一(RCAP2H,RCAP2L)]                                         

式中: (RCAP2H.RCAP2L)为定时器T2中,16位寄存器的初值(定时常数)。

4·12  为什么定时器Tl用做串行口波特率发生器时,常采用方式2? 若己知系统时钟频率和通信波特率,如何计算其初始值?

答:①定时器Tl用做串行口波特率发生器时,常采用方式2的原因是:

    定时器Tl工作于方式2是一种自动重装方式,无需在中断服务程序中送数,没有由于中断引起的误差,也应禁止定时器Tl中断。采用方式2是一种既省事又精确的产生串行口波特率的方法。

    ②若已知系统时钟频率和通信波特率,计算其初始值:

以串行口采用方式1或3,波特率发生器采用定时器Tl的方式2为例。

                             2SMOD

                     波特率=         ×定时器Tl的溢出率

                               32                                           

                               f osc        1

                     溢出率=      ×                                                                           

                           12     [28 –(TH1)]                        

              2SMOD        f osc             1

      波特率=        ×         ×                                          

               32           12    [28 –(TH1)]                                                      

                    2SMOD      f osc          1                               

       TH1=2- (                ×     ×            )                            

                 32        12      波特率 

将计算出的数值送人THl和TLl即可。

 

4·13   某异步通信接口,其帧格式由一个起始位 0、七个数据位、一个奇偶校验位和一位停止位1所组戎,当该口每分钟传送 1800个字符时,计算其传送波特率。

答: 帧格式由一个起始位0、七个数据位、一个奇偶校验位和一位停止位1所组成,即每帧为10位。

     每分钟传送1800个字符时,每字符发送的位数为10位,则每分钟发送的总位数为

18000。

     传送波特率应为:

18000/60 =300 b/s

4·14  在 80C51的应用系统中时钟频率为 6MHZ,现需利用定时器Tl产生波特率为1200             

       波特。请计算初值,实际得到的波特率误差是多少?

答: 以串行口采用方式1或3,波特率发生器采用定时器Tl的方式2为例。

              2SMOD        f osc             1                               

      波特率=        ×         ×                                          

               32           12      [28 –TC]                                

                

                               

2SMOD      f osc          1                               

      TC =2- (                   ×     ×            ) =                            

                 32        12      波特率 

       256 - (1/32)×(6×106/12)×(1/1200)=256 – 13=0F3H

其中设SMOD=l。

根据初值Tc=243,计算波特率的实际值为:

              2SMOD        f osc             1                               

      波特率=        ×         ×             = 1201.92                            

               32           12      [28 –TC]   

误差=1201.92-1200=1.92

                       

4·15  80C51有几个中断源,各中断标志是如何产生的,又如何复零的? CPU响应中断时,其中断入口地址各是多少?

答:(1)80C51的中断源

    ①80C51中有五个中断源;80C52中增多了一个中断源一一定时器/计数器T2,即有六个

中断源。80C51的五个中断源是:

    ●INT0(P3.2)  ——  外部中断0。

    当IT0(TCON.0)=1时,低电平有效;当IT0(TCON.0)=0时,下降沿有效。

    ●INTl(P3.3)  ——   外部中断1。

    当ITl(TCON.2)=1时,低电平有效;当TTl(TCON.2)=0时,下降沿有效。

    ●TF0(P3.4)  ——  定时器/计数器T0溢出中断。

    ●TFl(P3.5)  ——   定时器/计数器Tl溢出中断。             

    ●RX,TX  ——    串行中断。

    ②中断标志的产生和复零:

    ●Tl溢出中断标志:TFl(TCON.7)。

    Tl计数溢出。硬件置位,响应中断时,硬件复位。不使用中断时用软件清0。

    ●T0溢出中断标志:TF0(TCON.5)。

    T0计数溢出。硬件置位,响应中断时,硬件复位。不使用中断时用软件清0。

    ●外部中断1中断标志:IEl(TCON.3)。

    当CPU采样到INT1端出现有效中断请求时,TEl位硬件置1;响应中断后,转向中断服务时,硬件复位。

    ●外部中断0中断标志:IE0(TCON.l)。

当CPU采样到INT0端出现有效中断请求时,IE0位硬件置1;响应中断后,转向中断服务时,硬件复位。

    ●串行中断发送中断标志:TI(SCON.l)。

    发送完一帧,硬件置位;响应中断后,必须软件清0。

    ●串行中断接收中断标志:RI(SCON.O)。

    接收完一帧,硬件置位;响应中断后,必须软件清0。

    (2)中断入口地址

                中断源                    中断入口地址

外部中断0(INT0)                 0003H

定时器/计数器0(T0)               000BH

外部中断1(INTl)                  0013H

定时器/计数器1(T1)               00lBH

串行口(RI、TI)                    0023H

    

4·16 如何估算最快的中断响应时间?

答:(1)中断响应过程

中断响应过程的时序如题图4-2所示。

题图  4-2

    ①在每个机器周期的S5P2期间,各中断标志采样相应的中断源。CPU则在下一机器周

期的S6期间按优先级的顺序查询各中断标志。若查询到某中断标志为1,则按优先级的高低进行处理,即响应中断。

    ②响应中断后,执行硬件生成的长调用指令"LCALL",将程序计数器PC的内容压入堆

栈保护,先低位地址,后高位地址,栈指针加2。

    ③将对应中断源的中断矢量地址装人程序计数器PC,使程序转向该中断矢量地址,去执行中断服务程序。

    ④中断服务程序由中断矢量地址开始执行,直到遇到RETI指令为止。

    ⑤执行RETI指令,撤销中断申请,弹出断口地址进入PC,先弹出高位地址,后弹出低位地址,栈指针减2,恢复原程序的执行。

    (2)中断响应时间

    中断响应时间是指从中断有效(对应标志位置1)到转向中断入口地址所需要的时间。

    80C51单片机的最快的中断响应时间为三个机器周。其中,中断请求标志位查询占一个

机器周期,而这个机器周期又恰好是指令的最后一个机器周期。在这个机器周期结束后,中断即被响应,产生"LCALL"指令。执行这条长调用指令需两个机器周期。这样,中断响应共经历了一个查询机器周期和两个"LCALL"指令执行机器周期,总计三个机器周期。

4·17  外部中断请求有哪两种触发方式?对跳变触发和电平触发信号有什么要求? 如何选择和设置?

答:(1)外部中断请求的触发方式

    INT0、INT1的中断触发方式有两种:

    ①电平触发方式,低电平有效。

    ②跳变触发方式,电平发生由高到低的跳变时触发。

    (2)对跳变触发和电平触发信号的要求

    由于CPU每个机器周期采样INT0、INT1引脚信号一次,为确保中断请求被采样到,外部中断源送INT0、INT1引脚的中断请求信号应至少保持一个机器周期。如果是跳变触发方式,外部中断源送INT0、INT1脚的中断请求信号高、低电平应至少各保持一个机器周期,才能确保CPU采集到电平的跳变。如果是电平触发方式,则外部中断源送INT0、INT1引脚请求中断的低电平有效信号,应一直保持到CPU响应中断为止。

    (3)触发方式的选择和设置

    这两种触发方式可由设置TCON寄存器中的ITl((TCON.2)、IT0((TCON.0)中断申请

触发方式控制位来选择:

    ①设置ITl、IT0=0,选择电平触发方式。

②设置ITl、IT0=1,选择跳变触发方式,即当INT0、INT1引脚检测到前一个机器周期为高电平、后一个器周期为低电平时,则置位IE0、IEl,向CPU申请中断。

4·18  80C51提供哪几种中断? 在中断管理上有何特点? 什么是同级内的优先权管理? 中断请求被封锁的条件有哪些?

答:(1)80C51提供的中断

    80C51提供的中断有五种: 外部中断0、外部申断1、定时器/计数器T0溢出中断、定时器/计数器Tl溢出中断和串行中断。

    (2)在申断管理上的特点

    在中断执行过程中,中断管理的原则是:

    ①高中断优先级可以中断低中断优先级的中断过程。但是,若在中断服务程序中,关掉

所有中断(CLR  EA)或关掉部分中断时除外。

    ②低中断优先级不能申断高中断优先级的中断过程。

    ③同级别的中断不能相互中断。

    (3)同级内的优先权管理

    如果几个同级的中断源同时向CPU申请中断时,CPU通过内部硬件查询按自然优先级

确定该响应哪个中断请求。其自然优先级由硬件形成,排列如下:

中断源                          同级优先级

INT0                              最高级

T0

INT1

T1

串行口                             最低级

    (4)中断请求被封锁的条件

    在接受中断申请时,如遇下列情况,硬件生成的长调用指令"LCALL"将被封锁:

    ①正在执行同级或高一级的中断服务程序。

    ②当前周期不是执行当前指令的最后一个周期; 当前正在执行RETI指令或执行对IE、

IP的读/写操作指令。

相关推荐