串口程序1:
#include<reg51.h> //包含单片机寄存器的头文件
/*****************************************************
函数功能:接收一个字节数据
***************************************************/
unsigned char Receive(void)
{
unsigned char dat;
while(RI==0) //只要接收中断标志位RI没有被置“1”
; //等待,直至接收完毕(RI=1)
RI=0; //为了接收下一帧数据,需将RI清0
dat=SBUF; //将接收缓冲器中的数据存于dat
return dat;
}
void Send(unsigned char dat)
{
SBUF=dat;
while(TI==0) //等待发送完毕
;
TI=0;
}
void delay(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
unsigned char a;
TMOD=0x20; //定时器T1工作于方式2
SCON=0x50; //SCON=0101 0000B,串口工作方式1,允许接收(REN=1)
PCON=0x00; //PCON=0000 0000B,波特率2400
TH1=0xf6; //根据规定给定时器T1赋初值
TL1=0x9f; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
REN=1; //允许接收
while(1)
{
a=Receive(); //等待接受
P1=a; //将接收到的数据送P1口显示
REN=0; //禁止接受数据
Send(a);
delay();
REN=1; //允许接受数据
}
}
串口程序2:
#include<reg51.h>
#include<stdio.h>
#include<string.h>
char code init_password[]="abcdef";
bit flag=0;
void main (void)
{
char m,length;
char string[10];
SCON=0x50;
PCON=0x00;
TMOD=0x20;
IE=1;
TH1=0xfd;
TL1=0xfd;
TR1=1;
T1=1;
while(flag==0)
{
printf("\n\npassword;");
scanf("%s",string);
length=strlen(string);
if(length!=6)
{
printf("error\n");
continue;
}
for(m=0;m<length;m++)
{
if(string[m]!=init_password[m])
{
printf("error!\n");
flag=0;
break;
}
}
if(m==length)
{
printf("ok!\n");
flag=1;
}
}
}
完整资料打包: