rain 发表于 2006-7-17 12:19

实验3.跑马灯

<p><font size="2">这个试验的跑马灯和上个试验的效果是一样的,也是使每个灯轮流点亮。既然效果一样,我们为什么做这么多灯的试验哪?我们做试验,不是开发产品,要求创新,我们做试验主要是学习知识,虽然这个试验和上个试验的,效果一样,但是我们确实使用了不同的方法。</font></p> <p><font size="2">在上节课中让 LED 流水是去逐个控制P1端口的每个位来实现的,那么我们这次的试验是在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后让这个数据向高位移动不就实现“流水”效果啦?的确如此!</font></p> <p align="left"><font size="2">&nbsp; 可惜,8051没有让P1数据移动的指令,但有对累加器ACC中数据左移或右移的指令,ACC是8051单片机内部算术逻辑单元中的一个“寄存器”(这里叫他寄存器是不正确的,但你可以先这样理解,ACC在指令中常写为A),他在数据传输和数据处理过程中作用十分重要,ACC为8位。他可与片内所有单字节寄存器交换数据,实际上P1和其他端口在单片机中也是一个寄存器。这样我们可以将需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。</font></p> <p align="left"><font size="2">程序如下:</font></p> <p align="left"><a name="star"><font color="#000000" size="2">star</font></a><font size="2">: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;开始<br />&nbsp; mov acc,#0feh&nbsp; ;ACC中先装入LED1熄灭的数据(即二进制的 1111 1110)<br />&nbsp; mov p1,acc&nbsp;&nbsp;&nbsp;&nbsp; ;将ACC的数据送P1口<br />&nbsp; acall </font><a href="http://www.01mcu.com/Mcu_CAI/liushui3.htm#delay"><u><font color="#800080" size="2">delay</font></u></a><br /><font size="2">&nbsp; mov r0,#7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;因上句送到&nbsp;p1口的数据就熄灭了一位,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;所以将数据再移动7次就完成一个8位流水过程 &nbsp;&nbsp;&nbsp;&nbsp; <br /></font><a name="loop"><font color="#000000" size="2">loop</font></a><font size="2">: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;数据移动循环<br />&nbsp; rl a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;将ACC中的数据左移一位<br />&nbsp; mov p1,a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;把ACC移动过的数据送p1口显示<br />&nbsp; acall </font><a href="http://www.01mcu.com/Mcu_CAI/liushui3.htm#delay" target="_top"><u><font color="#800080" size="2">delay</font></u></a><font size="2"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;调用延时<br />&nbsp; djnz r0,</font><a href="http://www.01mcu.com/Mcu_CAI/liushui3.htm#loop"><u><font color="#800080" size="2">loop</font></u></a><font size="2">&nbsp;&nbsp; ;没有移动够7次继续移动<br />&nbsp; ljmp </font><a href="http://www.01mcu.com/Mcu_CAI/liushui3.htm#star"><u><font color="#800080" size="2">star</font></u></a><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;移动完7次后跳到开始重来,以达到循环流动效果<br /></font><a name="delay"><font color="#000000" size="2">delay</font></a><font color="#000000" size="2">: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;延时子程序,就是上节课中的延时子程序<br />&nbsp;&nbsp;&nbsp; mov r1,#50<br />del0: <br />&nbsp;&nbsp;&nbsp; mov r2,#100<br />del1:<br />&nbsp;&nbsp;&nbsp; mov r3,#100<br />&nbsp;&nbsp;&nbsp; djnz r3,$<br />&nbsp;&nbsp;&nbsp; djnz r2,del1<br />&nbsp;&nbsp;&nbsp; djnz r1,del0<br />&nbsp;&nbsp; ret&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;延时子程序结束,返回到调用处的下一句<br /></font><font size="2">end &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;本汇编程序到此结束</font></p> <p align="left"><font size="2">&nbsp; 接下来,将上述程序编译,并烧写到前面我们的实验芯片中.</font></p>

gllasd 发表于 2024-10-24 23:08

<p></p>


<p>文章内容介绍详细,学习了,不错的资料,学习了。感谢分享。</p>
页: [1]
查看完整版本: 实验3.跑马灯