如题所述
SBUF串口寄存器,收到串口数据想把这个数据赋值给一个数组a.
就想把这个收到串口数据赋值给一个数组a
收到的数据格式为A,1,3,6,8,.........
这格式没见过。没看懂啥意思,
b = SBUF;
for(i = 0; i < 8; i++){
if(b & (1 << i)){
a[i] = 1;
}else {
a[i] = 0;
}
}
//比你网上找的简单吧//但是不知是不是你要的功能。
A,1,3,6,8这个是用户在PC上用串口输入的,单片机接收这个字符串,放到a数组里.
你写的这个a数组全都是1和0了.
哦,你是要接收字符串呐。那你在网上找的那个程序就是我写的那个意思。。把一个字节放到8个元素里去了。那程序就不对。用串口接收字节流,我通常用一个循环型的数组来接收。
ucahr rxBuf[100] = {0};
static int Indx = 0; //接收时,放到这个位置
static int Outdx = 0; //读取时,从这里开始。
void reciveData(uchar dat){ //从串口接收数据放到接收缓存里
rxBuf[Indx] = dat;
Indx++;
if(Indx >= 100)
Indx = 0;
}
//用串口中断来接收数据(51单片机)
void Rxd() interrupt 4
{
uchar b;
b = SBUF;
SI = 0;
reciveData(b);
}
//后面还有。。
void ReadBuf(){
if(Indx != Outdx){ //缓存中有数据
a = rxBuf[Outdx]; //a 是你要看的
Outdx++;
if(Outdx >= 100)
Outdx = 0;
}
}
//再有就是协议的,帧结构之类的。
b = SBUF;
flag = 0x80;
for(i = 0; i>(7-i);//这个是什么意思.
flag>>=0x01;
P1 = a[i];
delay(); // 这个要看实际情况
}
是不是把b里按位取出来 赋给a数组啊
你的P1是什么啊
追问P1是c51单片机的一个输入端.你可以不考虑P1.
SBUF串口寄存器,收到串口数据想把这个数据赋值给一个数组a.
代码我也是网上找的...