找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2476|回复: 0
打印 上一主题 下一主题
收起左侧

AT89C51单片机中断实验 汇编语言程序

[复制链接]
跳转到指定楼层
楼主
ID:948980 发表于 2021-7-4 12:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(1)基于8051内核单片机(如at89C51等)进行实验
(2)模拟有急救车通过的交通灯控制实验:允许急救车优先通过。当有急救车到达时,两个方向上的红灯亮(可以发光二极管模拟),以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。实验以按键开关为中断申请,表示有急救车通过。
(3)uvision2/4软件平台上编写、调试程序。
(4)Proteus软件平台上仿真。
本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意:第一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验给出的程序中,主程序延时用的是R5、R6、R7,中断延时用的是R3、R4和新的R5。第二,主程序中每执行一步经74LS273的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。还要注意一点,主程序中往端口输出数据操作要先保存再输出,例如有如下操作:
    MOV  A,#0F0H     (0)
    MOVX @R1,A       (1)
    MOV  SAVE,A      (2)
程序如果正好执行到(1)时发生中断,则转入中断程序,假设中断程序返回主程序前需要执行一句MOV  A,SAVE指令,由于主程序中没有执行(2),故SAVE中的内容实际上是前一次放入的而不是(0)语句中给出的0F0H,显示出错,将(1)、(2)两句顺序颠倒一下则没有问题。发生中断时两方向的红灯一起亮10秒,然后返回中断前的状态。
     
图3.1  主程序框图     
图3.2 中断程序框图
    实验步骤
74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273\接片选信号CS2,此时74LS273的片选地址为CFB0H~CFB7H之间任选。单脉冲输出端P-接CPU板上的INT0。
    实验数据分析及处理
烧录
程序运行结果
仿真结果
NAME    T5                    //中断控制实验
OUTPORT EQU    0CFB0H         //端口地址
SAVE    EQU    55H            //保存从端口cfa0输出的数据
CSEG    AT     0000H
        LJMP   START
CSEG AT 0003H
        LJMP   INT
CSEG AT 0100H
START:  SETB   IT0
        SETB   EX0
        SETB   EA
        MOV    A,#11H        //置首显示码
        MOV    SAVE,A        //保存
        ACALL  DISP          //显示输出
        ACALL  DE3S          //延时3秒
LLL:    MOV    A,#12H        //东西路口绿灯亮,南北路口红灯亮
        MOV    SAVE,A
        ACALL  DISP  
        ACALL  DE10S         //延时10秒
        MOV    A,#10H        //东西路口绿灯灭
        MOV    SAVE,A
        ACALL  DISP  
        MOV    R2,#05H       //东西路口黄灯闪烁5次
TTT:    MOV    A,#14H
        MOV    SAVE,A
        ACALL  DISP  
        ACALL  DE02S
        MOV    A,#10H
        MOV    SAVE,A
        ACALL  DISP  
        ACALL  DE02S
        DJNZ   R2,TTT
        MOV    A,#11H       //红灯全亮
        MOV    SAVE,A
        ACALL  DISP  
        ACALL  DE02S        //延时0.2秒
        MOV    A,#21H       //东西路口红灯亮,南北路口绿灯亮
        MOV    SAVE, A
        ACALL  DISP  
        ACALL  DE10S        //延时10秒
        MOV    A,#01H       //南北路口绿灯灭
        MOV    SAVE,A
        ACALL  DISP  
        MOV    R2,#05H      //南北路口黄灯闪烁5次
GGG:    MOV    A,#41H
        MOV    SAVE,A
        ACALL  DISP  
        ACALL  DE02S
        MOV    A,#01H
        MOV    SAVE,A
        ACALL  DISP  
        ACALL  DE02S
        DJNZ   R2,GGG
        MOV    A,#11H      //红灯全亮
        MOV    SAVE,A
        ACALL  DISP  
        ACALL  DE02S       //延时0.2秒
        JMP    LLL         //转LLL循环
DE10S:  MOV    R5,#100     //延时10秒
        JMP    DE1
DE3S:   MOV    R5,#30      //延时3秒
        JMP    DE1
DE02S:  MOV    R5,#02      //延时0.2秒
DE1:    MOV    R6,#200
DE2:    MOV    R7,#126
DE3:    DJNZ   R7,DE3
        DJNZ   R6,DE2
        DJNZ   R5,DE1
        RET
INT:    CLR    EA
PUSH   ACC         //中断处理
        PUSH   PSW
        MOV    A,R5
        PUSH   ACC
        MOV    A,#11H     //红灯全亮,绿、黄灯全灭
        ACALL  DISP  
DEL10S: MOV    R3,#100     //延时10秒
DEL1:   MOV    R2,#200
DEL2:   MOV    R5,#126
DEL3:   DJNZ   R5,DEL3
        DJNZ   R4,DEL2
        DJNZ   R3,DEL1
        MOV    A,SAVE     //取SAVE中保存数据输出到cfa0端口
        ACALL  DISP  
        POP    ACC        //出栈
        MOV    R5,A
        POP    PSW
        POP    ACC
        SETB   EA        //允许外部中断
        RETI
DISP:   MOV    DPTR,#OUTPORT
CPL    A
        MOV   P1,A
        RET
END
以上的Word格式文档51黑下载地址:
实验4(1).docx (348.11 KB, 下载次数: 4)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表