微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机多字节接收问题

51单片机多字节接收问题

时间:10-02 整理:3721RD 点击:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uchar num[32],k=0,count;
void UART_init()
{
TMOD = 0x20;   //T11¤×÷?£ê?2  8??×??ˉ??×°
TH1 = 0xfd;   TL1 = 0xfd;  //±èì??ê9600
TR1 = 1;  
SM0 = 0;   SM1 = 1;   //′??ú1¤×÷·?ê?1 10??òì2?
REN = 1;  //′??ú?êDí?óê?
EA  = 1;  ES  = 1;  
}
uchar Task()       //?ì2a?eê?D?o??D??1¤×÷?£ê?
{
bit bi;
char i=0,j;
for(;i<32;i++){
  if(num[i]==0xa5)   j=i;
switch(num[j+1]){
  case 0x01: if(num[j+2]==0x08) {bi=1; k=0x01;}
  break;
  case 0x02: if(num[j+2]==0x0a) {bi=1; k=0x02;}
  break;
  case 0x03: if(num[j+2]==0x06) {bi=1; k=0x03;}
  break;
  default: bi=0;
  break;}
if(bi==1) return j+3;
}
return 0;
}
bit Exam(uchar add)      //?óoíD£?é£?D£?éí¨1y·μ??1
{
uchar he,i=0;
switch(k){
  case 0x01:
   {for(;i<8;i++) he+=num[add];
    if(he==num[add+8]) return 1;  else return 0;}
  case 0x02:
   {for(;i<10;i++) he+=num[add];
    if(he==num[add+10]) return 1;  else return 0;}
  case 0x03:
   {for(;i<6;i++) he+=num[add];
    if(he==num[add+6]) return 1;  else return 0;}
  default: return 0;
  }
}
void main()
{
UART_init(); //′??ú3?ê??ˉ
while(1);
}
void UART() interrupt 4
{
RI=0;
num[count++]=SBUF;
if(Exam(Task))
  P1=0x0f;
else
  P1=0xf0;
}

我想在起始信号a5下查询到数据,分三种工作模式,不同工作模式接收不同字节数据,各位大神帮忙看看有什么问题,一直达不到预期

自己没做51开发也有几年了,也看出小编程序里面有一些致命的错误哈,比如程序最后中断函数的if语句。
建议小编第一步是将串口接收程序给调试好,再进行后面的工作

自己没做51开发也有几年了,也看出小编程序里面有一些致命的错误哈,比如程序最后中断函数的if语句。
建议小编第一步是将串口接收程序给调试好,再进行后面的工作

建议不要把那个if(Exam(Task))
  P1=0x0f;
else
  P1=0xf0;
}
这个放在中断里面处理。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top