虾米冒泡,求教

[复制链接]
2185|7
 楼主| 宙斯的泪水 发表于 2008-9-13 21:49 | 显示全部楼层 |阅读模式
这是一段控制流水灯的粗糙的程序,用外中断1控制流水灯的关停,用编辑器(KELL)编译没报错,把程序拷到板上,能正常启动,再按下中断想让它停止时每次都跑飞,超级初学者,一直搞头不清,祈求点评<br />#include&ltreg51.h&gt<br />#include&ltintrins.h&gt<br />sbit&nbsp;P2_3=P2^3;<br />void&nbsp;delayms(unsigned&nbsp;int&nbsp;ms)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;while(ms--)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&nbsp;&lt&nbsp;120;&nbsp;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;LED,a,b;<br />&nbsp;&nbsp;&nbsp;P2_3=1;<br />&nbsp;&nbsp;&nbsp;LED=0xfe;<br />&nbsp;&nbsp;&nbsp;P1=LED;<br />&nbsp;&nbsp;&nbsp;EA=1;<br />&nbsp;&nbsp;&nbsp;EX1=1;<br />&nbsp;&nbsp;&nbsp;IT1=1;<br />&nbsp;&nbsp;&nbsp;do{}while(P2_3==1);<br />&nbsp;&nbsp;&nbsp;while(P2_3==0)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;a=7;<br />&nbsp;&nbsp;&nbsp;&nbsp;b=7;<br />&nbsp;&nbsp;&nbsp;while(a--)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;delayms(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;LED&nbsp;=&nbsp;_crol_(LED,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;=&nbsp;LED;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;while(b--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;delayms(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;LED=_cror_(LED,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;P1=LED;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;}<br />}<br />void&nbsp;interrupt1()&nbsp;interrupt&nbsp;2&nbsp;using&nbsp;1<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;P2_3=!P2_3;<br />}<br />
原野之狼 发表于 2008-9-14 16:49 | 显示全部楼层

while(P2_3==0)

如果不等于0呢?
孤星119 发表于 2008-9-14 17:47 | 显示全部楼层

LZ这个程序错误太大了.半天说不完.

1:IO口是不能这么用的.2:程序流成也不能这么写
NE5532 发表于 2008-9-15 10:30 | 显示全部楼层

程序总有一个不会退出的死循环,在哪里?

  
 楼主| 宙斯的泪水 发表于 2008-9-15 23:58 | 显示全部楼层

不知哪位前辈,愿意牺牲点时间,写个正确的示例

&nbsp;就是简单的流水灯,中断控制开关,LED左右移动(右移八次然后左移八次)如此反复,<br />回3楼:IO口和程序流程设计时应该注意什么,孤星前辈指教一下,初学C,渴望点滴进步~~
孤星119 发表于 2008-9-16 09:12 | 显示全部楼层

在你原来的程序上修改了以下,自己再仿真下.

<br />#include&ltreg51.h&gt<br />#include&ltintrins.h&gt<br />bit&nbsp;stop=0;<br />void&nbsp;delayms(unsigned&nbsp;int&nbsp;ms)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;while(ms--)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&nbsp;&lt&nbsp;120;&nbsp;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;LED,a,b;<br />&nbsp;&nbsp;&nbsp;LED=0xfe;<br />&nbsp;&nbsp;&nbsp;P1=LED;<br />&nbsp;&nbsp;&nbsp;EA=1;<br />&nbsp;&nbsp;&nbsp;EX1=1;<br />&nbsp;&nbsp;&nbsp;IT1=1;<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;a&lt=14;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!stop)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(a&lt=7)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED&nbsp;=&nbsp;_crol_(LED,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;=&nbsp;LED;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED=_cror_(LED,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P1=LED;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br />}<br />void&nbsp;interrupt1()&nbsp;interrupt&nbsp;2&nbsp;using&nbsp;1<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;stop=!stop;<br />}<br />
孤星119 发表于 2008-9-16 09:31 | 显示全部楼层

纠错:

for(;a&lt14;)<br />....<br /><br />if(a&lt7)<br /><br /><br />
 楼主| 宙斯的泪水 发表于 2008-9-16 21:44 | 显示全部楼层

学习了,谢谢楼上各位

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

79

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部