想问一下,51串口通信时为何会吃掉一个数据?
就是写一个密码锁时,第一次输入密码1234时,单片机会吃掉数字“4”
第二次发送则正常
无代码无真相
提出这种问题一定要把相关代码展示给大家
我能补个程序吗?
//**********************************************
就是这个程序,有问题
#include<reg52.h> #include<intrins.h> typedef unsigned int uint; typedef unsigned char uchar; uchar R_data; bit R_flag = 0; uchar code f[] = "error"; uchar code t[] = "true"; uchar code st[] = "Please input your key:"; uchar code st2[] = "The key is:"; uchar code st3[] = "请输入密码以解锁: \n"; char key[10]={"******"};/// \0\0\0\0\0 char *p*l; uchar j=0i = 0n=0; int delay(unsigned int a) { while (a--); return 0; } void Start() { TMOD = 0x20; //定时器工作在定时器1的方式2 PCON = 0x00; //不倍频 SCON = 0x50; //串口工作在方式1,并且启动串行接收 TH1 = 0xfd; //设置波特率 9600 TL1 = 0xfd; //模式2 8位自动刷新 TL1 = TH1 TR1 = 1; //启动定时器1 EA = 1; //开总中断 ES = 1; //开串口中断 } //发送 void send_out(int a) { switch (a) { case 1: p = st; while (1) { SBUF = *p; while (!TI) { _nop_(); } p++; if (*p == '\0') break; TI = 0; } break; case 2: p = st2; while (1) { SBUF = *p; while (!TI) { _nop_(); } p++; if (*p == '\0') break; TI = 0; } p = key; while (1) { SBUF = *p; while (!TI) { _nop_(); } p++; if (*p == '\0') break; TI = 0; } } } //接受中断 void Start1(void) interrupt 4 { EA = 0; if (RI == 1) //当硬件接收到一个数据时,RI会置位 { key[j] = SBUF; j++; RI = 0; R_flag = 1; i = 0; } EA = 1; } void main() { Start(); j = 0; send_out(1); i = 1; while (i); while (1) { j=0; if (R_flag == 1) { send_out(2); R_flag = 0; } } }