实验十一P1口及外部中断
一、实验目的
1.掌握利用MCS-51单片机P1口实现I/O的三种传送方式。
2.掌握MCS-51单片机外部中断源的原理和编程方法。
3.了解MCS-51单片机处理外部中断的全过程。
4.弄懂外部中断触发方式的选择。
二、实验要求
熟练掌握结合DP-51PROC单片机综合仿真实验仪和Kiel C51 集成开发环境进行仿真调试。
三、实验内容及实验电路
1、P1口无条件输出实验,电路图图3-1所示。
图3-1 P1口无条件输出
实验参考程序1:8个LED 灯同时闪亮。
ORG 8000H
LJMP Main
ORG 80F0H
Main:
MOV R7, #0
Loop:
MOV R6, #0
DJNZ R6, $
DJNZ R6, $
DJNZ R6, $
DJNZ R6, $
DJNZ R7, Loop
CPL P1.0 ; P 1 .0 取反
CPL P1.1 ; P 1 .1 取反
CPL P1.2 ; P 1 .2 取反
CPL P1.3 ; P 1 .3 取反
CPL P1.4 ; P 1 .4 取反
CPL P1.5 ; P 1 .5 取反
CPL P1.6 ; P 1 .6 取反
CPL P1.7 ; P 1 .7 取反
SJMP Main
END
2、P1口条件输出实验,电路如图3-2所示。
图3-2 P1口条件输出
实验参考程序2:
ORG 8000H
LJMP Main
ORG 8100H
Main:
JB P1.7,SETLED
CLRLED:
CLR P1.0
CLR P1.1
CLR P1.2
CLR P1.3
CLR P1.4
CLR P1.5
CLR P1.6
SJMP Main
SETLED:
SETB P1.0
SETB P1.1
SETB P1.2
SETB P1.3
SETB P1.4
SETB P1.5
SETB P1.6
SJMP Main
END
3、P1口中断输入/输出实验,电路如图3-3所示。
图3-2 P1口中断输入/输出
实验参考程序3:
ORG 8000H
LJMP Main
ORG 8003H
LJMP INT0SV
Main:
MOV SP, #5FH
SETB EA
SETB IT0
SETB EX0
SJMP $
INT0SV:
MOV P1,#0FFH
MOV A,P1
SWAP A
MOV P1,A
RETI
END
四、实验步骤
实验内容1:P1口无条件输出实验
1.断开DP-51PROC实验仪的电源,按图3-1接线,使用排线将A2区的J61接口与
D1区的J52接口相连。
2.接通DP-51PROC实验仪的电源,将TKSMonitor51 仿真器上的工作模式选择开关
拨到RUN处。
3.建立名为P1_wtjio工程,按实验参考程序1编辑新文件,文件名为:p1_wtj.asm。
然后编译,无误转换为调试方式,运行程序,观察并记录运行结果。
同时闪亮
实验内容2:P1口条件输出实验
1、断开DP-51PROC实验仪的电源,按图3-2接线,使用排线将A2区的J61接口与
D1区的J52接口相连,使用导线把A2区的P1.7与D1区J54的SW1相连。
2、接通DP-51PROC实验仪的电源,将TKSMonitor51 仿真器上的工作模式选择开关
拨到RUN处。
3、建立名为P1_tjio工程,按实验参考程序2编辑新文件,文件名为:p1_tj.asm。
然
后编译,无误转换为调试方式,预先将SW1置1或置0,运行程序,观察并记录
运行结果。
底色
实验内容3:P1口中断方式输入/输出实验
1、断开DP-51PROC实验仪的电源,按图3-3接线,使用导线将A2区的P10、P11、
P12分别与D1区的SW1、SW2 、SW3相连,使用导线把A2区INT0与D1区
J53的KEY1(图3-3中的K1即为D1区的K1)相连。
2、接通DP-51PROC实验仪的电源,将TKSMonitor51 仿真器上的工作模式选择开关
拨到RUN处。
3、建立名为P1_zdio工程,按实验参考程序3编辑新文件,文件名为:p1_zd.asm。
然后编译,无误转换为调试方式,预先置好开关的状态,运行程序,观察中断的执行过程,并记录运行结果。
五、思考题
1如何将P1口无条件输出的实验,修改为将8个L ED发光二极管向左或向右循环点亮?
ORG 0000H
LJMP MAIN
ORG 000BH
MAIN:CLR P0.0
ACALL DEL
SETB P0.0
CLR P0.1
ACALL DEL
SETB P0.1
CLR P0.2
ACALL DEL
SETB P0.2
CLR P0.3
ACALL DEL
SETB P0.3
CLR P0.4
ACALL DEL
SETB P0.4
CLR P0.5
ACALL DEL
SETB P0.5
CLR P0.6
ACALL DEL
SETB P0.6
CLR P0.7
ACALL DEL
SETB P0.7
SJMP MAIN
DEL: MOV R7,#0FFH
DEL1: MOV R6,#0FFH
DJNZ R6,$
DJNZ R6,$
DJNZ R6,$
DJNZ R6,$
DJNZ R7,DEL1
RET
END
2如何利用I N T0中断使P1口控制8个L E D发光二极管向左或向右循环点亮?电路如何修改?程序如何修改?
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0SV
MAIN: MOV SP,#5FH
SETB EA
SETB IT0
SETB EX0
SJMP $
INT0SV: MOV SP,#5FH
CLR EA
PUSH ACC
PUSH 01H
SETB EA
MOV P1,#0FFH MOV R1,#0AH LN: CLR P0.0
ACALL DEL
SETB P0.0
CLR P0.1
ACALL DEL
SETB P0.1
CLR P0.2
ACALL DEL
SETB P0.2
CLR P0.3
ACALL DEL
SETB P0.3
CLR P0.4
ACALL DEL
SETB P0.4
CLR P0.5
ACALL DEL
SETB P0.5
CLR P0.6
ACALL DEL
SETB P0.6
CLR P0.7
ACALL DEL
SETB P0.7
DJNZ R1,LN
CLR EA
POP 01H
POP ACC
SETB EA
RETI
DEL: MOV R7,#0FFH DEL1: MOV R6,#0FFH
DJNZ R6,$
DJNZ R6,$
DJNZ R6,$
DJNZ R6,$ DJNZ R7,DEL1 RET
END。