单片机串口通信程序 PC发送一段任何数据到单片机,按一个按钮让原数据再返回给PC机!我写的程序出了问题!

2024-12-21 02:27:57
推荐回答(2个)
回答1:

不要误人子弟,PC机往单片机每次可以发送任意个数据,MCU接收时候处理一下就OK了,
下面是我的程序,给你参考。

//中断方式接收PC机数据
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
设计思路
接收到的数据存入到dat[50]数组中,
中断方式接收,每次中断接收后,开启定时器,
*/////////////////////////////
//
//陈仲库

#include
#include

int dat[20];
unsigned char num=0;
int time=0;

bit MCU_RXD_FLG=0;

void COM_Init(void)
{
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
PCON |= 0x80;
TH1 = 0xFD;
ES=1;EA=1;
TR1 = 1;
TI = 1;

TH0=0xfc; //T0定义初始值
TL0=0x18;
TR0=0; //关闭T0计时
ET0=1;
}

//向串口发送一个字符
void MCU_TXD(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}

//串口接收中断函数
void serial () interrupt 4 using 3
{
EA=0;
if(RI)
{
unsigned char ch;
TR0=0; time=0;
RI = 0;
ch=SBUF;
dat[num++]=ch;
TR0=1;
}
EA=1;
}

delay(int t){while(t--); }

/* PC发送数据必须以0XAA开头和以 0X55结束(帧头帧尾)*/
void main(void)
{
int i=0;

COM_Init();
while(1)
{
if(MCU_RXD_FLG)
{
EA=0;
TR0=0;
if(dat[0]==0xAA && dat[num-1]==0x55)
for(i=0;i num=0;
MCU_RXD_FLG=0;
EA=1;
}
}
}

void timer0() interrupt 1 //T0中断 定时0.1ms
{
EA=0;
TH0=0xfc;
TL0=0x18;
MCU_RXD_FLG=1;
TR0=0;
EA=1;
}

关于AT24C02程序网上多的是,很成熟的程序

OK希望对你能有帮助

回答2:

单片机可以一次发多个数据,但是pc一次只能发一个数据单片机方能接收。我想这是你问题的所在,不行的话可以把程序拿出来看一下。