#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; //T1¹¤×÷ģʽ2 8λ×Ô¶¯ÖØ×°
TH1 = 0xfd; TL1 = 0xfd; //±ÈÌØÂÊ9600
TR1 = 1;
SM0 = 0; SM1 = 1; //´®¿Ú¹¤×÷·½Ê½1 10λÒì²½
REN = 1; //´®¿ÚÔÊÐí½ÓÊÕ
EA = 1; ES = 1;
}
uchar Task() //¼ì²âÆðʼÐźÅÅжϹ¤×÷ģʽ
{
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) //ÇóºÍУÑ飬УÑéͨ¹ý·µ»Ø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(); //´®¿Ú³õʼ»¯
while(1);
}
void UART() interrupt 4
{
RI=0;
num[count++]=SBUF;
if(Exam(Task))
P1=0x0f;
else
P1=0xf0;
}
我想在起始信号a5下查询到数据,分三种工作模式,不同工作模式接收不同字节数据,各位大神帮忙看看有什么问题,一直达不到预期
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
建议楼主第一步是将串口接收程序给调试好,再进行后面的工作
建议楼主第一步是将串口接收程序给调试好,再进行后面的工作
P1=0x0f;
else
P1=0xf0;
}
这个放在中断里面处理。。
一周热门 更多>