2016-03-22 回答
我只能给你子程序,仅供参考
ie=0x90; //打开中断总开关及串口中断
scon=0x50; //设定串行口工作方式1,允许接收
tmod=0x20; //设定时器1,自动装载,产生破特率
th1=0xfd; //破特率为9600
tr1=1; //启动定时器1
pcon=0x80; //定义smod,
发送
while(ri==0) //ri==1;
{
; //等待数据发送完毕
}
ri=0; //手动清零
发送
void disf(unsigned int y)
{
unsigned char i;
dat[3]=y%10; // ===7
dat[2]=(y/10)%10; //==8
dat[1]=(y/100)%10; //==9
dat[0]=y/1000; //=1
for(i=0;i<4;i++)
{
sbuf=dat[i];
while(ti==0); //等待数据发送完毕
ti=0; //手动清零
}
}
接收
while{disp();} //无限循环
四位字符,发送
while(key==0);
disp(1949);
for(i=0;i<4;i++)
{
sbuf=dat[i];
while(ti==0); //等待数据发送完毕
ti=0; //手动清0
}
四位字符,接收 用串口中断
void ck_js() interrupt 4
{
unsigned char i;
for(i=0;i<4;i++)
{
while(ri==0); //等待数据接收
ri=0; //手动清零
dat[i]=sbuf; //接收到的字符存放
}
}
多位字符 接收函数
void seri_int() interrupt 4
{
count1=0;
if(ri)
{
unsigned int count2=10000;
while(1)
{
flag1=1;
while(!ri)
{
if(count2==0)
{
ri=0;
break;
}
count2--;
}
dat1[count1]=sbuf;
count1++;
ri=0;
}
}
}