单片机P1口输入输出与中断实验.docxVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

单片机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、第2个实验在每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果;

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

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

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

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

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

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

流水灯实验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,即此延时级别上增加十倍,修改程序如下

Delay:

movr6,#0

movr7,#0

movr5,#0Ah ;若效果不明显可以增大倍数

DelayLoop:

djnzr6,DelayLoop

djnzr7,DelayLoop

djnzr5,DelayLoop

ret

end

修改后的仿真结果为

实现了秒级别的延时。

思考题三:改变流水灯的运行方向

修改程序如下:

Loop: mova,#01h

movr2,#8

Output:

movP1,a

rra ;rl表示左移,rr表示右移,可实现流水灯方向的变换

callDelay

djnzr2,Output

LjmpLoop

思考题四:改变流水灯的运行模式,双灯对跑,双灯一起跑

修改为双灯对跑:

Loop:

movr0,#01h

movr1,#80h

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档