...PC发送一段任何数据到单片机,按一个按钮让原数据再返回给PC机!我写...
发布网友
发布时间:2024-10-24 17:34
我来回答
共2个回答
热心网友
时间:2024-10-28 04:29
不要误人子弟,PC机往单片机每次可以发送任意个数据,MCU接收时候处理一下就OK了,
下面是我的程序,给你参考。
//中断方式接收PC机数据
/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
设计思路
接收到的数据存入到dat[50]数组中,
中断方式接收,每次中断接收后,开启定时器,
*/////////////////////////////
//
//陈仲库
#include <reg51.h>
#include <stdio.h>
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;i++) printf("%0x ",dat[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希望对你能有帮助
热心网友
时间:2024-10-28 04:27
单片机可以一次发多个数据,但是pc一次只能发一个数据单片机方能接收。我想这是你问题的所在,不行的话可以把程序拿出来看一下。