本帖最后由 时光无痕 于 2017-12-22 20:05 编辑
硬件实验十一 外部中断实验(51/96) 姓名:袁*杰 学号:1517623
一、实验要求
用单次脉冲申请中断,在中断处理程序中对输出信号进行反转。
二、实验目的
1、学习外部中断技术的基本使用方法。
2、学习中断处理程序的编程方法。
三、实验电路及连线
连线
| 连接孔 1
| 连接孔 2
| 1
| P1.0
| L0
| 2
| 单脉冲输出
| INT0 (51 系列)
| 2
| 单脉冲输出
| EINT (96 系列)
|
四、实验说实明
中断服务程序的关键是:
1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2.必须在中断程序中设定是否允许中断重入,即设置 EXO 位。
3.对于 80C196,要选择相应的中断源,并设置中断屏蔽寄存器的相应位。
本例中使用了 INTO 中断(80C196 为EXTINT 中断),一般中断程序进入时应保护 PSW,
ACC 以及中断程序使用但非其专用的寄存器。本例的中断程序保护了 PSW,ACC 等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。
INTO(P32)端(80C196 为 EINT 端)接单次脉冲发生器。P1.0 接 LED 灯,以查看信号反转.
五 实验框图:
+
单片机源程序如下:
- COUNT_INT EQU 30H
- LEDVALUE EQU 31H
- ORG 0000H
- LJMP START
- ORG 001BH
- LJMP Timer1Interrupt
-
- START:
- MOV SP,#60H
- MOV COUNT_INT,#0
- MOV LEDVALUE,#01H
- LCALL InitTimer1
-
- LOOP:
- MOV A,LEDVALUE
- MOV P2,A
- LJMP LOOP
-
- InitTimer1:
- MOV TMOD,#10H;定时器T1为工作方式1,产生50ms定时
- MOV TH1,#3CH
- MOV TL1,#0B0H
- SETB EA
- SETB ET1
- SETB TR1
- RET
-
- Timer1Interrupt:
- PUSH DPH
- PUSH DPL
- PUSH ACC
- MOV TH1,#3CH
- MOV TL1,#0B0H
- ;========================
- INC COUNT_INT
- MOV A,COUNT_INT;每50ms加1,
- CJNE A,#2,Timer1Interrupt_EXIT;100ms
- MOV COUNT_INT,#0
- MOV A,LEDVALUE
- RL A
- MOV LEDVALUE,A
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
外部中断.docx
(24.59 KB, 下载次数: 18)
|