ccjchen 发表于 2007-3-8 10:50

这是我人生的第一个程序-8251,请求大虾给予指导

我现在使用了简单的三线通信,即8251的rxd通过max232后与电脑的txd相连,8251的txd通过max232后与电脑的rxd相连;接地信号相连;然后是电脑自己的rts,cts相连,dsr,dtr相连;8251自己的rts,cts相连,dsr,dtr相连;8251的其他引脚都有信号,为什么txd还是没信号?不能发也不能收,用过去的汇编却通信正常。<br />#define&nbsp;_TEST_C_<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<br />#define&nbsp;DAT8251&nbsp;XBYTE<br />uchar&nbsp;data_temp={0xAA,0x10,0x22,0x32,0x00};<br />&nbsp;uchar&nbsp;m=0,n=0,k;&nbsp;&nbsp;uchar&nbsp;s;<br />void&nbsp;&nbsp;wait(uchar&nbsp;p,q);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;main(void)&nbsp;<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;wait(11,82);//8251工作速度慢,每送一个控制字,等待一会儿延时2ms<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);<br />&nbsp;&nbsp;&nbsp;&nbsp;COM8251&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait(11,82);<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;0x37;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAT8251&nbsp;=&nbsp;data_temp;//写&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(m==4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;=&nbsp;0;<br />&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 />}<br /><br /><br />

whereis 发表于 2007-3-8 13:19

.

像这些程序,抄书上的就可以了,网上的例子也有,比如<br />http://www.teach.ustc.edu.cn/jpkc/xiaoji/wjyl/shiyan/8251WAN/8251-1.htm<br />自己动动手,把汇编改c51,死不了人的。<br /><br />现实中,根本就不会用这种芯片的,并口输入转多串口,现在一个处理器里面集成了3到4个uart都有,用这种片子,费钱费力费板。<br />

ccjchen 发表于 2007-3-8 15:24

我的程序几乎是那个汇编的翻版,依然不行啊

ccjchen 发表于 2007-3-8 16:04

这种情况怎么回事啊!?

发送时8251TXD有正确波形,可是从max232出来后,就没有波形了。&nbsp;开始时用万用表测试,max232各引脚电压完全正常。从max232出来以后,应该波形一样,<br />只是幅度变化啊?<br /><br />

high 发表于 2007-3-8 19:54

电脑的tx发送,示波器观察232cmos端rx是否有信号

常见错误是104电容没有焊接,或没有正确,或虚焊。<br />简单的话,其实就连结3线就行了,其他rts,cts...可以不管<br /><br />void&nbsp;&nbsp;wait(uchar&nbsp;p,q);--这不是好习惯。<br />void&nbsp;&nbsp;wait(uchar&nbsp;p&nbsp;,&nbsp;uchar&nbsp;q);

ccjchen 发表于 2007-3-8 22:53

出来了,呵呵

出来了,他妈的电脑com口是坏的,别的没问题&nbsp;,用了我两个月<br />谢谢各位兄弟姐妹的关心和帮助<br /><br />

将军令 发表于 2007-3-9 08:03

支持一下,良好的开端

ccjchen 发表于 2007-3-9 13:03

谢谢啊,楼上的兄弟!

gys123456 发表于 2010-12-28 20:26

呵呵呵,学到了
页: [1]
查看完整版本: 这是我人生的第一个程序-8251,请求大虾给予指导