单片机P1口输入输出与中断实验Word格式文档下载.docx
- 文档编号:19191938
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:118.13KB
单片机P1口输入输出与中断实验Word格式文档下载.docx
《单片机P1口输入输出与中断实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机P1口输入输出与中断实验Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
1、P1口是准双向口。
它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。
若不先对它置“1”,读入的数据是不正确的。
2、8051延时子程序的延时计算问题,计算和估算延时子程序的时间。
3、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
4、必须在中断程序中设定是否允许中断重入,即设置EXO位。
5、本例中使用了INTO中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。
本例的中断程序保护了PSW,ACC等三个寄存器并且在退出前恢复了这三个寄存器。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
5、思考题
1、改变延时时间,变快或者变慢,观察效果;
2、第2个实验在每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果;
3、改变流水灯的运行方向;
4、改变流水灯的运行模式,双灯对跑,双灯一起跑。
5、如果LED灯为低电平点亮,如何改动。
6、把实验改为int1中断,需要改动几处,如何改动。
7、把实验改为同时int0和int1中断驱动2个灯,需要改动几处,如何改动。
6、源程序修改原理及其仿真结果
流水灯实验1:
Loop:
mova,#01h
movr2,#8
Output:
movP1,a
rla
callDelay
djnzr2,Output
LjmpLoop
Delay:
movr6,#0
movr7,#0
DelayLoop:
djnzr6,DelayLoop
djnzr7,DelayLoop
ret
end
思考题一:
修改延时子程序
查指令表可知MOV和DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周期时间长度为12/6MHZ,所以上面延时子程序该的执行时间为:
(256×
255+2)×
2×
12÷
6≈261ms=0.261s
用软件仿真将晶振频率设为6MHz时仿真结果为
与计算结果基本一致。
在ms级别上人眼是无法区别快慢的,所以设计增加延时到s级别以区别于ms,即此延时级别上增加十倍,修改程序如下
movr6,#0
movr7,#0
movr5,#0Ah;
若效果不明显可以增大倍数
djnzr6,DelayLoop
djnzr7,DelayLoop
djnzr5,DelayLoop
ret
end
修改后的仿真结果为
实现了秒级别的延时。
思考题三:
改变流水灯的运行方向
修改程序如下:
rra;
rl表示左移,rr表示右移,可实现流水灯方向的变换
LjmpLoop
思考题四:
改变流水灯的运行模式,双灯对跑,双灯一起跑
修改为双灯对跑:
movr0,#01h
movr1,#80h
movr2,#4;
若改为8可以实现相对点亮然后相反点亮的循环
mova,r0
adda,r1
movP1,a;
由于只有a可以实现移位功能,故用r0和r1将数据暂存,然后分别实现移位后相加移入a再赋值,以实现双灯对跑
mova,r0
rla
movr0,a
mova,r1
rra
movr1,a
callDelay
djnzr2,Output
ljmpLoop
软件仿真结果及实验现象描述:
;
复位后P1口均为高电平
第一次实现r0和r1数据相加赋值给P1,点亮边沿的两盏灯
实现r0和r1数据的移位以后再次相加赋值给p1口,实现左右的四盏灯对跑
循环次数为4次,完成后回到点亮边沿的两盏灯
修改为双灯一起跑:
Loop:
mova,#11h
Output:
复位后P1口都为高电平
赋入a的初值,此时0和4灯亮
a值左移位再次赋值,此时1和5灯亮,一下同理
流水灯实验2:
思考题二:
每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果
KeyLeftequP1.0
KeyRightequP1.1
LedLeftequP1.2
LedRightequP1.3
SETBKeyLeft
SETBKeyRight
MOVC,KeyLeft
CallDelay;
在读入数据与传送数据间增加延时,观察控制效果
MOVLedLeft,C
MOVC,KeyRight
CallDelay
MOVLedright,C
LJMPLoop
movr5,#0Ah;
若效果不明显可以增大倍数或者减小倍数
djnzr5,DelayLoop
思考题五:
如果LED灯为低电平点亮应如何改动
若LED灯为低电平点亮则只需将赋值中的0和1对换,如源程序中的a赋值为01h,然后对它进行移位再赋值,此时就应该改为赋值feh,然后移位时候相当于移的是0信号,让各个口循环出现低电平,以实现点亮LED灯。
其他点亮方式同理。
思考题六:
把实验改为int1中断,需要改动几处,如何改动
LEDequP1.0
LEDBufequ0
ljmpStart
org13h;
13h为中断1的入口地址
Interrupt1:
;
改为中断1的中断子程序
pushPSW;
保护现场
cplLEDBuf;
取反LED
movc,LEDBuf
movLED,c
popPSW;
恢复现场
reti
org100H
Start:
clrLEDBuf
clrLED
movTCON,#00000100;
外部中断1下降沿触发
movIE,#10000100;
打开外部中断允许位(EX1)及总中断允许位(EA)
ljmp$
end;
硬件接口要改变,单脉冲要接P3.3
思考题七:
把实验改为同时int0和int1中断驱动2个灯,需要改动几处,如何改动
LED2equP1.1
LEDBuf2equ0;
增加P1.1灯对应的参数
org3
Interrupt0:
pushPSW;
cplLEDBuf;
popPSW;
org13h
pushPSW
cplLEDBuf2
movc,LEDBuf2
movLED2,c
popPSW
reti;
增加INT1中断子程序,使两个中断互不干扰
clrLEDBuf2
clrLED2
movTCON,#00000101;
外部中断1和中断0下降沿触发
movIE,#10000101;
打开外部中断允许位(EX1&
EX0)及总中断允许位(EA)
end;
硬件连接注意INT0输入对应P3.2,输出对应P1.0接L0,INT1输入对应P3.3,输出对应P1.1接L1
硬件仿真结果:
单脉冲接P3.2口时控制L0灯,按下单脉冲L0灯的状态发生一次转变,实现了连续按键L0灯一亮一灭闪烁,接P3.3都是L1灯出现同样的效果,说明实现了中断控制灯的状态转换,并且两个中断互不影响。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 P1 输入输出 中断 实验