实验二 单片机P1口输入输出及中断实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二单片机P1口输入输出及外部中断实验

一、实验目的

1、学习P1口的使用方法。

2、学习延时子程序的编写和使用。

3、熟练在汇编软件环境下编写、修改、调试、和运行硬件程序

4、熟悉汇编语言

5、学习外部中断技术的基本使用方法。

6、学习中断处理程序的编程方法。

二、实验说明

1、P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

2、P1.0,P1.1作输入口接两个拨动开关,P1.2,P1.3作输出口,接两个发光二极管,编写程序读取开关状态,将此状态,在发光二极管上显示出来。编程时应注意P1.0,P1.1作为输入口时应先置1,才能正确读入值。

3、用单次脉冲申请中断,在中断处理程序中使P1.0的输出状态发生反转,并通过发光二极管观察P1.0的电平。

三、实验仪器

计算机

伟福软件(lab2000P )

四、实验内容

1、P1口是准双向口。它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。

2、8051延时子程序的延时计算问题,计算和估算延时子程序的时间。

3、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。

4、必须在中断程序中设定是否允许中断重入,即设置EXO位。

5、本例中使用了INTO中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的中断程序保护了PSW,ACC等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。

五、思考题

1、改变延时时间,变快或者变慢,观察效果;

2、改变流水灯的运行方向;

3、改变流水灯的运行模式,双灯对跑,双灯一起跑。

4、如果LED灯为低电平点亮,如何改动。

5、把实验改为int1中断,需要改动几处,如何改动。

6、把实验改为同时int0和int1中断驱动2个灯,需要改动几处,如何改动。

六、源程序修改原理及其仿真结果

流水灯实验:

原程序:

Loop:

mov a, #01h

mov r2, #8

Output:

mov P1, a

rl a ;循环左移,使流水灯从右向左依次点亮。

call Delay

djnz r2, Output

ljmp Loop

Delay:

mov r6, #0

mov r7, #0

DelayLoop:

djnz r6, DelayLoop

djnz r7, DelayLoop

ret

end

修改一:改变延时时间,是流水灯变慢;是流水灯向右运行(思考题一和二)。

Loop:

mov a, #01h

mov r2, #8

Output:

mov P1, a

rr a ; 循环右移,使流水灯从左向右依次点亮。

call Delay

djnz r2, Output

ljmp Loop

Delay:

mov r6, #0

mov r7, #0

mov r5, #2 ; 改变延时时间,通过寄存器r5使延时变长。

DelayLoop:

djnz r6, DelayLoop

djnz r7, DelayLoop

djnz r5, DelayLoop

ret

end

修改二:流水灯双灯对跑;改变延时时间,使其小于上一个程序(思考题一和三)。

Loop:

mov r0, #01h

mov r1, #80h ; r0和r1分别表示一个灯。

mov r2, #8

Output:

mov a, r0

add a, r1 ; r0、r1相加实现双灯对跑。

mov P1, a

mov a, r0

rl a

mov r0, a ; r0表示灯向左运行。

mov a, r1

rr a

mov r1, a ; r1表示灯向右运行。

call Delay

djnz r2, Output

ljmp Loop

Delay:

mov r6, #0fh

mov r7, #06

mov r5, #2 ; 通过调整r5、r6、r7的值改变延时时间。

DelayLoop:

djnz r6, DelayLoop

djnz r7, DelayLoop

djnz r5, DelayLoop

ret

end

思考题四:在给a 赋值时,改为mov a, #FEh,使得LED灯在低电平时点亮。

中断实验:

原程序:

LED equ P1.0

LEDBuf equ 0

ljmp Start

org 3

Interrupt0:

push PSW ; 保护现场

cpl LEDBuf ; 取反LED

mov c, LEDBuf

mov LED, c

pop PSW ; 恢复现场

reti

org 100H

Start:

clr LEDBuf

clr LED

mov TCON, #01h ; 外部中断0下降沿触发

mov IE, #81h ; 打开外部中断允许位(EX0)及总中断允许位(EA)

ljmp $

end

修改一:在原程序基础上改为外部中断1驱动LED灯。

LED equ P1.0

LEDBuf equ 0

ljmp Start

org 13h ; 中断入口地址改为外部中断1的地址13h Interrupt0:

相关文档
最新文档