本帖最后由 zhumingxing 于 2010-5-12 14:45 编辑
我用at89C2051,485控制芯片用sn75176,笔记本电脑通过232转485设备与单片机通讯,波特率2400,用串口调试助手发送1或者2或者3时,接收到的总是“——————”这些,无法显示发送的数据。
程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i;
void DelayUs(unsigned char us) //delay us微秒级延时
{
unsigned char uscnt;
uscnt=us>>1;/* Crystal frequency in 12MHz*/
while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void init()
{
TMOD=0x20;//定时器1,模式2
TH1=0xF3;//波特率2400bps,12Mhz晶振
TL1=0xF3;
TR1=1;
REN=1;//允许串行接收位
SM0=0;
SM1=1;//8位数据位,方式1
EA=1;
ES=1;
}
void main()
{
init();
delay();
while(1)
{
if(flag==1)//标志位为1,收到数据后
{
DelayMs(4);
ES=0;
SBUF=a;//把数据发送回来
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
} |