资源描述:
《哈工程-实验二_单片机p1口输入输出及中断实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验二单片机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
2、、用单次脉冲申请中断,在中断处理程序中使P1.0的输出状态发生反转,并通过发光二极管观察P1.0的电平。三、实验仪器计算机伟福软件(lab2000P)四、实验内容1、P1口是准双向口。它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。2、8051延时子程序的延时计算问题,计算和估算延时子程序的时间。3、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。4、必须在中断程序中设定是否允许中断重入,即设置EXO位。5、本例中使用了INTO中断,一般中断
3、程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的中断程序保护了PSW,ACC等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。五、思考题1、改变延时时间,变快或者变慢,观察效果;2、第2个实验在每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果;3、改变流水灯的运行方向;4、改变流水灯的运行模式,双灯对跑,双灯一起跑。5、如果LED灯为低电平点亮,如何改动。6、把实验改为int1中断,需要改动几处,如何改动。7、把实验改为同时int0和int1中断
4、驱动2个灯,需要改动几处,如何改动。六、源程序修改原理及其仿真结果流水灯实验1:Loop:mova,#01hmovr2,#8Output:movP1,arlacallDelaydjnzr2,OutputLjmpLoopDelay:movr6,#0movr7,#0DelayLoop:djnzr6,DelayLoopdjnzr7,DelayLoopretend思考题一:修改延时子程序查指令表可知MOV和DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周期时间长度为12/6MHZ,所以上面延时子程序该的执行时间为:(256×255+2)×2
5、×12÷6≈261ms=0.261s在ms级别上人眼是无法区别快慢的,所以设计增加延时到s级别以区别于ms,即此延时级别上增加十倍,修改程序如下Delay:movr6,#0movr7,#0movr5,#0AhDelayLoop:djnzr6,DelayLoopdjnzr7,DelayLoopdjnzr5,DelayLoopretend修改后的仿真结果为实现了秒级别的延时。思考题三:改变流水灯的运行方向修改程序如下:Loop:mova,#01hmovr2,#8Output:movP1,arracallDelaydjnzr2,OutputLjmpL
6、oop思考题四:改变流水灯的运行模式,双灯对跑,双灯一起跑修改为双灯对跑:Loop:movr0,#01hmovr1,#80hmovr2,#4;若改为8可以实现相对点亮然后相反点亮的循环Output:mova,r0adda,r1movP1,a;由于只有a可以实现移位功能,故用r0和r1将数据暂存,然后分别实现移位后相加移入a再赋值,以实现双灯对跑mova,r0rlamovr0,amova,r1rramovr1,acallDelaydjnzr2,OutputljmpLoopDelay:movr6,#0movr7,#0DelayLoop:djnzr6
7、,DelayLoopdjnzr7,DelayLoopretend修改为双灯一起跑:Loop:mova,#11hmovr2,#8Output:movP1,arlacallDelaydjnzr2,OutputLjmpLoop流水灯实验2:思考题二:每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果KeyLeftequP1.0KeyRightequP1.1LedLeftequP1.2LedRightequP1.3SETBKeyLeftSETBKeyRightLoop:MOVC,KeyLeftCallDelay;在读入数据与传送数据间增加
8、延时,观察控制效果MOVLedLeft,CMOVC,KeyRightCallDelayMOVLedright,CLJMPLoopDelay:movr6