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
{
; //若有必要以下更新要发送的数据
}
} 展开
#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
{
; //若有必要以下更新要发送的数据
}
} 展开
3个回答
展开全部
稍微改了一下,我用串口工具调的,你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;}
}
}
#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;}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要给你完成一份吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询