RS485通信遇到怪现象
在调试RS485通讯时,单片机向计算机串口软件发送 0x99 ,但是串口软件上收到并显示的却是0x99,0x00;如果连续发送多位数据,串口软件接收到的数据总是多一字节(0x00),,哪位高手指导下啊。我使用的单片机是恩智普的51增强型系列里的P89LPC936 接收正常,发送总是多发送了一个0x00 发送脚没有拉高,示波器检查检查 发送脚TXD是高电平,还有其它什么原因没有 AB两条线的上下拉电阻没有加上吧 估计是发送中断处理问题 #include"RS485.h"/////////////////////管脚定义及常数定义
sbit uart_txd=P1^0;
sbit uart_rxd=P1^1;
sbit uart_485=P0^7;//确定485通信三个引脚
extern void uart_485_init(void); //485初始化函数
#include"RS485.h"
extern unsigned char address,BRG;//定义从机地址以及波特率
void uart_485_init(void) //485初始化函数
{
P1M1&=0xFC;
P1M2&=0xFC;//P1.0 、P1.1设为通用准双向I/O
P0M1&=0x7F;
P0M2&=0x7F;//P0.7 设为通用准双向I/O
// uart_txd=1;
// uart_rxd=1;//停止位为1,即总线空闲时为高电平
uart_485=0;//接口默认状态为允许接收
SSTAT=0x60;//CIDIS=1;RX与TX中断各自独立
SCON=0x50;//设置为模式1 ,使能串口接收
BRGCON=0x00;//写入波特率发生器时,BRGEN一定要等于0
BRGR1=0x04;
BRGR0=0x70;//默认状态为9600;
BRGCON=0x03;//设置波特率CCLK/((BRGR1,BRGR0)+16)
//SADDR=0x01;
//SADEN=0xFF;//装从机地址,//将数据与校准值一起保存在EEPROM中
EA=1;//开总中断
ES=1;//开串口接收中断
//REN=1;
}
void main (void)
{
unsigned char i=0,max,min;
uart_485_init();
IT1=1;
EX1=1; //开外中断
led4dat=tab;//**********************LED显示
led0dat=tab;
led1dat=tab;
led2dat=tab;
led3dat=tab;
CH452_Write(CH452_SYSON2) ;
CH452_Write(CH452_NO_BCD) ;
CH452_Write(CH452_TWINKLE |0 );
CH452_Write(CH452_DIG4 |led4dat );
CH452_Write(CH452_DIG0 |led0dat );
CH452_Write(CH452_DIG1 |led1dat );
CH452_Write(CH452_DIG2 |led2dat );
CH452_Write(CH452_DIG3 |led3dat ); //**********************LED显示
while(1) ;
}
void rs485_receiver (void) interrupt 4// 串口接收中断
{
rs=SBUF; 接收
led4dat=tab;//***************************************
led0dat=tab;
led1dat=tab;
led2dat=tab[(rs/10)%10];
led3dat=tab;
CH452_Write(CH452_SYSON2) ;//这部分是在数码管上显示出来
CH452_Write(CH452_NO_BCD) ;
CH452_Write(CH452_DIG4 |led4dat );
CH452_Write(CH452_DIG0 |led0dat );
CH452_Write(CH452_DIG1 |led1dat );
CH452_Write(CH452_DIG2 |led2dat );
CH452_Write(CH452_DIG3 |led3dat ); //****************************
RI=0 ;//清中断标志
}
void key (void) interrupt 2 //用按键中断(串口发送程序)发送数据到计算机,
{
uart_485=1;//允许发送
SBUF= 0xC4;
TI=0 ;
while(!TI) ;
uart_txd=1;
uart_rxd=1;//停止位为1,即总线空闲时为高电平
uart_485=0;//接口默认状态为允许接收
} 以上是程序,发现每次复位,串口软件业总收到一字节(0x00) 怎么没有人回答啊 上电初始化时TXD有没有保持高电平? 有啊,哪位大侠帮帮忙,分析下 你也在做485吗?我最近在做485通信模块 原理图和PCB已画好 望指教 还有需要完善的地方吗?
http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_497569.jpg
(原文件名:485.jpg) 单片机的RX,TX看是否还接到其它的电路上 MARK 把12M 换成11.0592 在修正波特率看看 回复【10楼】whj19860123
-----------------------------------------------------------------------
(1)光耦的发光二极管导通压降一般在1.2V左右,而导通电流也在7mA-10mA左右。
如果VCC为5V的话,本人经常将接光耦1脚的电阻的阻值为定470欧姆左右;接光耦4脚的电阻的阻值设为4.7K(或10K)。一直用着没有问题。像这样完全的情况完全可以用PC410替代。
(2)U5光耦的接法,感觉有点问题,当P1.0为低电平时,REDE的电平无法确定(跟流过发光二极管电流以及光耦的电流传输系数比有关)楼主这种接法估计是想达到REDE与P1.0反相的效果。其实不需要反相,P1.0和REDE(接485芯片的2、3脚)可以同相,这样P1.0=1时,表明485芯片发送,反之,表明485芯片接收。
(3)485芯片的A、B输出要加TVS管以及GDT管,防雷或防静电。
(4)在复位电路的电阻R2并联一个IN1418。
就这些了,图看不清,也不知道这电路也是干啥的。原理图对了,还得看PCB布局布线呢。 我也遇到了这种情况,我把匹配电阻去掉就好使了,但是不知道是什么原因…… Mark 学习 你这是多了个一个数据,我的是出现了丢数据的现象,也不知道怎么搞的,明明发送了5个数据,接收的时候只有三个数据被收到了 楼主这个问题解决没呀,求赐教! A上拉,B下拉了吗? 我也碰到过,每次发完,加一个1~2m秒的延时,再转入到接收模式 出现过这个问题,换了根485转USB的线就好了,可能是硬件上的问题
页:
[1]