哈工程-实验二_单片机P1口输入输出及中断实验
实验二 单片机P1口输入输出及外部中断实验 一、实验目的
1、学习P1口的使用
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
。
2、学习延时子程序的编写和使用。
3、熟练在汇编软件环境下编写、修改、调 试、和运行硬件程序
4、熟悉汇编语言
5、学习外部中断技术的基本
使用方法
消防栓的使用方法指针万用表的使用方法84消毒液使用方法消防灭火器使用方法铁材计算器使用方法
。
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、第2个实验在每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果;
3、改变流水灯的运行方向;
4、改变流水灯的运行模式,双灯对跑,双灯一起跑。
5、如果LED灯为低电平点亮,如何改动。
6、把实验改为int1中断,需要改动几处,如何改动。
7、把实验改为同时int0和int1中断驱动2个灯,需要改动几处,如何改动。 六、源程序修改原理及其仿真结果
流水灯实验1:
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
思考题一:修改延时子程序
查指令表可知MOV和DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周
期时间长度为12/6MHZ,所以上面延时子程序该的执行时间为:
(256×255+2)×2×12?6? 261ms=0.261s 在ms级别上人眼是无法区别快慢的,所以
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
增加延时到s级别以区别于ms,即此延时级
别上增加十倍,修改程序如下
Delay:
mov r6, #0
mov r7, #0
mov r5, #0Ah
DelayLoop:
djnz r6, DelayLoop
djnz r7, DelayLoop
djnz r5, DelayLoop
ret
end
修改后的仿真结果为 实现了秒级别的延时。 思考题三:改变流水灯的运行方向
修改程序如下: Loop: mov a, #01h
mov r2, #8
Output:
mov P1, a
rr a
call Delay
djnz r2, Output
Ljmp Loop
思考题四:改变流水灯的运行模式,双灯对跑,双灯一起跑
修改为双灯对跑:
Loop:
mov r0,#01h
mov r1,#80h
mov r2, #4 ;若改为8可以实现相对点亮然后相反点亮的循环
Output:
mov a,r0
add a,r1
mov P1, a ;由于只有a可以实现移位功能,故用r0和r1将数据暂存,然
后分别实现移位后相加移入a再赋值,以实现双灯对跑
mov a,r0
rl a
mov r0,a
mov a,r1
rr a
mov r1,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, #11h
mov r2, #8
Output:
mov P1, a
rl a
call Delay
djnz r2, Output
Ljmp Loop
流水灯实验2:
思考题二:每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果
KeyLeft equ P1.0
KeyRight equ P1.1
LedLeft equ P1.2
LedRight equ P1.3
SETB KeyLeft
SETB KeyRight Loop:
MOV C,KeyLeft
Call Delay ;在读入数据与传送数据间增加延时,观察控制效果
MOV LedLeft,C
MOV C,KeyRight
Call Delay
MOV Ledright,C
LJMP Loop
Delay:
mov r6, #0
mov r7, #0
mov r5, #0Ah ;若效果不明显可以增大倍数或者减小倍数
DelayLoop:
djnz r6, DelayLoop
djnz r7, DelayLoop
djnz r5, DelayLoop
ret
end
思考题五:如果LED灯为低电平点亮应如何改动
若LED灯为低电平点亮则只需将赋值中的0和1对换,如源程序中的a赋值为01h,
然后对它进行移位再赋值,此时就应该改为赋值feh,然后移位时候相当于移的是0信号,
让各个口循环出现低电平,以实现点亮LED灯。其他点亮方式同理。
思考题六:把实验改为int1中断,需要改动几处,如何改动
LED equ P1.0
LEDBuf equ 0
ljmp Start
org 13h ;13h为中断1的入口地址
Interrupt1: ;改为中断1的中断子程序
push PSW ; 保护现场
cpl LEDBuf ; 取反LED
mov c, LEDBuf
mov LED, c
pop PSW ; 恢复现场
reti
org 100H
Start:
clr LEDBuf
clr LED
mov TCON, #00000100
; 外部中断1下降沿触发
mov IE, #10000100
; 打开外部中断允许位(EX1)及总中断允许位 (EA)
ljmp $
end ;硬件接口要改变,单脉冲要接P3.3 思考题七:把实验改为同时int0和int1中断驱动2个灯,需要改动几处,如何改动
LED equ P1.0
LED2 equ P1.1
LEDBuf equ 0
LEDBuf2 equ 0 ;增加P1.1灯对应的参数 ljmp Start
org 3
Interrupt0:
push PSW ; 保护现场 cpl LEDBuf ; 取反LED mov c, LEDBuf
mov LED, c
pop PSW; 恢复现场
reti
org 13h
Interrupt1:
push PSW cpl LEDBuf2 mov c, LEDBuf2 mov LED2, c
pop PSW reti ;增加INT1中断子程序,使两个中断互不干扰 org 100H
Start:
clr LEDBuf
clr LED
clr LEDBuf2
clr LED2
mov TCON, #00000101 ; 外部中断1和中断0下降沿触发
mov IE, #10000101 ; 打开外部中断允许位及总中断允许位(EA)
ljmp $
end
单片机实验报告
姓名,王智浩
班级,20100822
学号,2010082209
指导老师,李北明
2013.7