资源描述
关于怎么利用串行小助手往单片机发送一连串数据,并且单片机按照你发送的数据显示出来!现象要可以观察到!
我一开始有个疑问就是我在串行小助手里发送的数据,而在单片机里只能显示最后一位数据的现象,后来我发现了原因,原因就是单片机SBUF只有一个字节(电脑是1K),而我发送的波特率为9600,单片机处理接受数据的速度又相对比较慢,也就是单片机处理刚接受的数据,下一个数据就立马又到了,会覆盖掉前面的数据。
因此我对这种方式有一个解决方案,供大家参考一下
我们要建立起一个理念就是: 建立一张表格数组用来存储接受到得数据,利用中断不断的去查询。最后接受到得数据通过P1口进行显示,还要延时,这样效果跟明显。
Keil编写的程序:
#include <reg52.h>
unsigned char receive[32];
unsigned char k;
sbit rs=P3^5;
sbit rw=P3^6;
sbit e =P3^4;
unsigned char flag;
void delay1ms(unsigned int f)//延时程序
{
unsigned int i,j;
for(i=0;i<f;i++)
for(j=0;j<120;j++);
}
void receivem(void) //接受程序
{
while(RI==1)
{
if(k==32){k=0;}
receive[k]=SBUF;
RI=0;
k++;
}
}
void timer_int(void) //定时器初始化
{
TMOD=0x11;//00010001
SCON =0x50;
T2CON=0x30;
RCAP2H=0xFD;
RCAP2L=0x8F;
EA=1;
TR0=1;
TR2=1;
ET0=ET2=1;
}
void time0(void) interrupt 1 using 1 //中断函数
{
TH0=0xCD;
TL0=0x50;
receivem();//定时将SBUF接收
}
void main()
{
unsigned char i;
timer_int();
while(1)
{
for(i=0;i<32;i++)
{
P1=receive[i];
delay1ms(500);
}
}
}
最后通过运行可以看到52板子上的8个LED随着这些数进行变化!
在线解答739141300 祝你好运!
展开阅读全文