首先对浏览帖子的大侠表示衷心的感谢。小弟用16f877a与电脑串口实现通信,板子上用max487e实现ttl电平与485电平转换,然后通过一个485转232的转换器与电脑串口连接。对于max487e,其RE端与877a的RA0连接,其DE端与877a的RA1连接(当RE端为低且DE端为低,max487e输入有效,当DE端为高,max487e输出有效)。小弟用c语言编了一小段代码来检测通信,先是上位机给我传一个任意的数据,然后我回传10个数据上去。877a接收到的数据是正确的,发给电脑的数据显示出来是一大堆错乱的数据。代码如下: void main (void) { TRISA=0x10; TRISC=0x98; PCFG3=0; PCFG2=1; PCFG1=1; PCFG0=0;//设置A口为I/O口 RA0=0;//与max487e的RE连接 RA1=0;//与max487e的DE连接 GIE=1; PEIE=1; BRGH=1;//高速 SPBRG=25;//波特率9600 SYNC=0;//异步通信 SPEN=1;//使能通信模块 RCIE=1; RX9=1;//使能第九位 ADDEN=1;//使能地址检测,因为要多机通信的,在这小段程序中没体现而已 CREN=1;//使能接收模块 TXIE=1; TX9=1; //传上去的数据也设为九位的 TX9D=0; while(1); }
void interrupt ISR(void) { if(RCIE&&RCIF) { receive=RCREG; PORTD=leddata[receive]; //在数码管上显示收到的数据,这里能够正 //确实现 RA1=1; //使能max487e的发送 TXREG=0x00; TXEN=1;//开始发送 } if(TXIE&&TXIF)//发送一个数据后又会自动的进入发送中断 { PORTD=0x07;//在数码管上显示7这个数字,代表能顺利进入发送中断,这 //里能实现 cycle++;;// cycle初始化为0 TXREG=cycle; if(cycle==10) TXEN=0;//关闭发送 }
}
恳请大侠们赐教 |