51单片机串口c语言编程的问题

我是把P3.0,P3.1短接,自发自收调试(收到的数据不是发送的数据),希望大侠指出问题(或写个程序:功能是发送一个char型数组,接收一个chai型数组)这是原程序:#... 我是把P3.0,P3.1短接,自发自收调试(收到的数据不是发送的数据),希望大侠指出问题(或写个程序:功能是发送一个char型数组,接收一个chai型数组)这是原程序:
#include <REG52.H>
#include <stdio.h>
unsigned char aa=0;
unsigned char b[14];
unsigned char a[14]={0,1,0,1,1,0,0,0,0,0,0,0,0,0};
unsigned char m;
unsigned char x;
sbit d0=P1^0;
sbit d1=P1^1;
sbit d2=P1^2;
sbit d3=P1^3;
sbit d4=P1^4;
sbit d5=P1^5;
sbit d6=P1^6;
sbit d7=P1^7;
sbit d8=P2^0;
sbit d9=P2^1;
sbit d10=P2^2;
sbit d11=P2^3;
sbit d12=P2^4;
sbit d13=P2^5;

void delay(unsigned char n)
{
while(n--)
{
for(m=0;m<120;m++);
}
}

void main (void)
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断

while(1)
{
delay(50);
for(x=0;x<14;x++)
{
SBUF=a[x];
while(TI==0);
TI=0;
x++;
}
}

}
void ser_int (void) interrupt 4 using 2
{
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
b[aa] = SBUF; //SUBF接受/发送缓冲器

if(b[0]==0)
d0=1;
else
d0=0;

if(b[1]==0)
d1=1;
else
d1=0;

if(b[2]==0)
d2=1;
else
d2=0;

if(b[3]==0)
d3=1;
else
d3=0;

if(b[4]==0)
d4=1;
else
d4=0;

if(b[5]==0)
d5=1;
else
d5=0;

if(b[6]==0)
d6=1;
else
d6=0;

if(b[7]==0)
d7=1;
else
d7=0;

if(b[8]==0)
d8=1;
else
d8=0;

if(b[9]==0)
d9=1;
else
d9=0;

if(b[10]==0)
d10=1;
else
d10=0;

if(b[11]==0)
d11=1;
else
d11=0;

if(b[12]==0)
d12=1;
else
d12=0;

if(b[13]==0)
d13=1;
else
d13=0;

aa++;
if(aa==14)
aa=0;
}
else
{
; //若有必要以下更新要发送的数据

}

}
展开
 我来答
百度网友13f6530
2015-01-19 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:89
采纳率:100%
帮助的人:60.6万
展开全部
亲,有两个X++,只有一个aa++。
百度网友d2eb7181f6
2015-01-19 · 超过26用户采纳过TA的回答
知道答主
回答量:73
采纳率:83%
帮助的人:28.1万
展开全部
稍微改了一下,我用串口工具调的,你load一下试试看,不建议用太高的波特率
#include <REG52.H>
#include <stdio.h>
unsigned char aa=0;
unsigned char b[14];
unsigned char a[14]={0,1,0,1,1,0,0,0,0,0,0,0,0,0};
unsigned char m;
unsigned char x=0;
sbit d0=P1^0;
sbit d1=P1^1;
sbit d2=P1^2;
sbit d3=P1^3;
sbit d4=P1^4;
sbit d5=P1^5;
sbit d6=P1^6;
sbit d7=P1^7;
sbit d8=P2^0;
sbit d9=P2^1;
sbit d10=P2^2;
sbit d11=P2^3;
sbit d12=P2^4;
sbit d13=P2^5;

void delay(unsigned char n)
{
while(n--)
{
for(m=0;m<120;m++);
}
}

void main (void)
{
SCON = 0x50; //REN=1????????,??????1
TMOD= 0x20; //???????2 8????
PCON&= 0x7F; //SMOD=0;

TH1 = 0xFA; // baud*2 /* ???4800????8????1????? (11.0592M)?
RI = 0;
TI = 0;
TR1 = 1;
ES = 1; //?????
EA = 1; // ????
while(1)
{
delay(250);
while(x<14)
{
SBUF=a[x];
}
x=0;

}

}
void ser_int (void) interrupt 4 using 2
{
if(RI == 1) //RI??????
{
RI = 0; //??RI??????
b[aa] = SBUF; //SUBF??/?????
if(b[0]==0)
d0=1;
else
d0=0;

if(b[1]==0)
d1=1;
else
d1=0;

if(b[2]==0)
d2=1;
else
d2=0;

if(b[3]==0)
d3=1;
else
d3=0;

if(b[4]==0)
d4=1;
else
d4=0;

if(b[5]==0)
d5=1;
else
d5=0;

if(b[6]==0)
d6=1;
else
d6=0;

if(b[7]==0)
d7=1;
else
d7=0;

if(b[8]==0)
d8=1;
else
d8=0;

if(b[9]==0)
d9=1;
else
d9=0;

if(b[10]==0)
d10=1;
else
d10=0;

if(b[11]==0)
d11=1;
else
d11=0;

if(b[12]==0)
d12=1;
else
d12=0;

if(b[13]==0)
d13=1;
else
d13=0;

aa++;
if(aa==14)
aa=0;
}

if(TI==1)
{
TI=0; //??????????????
x++;
if(x==14)
{x=0;}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
查晓筠0i5
2015-01-19 · TA获得超过2752个赞
知道大有可为答主
回答量:2.1万
采纳率:1%
帮助的人:4999万
展开全部
需要给你完成一份吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式