微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口收发典例

串口收发典例

时间:10-02 整理:3721RD 点击:
密码锁。
  1、用串口实现解锁功能。单片机复位后向串口调试助手发送“Please Input The Password:”并换行,
2、假设密码为1234,那么由串口助手向单片机发送字符串“1234”后则单片机向串口调试助手发送“Welcome!”并且八位led灯闪烁。
  3、若发送的不是“1234”则单片机向串口调试助手发送“ERROR!Please Input The Password Again!”并换行。直到密码输入正确。
  (注:单片机依次连续向串口调试助手发送0x0d、0x0a可以实现换行。)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar dat[4];
uchar dat1[]="Please Input The Password:";
uchar dat2[]="Welcome!";
uchar dat3[]="ERROR!Please Input The Password Again!";
uchar flag=1,i,j,k;
void main()
{
        TMOD=0X20;
        TH1=0XFD;
        TL1=0XFD;
        SM0=0;
        SM1=1;
        REN=1;
        TR1=1;
        EA=1;
        ES=1;
        while(1)
        {
                if(flag==1)
                {
                        SBUF=dat1[i++];
                        while(!TI);TI=0;
                        if(i==26){SBUF=13;while(!TI);TI=0;SBUF=10;while(!TI);TI=0;i=0;flag=2;}
                }
                if(flag==3)
                {
                        if(dat[0]=='1'&&dat[1]=='2'&&dat[2]=='3'&&dat[3]=='4')
                        {
                        SBUF=dat2[j++];
                        while(!TI);TI=0;
                        if(j==8){SBUF=13;while(!TI);TI=0;SBUF=10;while(!TI);TI=0;j=0;flag=0;}
                        }
                        else
                        {
                        SBUF=dat3[k++];
                        while(!TI);TI=0;
                        if(k==38){SBUF=13;while(!TI);TI=0;SBUF=10;while(!TI);TI=0;k=0;flag=1;}                       
                        }
                }
        }
}
void zd() interrupt 4
{
        if(flag==2)
        {
                RI=0;
                dat[j++]=SBUF;
                if(j==4){j=0;flag=3;}
        }
}

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

网站地图

Top