实例1
#include <reg52.h>
void ConfigUART(unsigned int baud);
unsigned char a,b;
sbit feng=P2^3;
sbit led1=P1^0;
sbit led2=P1^1;
void main(){
ConfigUART(9600);
while(1){
while(!RI);
RI=0;
//P1=SBUF;//接收缓冲器中的值赋值给P1口
b=SBUF;
a=b;
SBUF=a;
//注解
//串口助手发送过去的数字为16进制,比如30实际上就是十进制的48,在做switch判断的时候应该判断
//十进制数字48
/*if(b>31){
P1=b;
feng=0;
}else{
P1=0xf0;
feng=1;
}*/
switch(b){
//发送'1',十六进制为31,十进制为49
case 49:
led1=0;
led2=0;
break;
case 50:
led1=0;
led2=1;
break;
case 51:
led1=1;
led2=0;
break;
case 52:
led1=1;
led2=1;
break;
case 53:
feng=0;
break;
default:
P1=0xff;
break;
}
while(!TI);
TI=0;
}
}
void ConfigUART(unsigned int baud){
SCON=0x50;
TMOD&=0x0f;
TMOD|=0x20;
TH1=256-(11059200/12/32)/baud;
TL1=TH1;
ET1=0;//可以省略
TR1=1;//启动定时器
}
实例2
#include <reg52.h>
sbit PIN_RXD=P3^0;
sbit PIN_TXD=P3^1;
bit RxdEnd=0;
bit RxdOrTxd=0;
unsigned char RxdBuf=0;
unsigned char TxdBuf=0;
bit TxdEnd=0;
void ConfigUART(unsigned int baud);
void StartRXD();
void StartTXD(unsigned char dat);
void main(){
EA=1;
ConfigUART(9600);
while(1){
while(PIN_RXD);
StartRXD();
while(!RxdEnd);
StartTXD(RxdBuf+1);
while(!TxdEnd);
}
}
void ConfigUART(unsigned int baud){
TMOD &=0xf0;
TMOD |=0x02;
TH0=256-(11059200/12)/baud;
}
void StartRXD(){
TL0=256-((256-TH0)>>1);
ET0=1;
TR0=1;
RxdEnd=0;
RxdOrTxd=0;
}
void StartTXD(unsigned char dat){
TxdBuf=dat;
TL0=TH0;
ET0=1;
TR0=1;
PIN_TXD=0;
TxdEnd=0;
RxdOrTxd=1;
switch(dat){
case 12:
P1=0x00;
break;
case 13:
P1=0xf0;
break;
default:
break;
}
}
void interruptTimer0() interrupt 1{
static unsigned char cnt=0;
if(RxdOrTxd){
cnt++;
if(cnt<=8){
PIN_TXD=TxdBuf & 0x01;
TxdBuf>>=1;
}else if(cnt==9){
PIN_TXD=1;
}else{
cnt=0;
TR0=0;
TxdEnd=1;
}
}else{
if(cnt==0){
if(!PIN_RXD){
RxdBuf=0;
cnt++;
}else{
TR0=0;
}
}else if(cnt<=8){
RxdBuf>>=1;
if(PIN_RXD){
RxdBuf |=0x80;
}
cnt++;
}else{
cnt=0;
TR0=0;
if(PIN_RXD){
RxdEnd=1;
}
}
}
}
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询