STC12C5A60S2 串口通信问题就是把两片单片机的P3.0和P3.1连接,两片单片机的程序如下,从机液晶显示

第一个为发送
#include <STC12C5A60S2.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar add[3]={0x03,0x0f,0x0f};
uchar i;
bit flag;

void kouinit()
{
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;

/* TMOD=0x20; //T1工作方式2
TH1=0xfd; //波特率9600bps
TL1=0xfd;
TR1=1; */

AUXR=AUXR|0x11; //打开独立波特率发生器
BRT=0Xfd; //溢出率 = SYSclk/12/( 256 - BRT ) 波特率为9600*/
}
void delay(uint x)//延时函数
{
x=x*12;
while(x--)
{
_nop_(); //包含在intrins.h头文件
_nop_();
_nop_();
}
}

void main()
{
delay(10000);
kouinit();
SBUF=0x00;
while(1)
{
if(flag==1)
{
SBUF=add[i];
i++;
if(i>2)
i=0;
flag=0;
}
}
}
void inte() interrupt 4
{
if(TI==1)
{
flag=1;
TI=0;
}
}

接下来为接收程序

#include <STC12C5A60S2.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit RS = P2^5;
sbit WRD = P2^6;
sbit E = P2^7;
sbit PSB = P2^2;
sbit RES = P2^4;

uchar temp,i;
uchar add[3];
long pin;
long lv;
bit flag;
uchar num;
bit qunum;

void delay(uint x)//延时函数
{
x=x*12;
while(x--)
{
_nop_(); //包含在intrins.h头文件
_nop_();
_nop_();
}
}

void TransferData(char data1,bit DI) //传送数据或者命令,当DI=0是,传送命令,当DI=1,传送数据.
{
WRD=0;
RS=DI;
delay(1);
P0=data1;
E=1;
delay(1);
E=0;
}
void kouinit()
{
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;

AUXR=AUXR|0x11; //打开独立波特率发生器
BRT=0Xfd; //溢出率 = SYSclk/12/( 256 - BRT ) 波特率为9600*/
}

void zhenghe()
{
lv=lv<<8;
add[i]=SBUF;
lv=lv+add[i];
}
void display()
{
TransferData(0x80,0);
TransferData(0x30+pin/100000,1);
TransferData(0x30+pin%100000/10000,1);
TransferData(0x30+pin%100000%10000/1000,1);
TransferData(0x30+pin%100000%10000%1000/100,1);
TransferData(0x30+pin%100000%10000%1000%100/10,1);
TransferData(0x30+pin%100000%10000%1000%100%10,1);
}

void main()
{
kouinit();
clear_gcrom();
while(1)
{
if(flag==1)
{
flag=0;
zhenghe();
/* i++;
if(i==3)
{
i=0;
pin=lv;
lv=0;
} */
pin=num;
display();
}
}
}
void inte() interrupt 4
{
if(RI==1)
{
num++;
if(num>50)
num=3;
RI=0;
flag=1;
}
}

可是数据就是传输不到从机,用串口调试软件数据有时会乱

第1个回答  2012-10-27
1连线正确吗?TXD连RXD
2距离有多远?追问

调试可以了,只是比如我发的数据是【0x02,0xf0,0xf0】,把三个数据整成一个long 型的数,可是收到的数据不稳定,有时是对的,有事是错的,用串口助手查看发送数据也是出现这样的情况,数据传送的顺序有时会乱掉,就是收到数据的顺序会乱,怎么解决这个问题呢

追答

这种连接正常。你可以改成232通信会好一些。

本回答被提问者采纳