比如我发的是310.10A210结果回来的数据只是10!好像是SBUF只能传输一个字节,应该是用数组先把数据存起来,再用单片机一个一个回给PC机!思路是这个,可是我写了好久都没写的出来!大家帮帮忙!
我这个是先把PC机传输过来的数据存到AT24c02,然后按按键再把数据从24C02里面提取出来传送给PC机!
void main()
{
uchar b,i;
init();
b=read_add(1);
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
if(key==0)
{
delay1(5);
if(key==0)
{
while(!key);
for(i=0;i<num--;i++)
{
b=read_add(i);//读取I页的数据
SBUF=b;//发送给PC机
while(!TI);
TI=0;
}
}
}
if(flag==1)
{
flag=0;
write_add(num,table[num]);//将num的数据写进AT24c02的num页
num++;
}
}
}
void t1() interrupt 4
{
if(RI==1)
{
a=SBUF;//PC机发送过来的数据赋值给a
RI=0;
table[num]=a;//将a赋值给数组
flag=1; //标志位
}
前面的一些AT24c02起始,终止子函数,字数不够了就没写进来!
这个函数PC机得到的数据时01 02 02 03 03 04 04 05 05 06 06 07 07 08 08 09 09 0A 0A 0B 0B 0C 0C 0D 0D 0E 0E 0F 0F 10 10 它会按一下加一。一直到7F又重新开始!
这个程序是怎么处理的啊?可以具体的讲解一下吗?还有就是数据时随意发送的,不要: PC发送数据必须以0XAA开头和以 0X55结束(帧头帧尾)这样的!麻烦你就写一个PC机发送一段数据给单片机,按个按钮然后再一下子返回给PC机吗?
追答一般如果不用校验BCC或其他奇偶校验的话,最好加上帧头帧尾,以确保数据准确接收。
按你的要求,程序修改为:
/* PC发送数据必须以0XAA开头和以 0X55结束(帧头帧尾)*/
void main(void)
{
int i=0;
COM_Init();
while(1)
{
if(MCU_RXD_FLG)
{
EA=0;
TR0=0;
if(key) for(i=0;i<num;i++) printf("%0x ",dat[i]);
num=0;
MCU_RXD_FLG=0;
EA=1;
}
}
}
网上下载一个串口助手,就可以调试了。
这个我已经好了,现在就是单片机接收的数据,被我装在一个数组里面,怎么把这些数组写入到AT24C02里面,然后再读出去,是不是要用到页写入帧格式啊?到底怎么写程序呢,大概的思路可以告诉我吗?
追答关于AT24C02网上程序多的很,
相信聪明的你,一看就明白。
我有程序在家里,很久很久以前调试过
参考资料:http://zhidao.baidu.com/team/view/%E5%8D%95%E7%89%87%E6%9C%BA-CAN