电脑给单片机发送字符串,单片机比较收到的字符串是不是相同的?

通过PC给单片机发送密码,单片机把收到的字符串进行比较,正确进入程序,字符比较这块老是不对,发什么它都可以下入程序,高手们给我分析分析#include<reg52.h>#include<string.h>void init();void out_asc(unsigned char *a);void dsplay(unsigned int z);void ComOutEnter(void);unsigned int b1,b2;void main(){ init(); while(1) { out_asc("______________________________________");ComOutEnter(); out_asc("| welcome come back |");ComOutEnter(); out_asc("| |");ComOutEnter(); out_asc("______________________________________");ComOutEnter(); out_asc("现在进入身份确认程序输入密码");ComOutEnter(); while(1) { RI=0; b1=0;b2=SBUF; while(!RI); RI=0; if(b2==b1) { out_asc("ok"); } } }}void init(){ SCON=0x50; TMOD=0x20; PCON=0x80; TH1=0xf3; TL1=0xf3; TR1=1;}void out_asc(unsigned char *a){ for(a;*a!=✀尀0✀;a++) { TI=0; SBUF=*a; while(!TI); TI=0; }}void dsplay(unsigned int z){ unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);} void ComOutEnter(void){SBUF = 0x0d;while(!TI);TI = 0;SBUF = 0x0a;while(!TI);TI = 0;}有没有高手给一个密码效验的子程序??
2026年09月27日 19:55
有4个网友回答
网友(1):

你的密码是字符串,
先想清楚怎么接收一串数据后再比较。

建议程序大致流程:
先定义个全局变量数组,至少要大于密码长度
用串口中断接收,
接收到第一个数据后,存入数组首地址,打开定时中断,
期间接收到的数据都放在数组里,顺便记录接收数据长度
定时中断到时检验数组内的值和密码是不是相等
然后输出结果

网友(2):

*b1 是一个无符号整型变量,而b1是指这个变量所在的内存地址指针,你用if(b2==b1)?指针==指针?两个同时分配的变量地址怎么会一样呢?
还有 *b1='pass123'是一组字符串组,*b2=SBUF;只是接收一个字符,两者更没有可比性。
建议你在字符后面加一个校验位或者只检验最后一位字符对不对称,
例如: if(*(b1+6)=="3")
{
out_asc("ok");
}

网友(3):

在取出数据的指令前面,应该先判定串行口收到数据没有。
while(!RI); //RI=0,就等待
*b2=SBUF; //取出收到的数据
RI=0;
------------
另外,由SBUF取出的数据,只是一个字节,和'pass123'比较,显然不合适。

网友(4):

while(1)
{
RI=0;
b1=0;
B2=99;//初始值
while(!RI);//收到
RI=0;
b2=SBUF;//读取

if(b2==b1)//判断
{
out_asc("ok");
}
}