这是我人生的第一个程序-8251,请求大虾给予指导
我现在使用了简单的三线通信,即8251的rxd通过max232后与电脑的txd相连,8251的txd通过max232后与电脑的rxd相连;接地信号相连;然后是电脑自己的rts,cts相连,dsr,dtr相连;8251自己的rts,cts相连,dsr,dtr相连;8251的其他引脚都有信号,为什么txd还是没信号?不能发也不能收,用过去的汇编却通信正常。<br />#define _TEST_C_<br />#include "reg52.h"<br />#include "stdlib.h"<br />#include "absacc.h"<br />#include "intrins.h"<br />#include "test.h"<br />#include "math.h"<br />#define uchar unsigned char<br />#define uint unsigned int<br />#define COM8251 XBYTE<br />#define DAT8251 XBYTE<br />uchar data_temp={0xAA,0x10,0x22,0x32,0x00};<br /> uchar m=0,n=0,k; uchar s;<br />void wait(uchar p,q); <br />void main(void) <br />{ <br /> wait(11,82);//8251工作速度慢,每送一个控制字,等待一会儿延时2ms<br /> COM8251 = 0x00;<br /> wait(11,82);<br /> COM8251 = 0x00;<br /> wait(11,82);<br /> COM8251 = 0x00;<br /> wait(11,82);<br /> COM8251 = 0x40;//以上为8251复位部分<br /> wait(11,82);<br /> COM8251 = 0x4e;//9600baud,1停止位,无校验,8位数据,X16<br /> wait(11,82);<br /> COM8251 = 0x37; <br /> while(1)<br /> {<br /> DAT8251 = data_temp;//写 <br /> m++;<br /> if (m==4)<br /> {<br /> m = 0;<br /> }<br /> }<br />}<br />void wait(uchar p,q)<br />{<br /> uchar i,j; //(2*j+3)*i+4<br /> for (i=p;i>0;i--)<br /> for (j=q;j>0;j--);<br />}<br /><br /><br />.
像这些程序,抄书上的就可以了,网上的例子也有,比如<br />http://www.teach.ustc.edu.cn/jpkc/xiaoji/wjyl/shiyan/8251WAN/8251-1.htm<br />自己动动手,把汇编改c51,死不了人的。<br /><br />现实中,根本就不会用这种芯片的,并口输入转多串口,现在一个处理器里面集成了3到4个uart都有,用这种片子,费钱费力费板。<br />我的程序几乎是那个汇编的翻版,依然不行啊
这种情况怎么回事啊!?
发送时8251TXD有正确波形,可是从max232出来后,就没有波形了。 开始时用万用表测试,max232各引脚电压完全正常。从max232出来以后,应该波形一样,<br />只是幅度变化啊?<br /><br />电脑的tx发送,示波器观察232cmos端rx是否有信号
常见错误是104电容没有焊接,或没有正确,或虚焊。<br />简单的话,其实就连结3线就行了,其他rts,cts...可以不管<br /><br />void wait(uchar p,q);--这不是好习惯。<br />void wait(uchar p , uchar q);出来了,呵呵
出来了,他妈的电脑com口是坏的,别的没问题 ,用了我两个月<br />谢谢各位兄弟姐妹的关心和帮助<br /><br />支持一下,良好的开端
谢谢啊,楼上的兄弟!
呵呵呵,学到了
页:
[1]