求教一个关于单片机RXD接收数据的问题
时间:10-02
整理:3721RD
点击:
本人系单片机新手,对这部分不了解,问一下,单片机如何从RXD口接收5个字节的串行数据呢,每个字节间隔10ms-20ms,又如何把这些数据放到一个数组里,(波特率为9600)。这个是我找的一个程序,这个程序能不能实现这个功能,把接收到的5个8位二进制数存到table1[]里。如果不能的话,该怎么改。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define N 5 //2 //可一次接收数据量
void rs232_init();
uchar flag,i; //删除无用变量
uchar code table[]="I get ";
uchar table1[N]; //接收缓存数组
uchar j=0; //接收计数器
//sbit led=P1^0;
main()
{
rs232_init();
while(1)
{
if(flag==1)
{
ES=0; //关串口中断
for(i=0;i<6;i++)
{
SBUF=table;
while(!TI);
TI=0;
}
for(j=0;j<N;j++) //发送接收数组
{
SBUF=table1[j];
while(!TI);
TI=0;
}
j=0; //清零接收计数器
ES=1;
flag=0;
}
}
}
void rs232_init()
{
TMOD=0x20; // 10 0000//计数方式,13位定时器最大计数值为2的13次,即8192
TH1=0xfd;
TL1=0xfd; // 计数值515
TR1=1;
SM0=0;
SM1=1; //工作方式为1,8位异步收发,(由定时器T1设置)
REN=1; //先设定号工作方式,在打开允许接收
EA=1; //总中断
ES=1; //开串口中断
}
void ser()interrupt 4
{
RI=0;
table1[j++]=SBUF; //存数据到接收缓存
if(j==N) //数组满时,允许发送
flag=1;
}