c51,单片机从串口接收字符串,放到一个数组里面,然后在与一个常量字符串比较的程序,谢谢

2024-10-30 02:37:31
有4个网友回答
网友(1):

建议 去 我的领地 5d6d 的 proteus 论坛看看

那里有很多 单片机仿真实例,包括仿真图 和 源码
搜 5d6d 和 proteus 2个关键词

网友(2):

#include
#define uint unsigned char
#define uchar unsigned int
sbit D=P3^2;
sbit P3_4=P3^4;
uchar ser_receive; //串口接收到的数据
uchar ser_flag=0;
uchar receive_number[4];
uchar i=0;
uchar j;
uint a=0,b=0,c=0;
void function();
void init_pin(void);
void init_ser()
{
TMOD=0X20;//定时器1工作在方式2
TH1=0XFD;
TL1=0XFD; //波特率9600
TR1=1;
EA=1;
// EX0=1;
// IT0=1;
SM0=0;
SM1=1;
REN=1;//允许串口接收
ES=1;//开串口 中断
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

}

void init_pin(void)
{

P1=0x00;
P0=0x00;
P2=0x00;

}

void ser() interrupt 4 //中断函数不用声明
{
if(RI==1)
{
RI=0;
ser_receive=SBUF;
if(ser_receive!='\0')
{
receive_number[i]=ser_receive;
i++;
if(i==4)
{
i=0;
ser_flag=1;
init_pin(); //初始化引脚
P2=0xff; //打开所有的锁存器
function(); //调用相应函数
P2=0x00;
}

}
}

}

void function()
{

/*****************初始化状态***********************/
if((receive_number[0]=='0'&&receive_number[1]=='x'&&receive_number[2]=='0'&&receive_number[3]=='7')||(receive_number[0]=='0'&&receive_number[1]=='x'&&receive_number[2]=='0'&&receive_number[3]=='8')) //暂停
{
init_pin();
delay(1000);
}
/*****************一号************************/
if(receive_number[0]=='0'&&receive_number[1]=='x'&&receive_number[2]=='0'&&receive_number[3]=='0')
{
init_pin();
a=4;
if(a==3)
init_pin();

P0=0x00;
P1=0x01;
P2=0x01;
}

}

void main()
{
init_pin();
init_ser();
while(1)
{
if(ser_flag==1)
{
ES=0;
ser_flag=0;
for(j=0;j<4;j++)
{
SBUF=receive_number[j];
while(!TI);
TI=0;
delay(10);
}

ES=1;
}
}

}你说的是不是这个意思?

网友(3):

#include
#include
unsigned char a[16],b[16]="0123456789ABCDEF",i,pr;
void ser_isr(void) interrupt 3
{
if(RI==1)
{
RI=0;
a[pr]=SBUF;
pr++;
pr&=0x0f;
}
}
main()
{
TI=1;
EA=1;
pr=0;
while(1){
for(i=0;i<16;i++){
if(a[i]!=b[i])break;
printf("A=B\n");
}
}
}

网友(4):

用hash算法