关于一个串口自发字收的问题

[复制链接]
2675|9
 楼主| ic666 发表于 2007-3-2 14:03 | 显示全部楼层 |阅读模式
各位大虾,谁能帮我看一下这个程序。谢谢了!!!!!!我将RXD和TXD短接,在P1.0口加一个发光二极管,如果发送和接受正确,可观察到二极管一闪一闪发亮,如果断开RXD和TXD,二极管就不会闪烁。可是现在二极管没反映。谢谢各位大哥大姐了。<br />&nbsp;#include&nbsp;&ltreg51.h&gt<br />#define&nbsp;&nbsp;uchar&nbsp;&nbsp;unsigned&nbsp;char<br />uchar&nbsp;j,k;<br />&nbsp;&nbsp;void&nbsp;delay()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt=20;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=0;k&lt=248;k++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{;;};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;void&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;uchar&nbsp;z;<br />&nbsp;&nbsp;&nbsp;TMOD=0x20;<br />&nbsp;&nbsp;&nbsp;TL1=0xcc;<br />&nbsp;&nbsp;&nbsp;TH1=0xcc;<br />&nbsp;&nbsp;&nbsp;TR1=1;<br />&nbsp;&nbsp;&nbsp;SCON=0x50;<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;TI=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;z=0xfe;<br />&nbsp;&nbsp;&nbsp;&nbsp;SBUF=z;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(RI==1);<br />&nbsp;&nbsp;&nbsp;&nbsp;RI=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;z=SBUF;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=z;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(TI==1);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;}<br /><br /><br /><br /><br /><br /><br /><br />
原野之狼 发表于 2007-3-3 12:25 | 显示全部楼层

应该是很简单的东西。。。

修改一部分:<br /><br />&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;TI=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;&nbsp;z=0xfe;<br />&nbsp;&nbsp;&nbsp;&nbsp;SBUF=z;<br />&nbsp;&nbsp;&nbsp;&nbsp;//while(RI==1);<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!TI);<br />&nbsp;&nbsp;&nbsp;&nbsp;TI=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!RI);<br />&nbsp;&nbsp;&nbsp;&nbsp;RI=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;z=SBUF;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0=z;<br />&nbsp;&nbsp;&nbsp;&nbsp;//while(TI==1);<br />&nbsp;&nbsp;&nbsp;&nbsp;delay();<br />&nbsp;&nbsp;&nbsp;}<br />
 楼主| ic666 发表于 2007-3-5 16:52 | 显示全部楼层

谢谢2楼了

谢谢2楼这位大哥(姐)了。可还是不行啊,我的变量Z设的是不是有问题啊!我的串口和波特率设置是不是有问题啊。这个问题困扰了我几天了。能不能把整个的这个程序编写一下啊?拜托了。谢谢!!!!!!
bb文 发表于 2007-3-5 23:12 | 显示全部楼层

希望帮到你

下面是我的程序,实现一样的功能,希望能帮到你。如果用在你的单片机上不行的话,要核对下硬件。程序是建立在硬件的基础的。<br />#include&ltreg51.h&gt<br />main()<br />{<br />&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;TMOD=0x20;TH1=0xcc;TL1=0xcc;<br />&nbsp;TR1=1;<br />&nbsp;SCON=0x50;<br />&nbsp;while(1)<br />&nbsp;{<br />&nbsp;&nbsp;TI=0;<br />&nbsp;&nbsp;P1=0xfe;<br />&nbsp;&nbsp;for(i=0;i&lt10000;i++);<br />&nbsp;&nbsp;SBUF=0xff;<br />&nbsp;&nbsp;while(RI==0);<br />&nbsp;&nbsp;RI=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(TI==0);<br />&nbsp;&nbsp;P1=SBUF;<br />&nbsp;&nbsp;for(i=0;i&lt10000;i++);<br />&nbsp;&nbsp;}<br />}
bb文 发表于 2007-3-5 23:18 | 显示全部楼层

对比了一下

对比了一下,程序主要的区别是我的对P1赋值,而你的是对P0口赋值。对P0口赋值,只能传送数据,并没有选通连接P1的发光二极管,所以没反应。<br /><br />我只是略懂皮毛,说错了希望谅解。
 楼主| ic666 发表于 2007-3-8 11:07 | 显示全部楼层

回复

谢谢4楼了!!!!!<br />
小小学者 发表于 2007-3-10 20:08 | 显示全部楼层

请教!

&nbsp;&nbsp;看楼主用delay()延时用得这么精确,请问,这里面程序延时时间是怎么计算的?执行一条语句要用多长时间,与晶镇有关系吗?怎么去计算?
 楼主| ic666 发表于 2007-3-13 11:45 | 显示全部楼层

回复7楼

我这个延时是在网上找的,我的理解:具体的计算是把C转换成汇编,然后看执行这些汇编语句需要多少机械周期,晶振越高,机械周期越小,所用时间越短。不知道说的对不对,仅供参考。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

19

帖子

0

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