高手给指点一下:我的8251怎么不能同时发送和接收呢?

[复制链接]
2810|5
 楼主| ccjchen 发表于 2007-4-6 10:25 | 显示全部楼层 |阅读模式
以下是我做的89C52简单的发送和接收程序,我在电脑上用串口调试助手进行调试,示波器发现8251的rxd,txd只能有一个有波形,就是发送和接收只能进行其中一个.(新电脑串口绝对没问题,换了好几块正确的电路板都是这个问题)<br />第二个问题是DAT8251&nbsp;=&nbsp;data_temp[m];这句话有问题,发送不出数据,只有写成比如:DAT8251&nbsp;=0X52才能发送一个字母&nbsp;R,&nbsp;DAT8251&nbsp;=0X48发送一个字母&nbsp;H&nbsp;&nbsp;;为什么我写成DAT8251&nbsp;=&nbsp;data_temp[0]就不能发送字母R呢?<br />请各位老师和大虾们指导一下!<br />#include&nbsp;&quot;reg52.h&quot;<br />#include&nbsp;&quot;stdlib.h&quot;<br />#include&nbsp;&quot;absacc.h&quot;<br />#include&nbsp;&quot;intrins.h&quot;<br />#include&nbsp;&quot;test.h&quot;<br />#include&nbsp;&quot;math.h&quot;<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />#define&nbsp;uint&nbsp;&nbsp;unsigned&nbsp;int<br />#define&nbsp;COM8251&nbsp;XBYTE[0x8601]<br />#define&nbsp;DAT8251&nbsp;XBYTE[0x8600]<br />uchar&nbsp;data_temp[10]={0x52,0x55,0x56,0x57,0x58,0x00};<br />uchar&nbsp;temp[10]={11,22};<br />&nbsp;uchar&nbsp;m=0,n=0,k;&nbsp;&nbsp;<br />uchar&nbsp;s;<br />void&nbsp;&nbsp;initmcu(void);<br />void&nbsp;&nbsp;wait(uchar&nbsp;p,q);&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;main(void)&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x40;//以上为8251复位部分<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x4e;//9600baud,1停止位,无校验,8位数据,X16<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x35;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(data_temp[m]!=0x00)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;data_temp[m];//写<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[m]&nbsp;=&nbsp;DAT8251;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />void&nbsp;&nbsp;wait(uchar&nbsp;p,q)<br />{<br />&nbsp;&nbsp;&nbsp;uchar&nbsp;&nbsp;i,j;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//(2*j+3)*i+4<br />&nbsp;&nbsp;&nbsp;for&nbsp;(i=p;i&gt0;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j=q;j&gt0;j--);<br />}
sjnh 发表于 2007-4-6 15:00 | 显示全部楼层

..

while(data_temp[m]!=0x00)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;data_temp[m];//写<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[m]&nbsp;=&nbsp;DAT8251;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><br />速度很快,就是说,你一块送进去5个数,当然要覆盖前面的
 楼主| ccjchen 发表于 2007-4-6 19:12 | 显示全部楼层

你说的对,但是我已经将while(1)中的内容该成了:

也就是把while(1)内部改成了:<br />while(1)<br />{<br />&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;data_temp[0];//写<br />}<br /><br />就这么简单,发送的竟然和DAT8251&nbsp;=&nbsp;0x52发送的竟然内容不一样啊&nbsp;
 楼主| ccjchen 发表于 2007-4-7 17:44 | 显示全部楼层

两种情况运行结果为什么不一样呢?

while(1)<br />{<br />DAT8251&nbsp;=data_temp[0];&nbsp;<br />}<br />单步汇编结果如下:<br />MOV&nbsp;R0,#00H<br />MOVX&nbsp;A,@R0<br />MOV&nbsp;DPTR,#8700H<br />MOV&nbsp;@DPTR,A<br />运行的结果为&nbsp;0<br /><br />while(1)<br />{<br />DAT8251&nbsp;=0x52;<br />}<br />汇编为:<br />MOV&nbsp;DPTR,#8700H<br />MOV&nbsp;A,#52H<br />MOV&nbsp;@DPTR,A<br />运行结果为52H,<br />以上两种情况运行结果为什么不一样呢?
 楼主| ccjchen 发表于 2007-4-8 18:53 | 显示全部楼层

我做了如下改动就好拉!不过我的程序还是不能同时发送和接

uchar&nbsp;&nbsp;data&nbsp;data_temp[6]={0x52,0x53,0x54,0x55,0x00,0x58};在其中加了data&nbsp;我用串口调试助手接受正常,而且串口调试助手中显示的RX接收速度异常快,但是其中的TX发送频率无论如何该发送速度都很慢,用示波器查看8251的rxd无波形,而txd有波形,或者是正好反过来.就是不能同时有,请大虾们,再帮指导一下.<br /><br />
 楼主| ccjchen 发表于 2007-4-9 11:03 | 显示全部楼层

哈哈,解决拉!

原来那样好象发送接受的频率不一样,相差很远,所以就不行吧,用了中断就不存在这个问题了!不过好象有点会出现乱码.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

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