📄 s_uart.h
字号:
#include "REG51.h"
//-----------------------------------------------------------
#define BAUD_RATE 2400
//#define BAUD_RATE 1200
#define RELOAD(TIMER,SVALUE) TIMER+=SVALUE+1
sbit tTXD=P3^7;
sbit rRXD=P3^2;
bit tTI;
bit rRI;
data unsigned char rSBUF;
data unsigned char tSBUF;
data unsigned char rSBUF0;
data unsigned char RxdCnt;
data unsigned char rSmpCnt;
data unsigned char TxdCnt;
data unsigned char tSmpCnt;
//-----------------------------------------------------------
void SimuUARTinit(void)
{
tTI=1;
tTXD=1;
rRXD=1;
TMOD&=0xf0;
TMOD|=0x03;
ET0=1;
ET1=1;
TR0=1;
IT0=1;
EX0=1;
TR1=1;
EA=1;
}
//-----------------------------------------------------------
void IntTH0(void) interrupt 3
{
#if BAUD_RATE==2400
RELOAD(TH0,0x80);
#endif
if(tSmpCnt-- == 0)
{
tSmpCnt=2;
if(tTI) return;
switch(TxdCnt++)
{
case 0:
tTXD=0;
break;
case 9:
tTXD=1;
tTI=1;
TxdCnt=0;
break;
default:
tTXD=tSBUF&0x01;
tSBUF>>=1;
break;
}
}
}
//-----------------------------------------------------------
void RxdInt0(void) interrupt 0
{
#if BAUD_RATE==2400
TL0=0xef;
#else
TL0=0xaf;
#endif
TF0=0;
rSmpCnt=1;
}
//----------------------------------------------------------
void IntTL0(void) interrupt 1
{
#if BAUD_RATE==2400
RELOAD(TL0,1);
#endif
if(rSmpCnt-- == 0)
{
rSmpCnt=2;
switch(RxdCnt++)
{
case 0:
if(rRXD==1) RxdCnt=0;
break;
default:
if(RxdCnt>9){ RxdCnt=0;return;}
rSBUF0>>=1;
rSBUF0|=rRXD?0x80:0;
break;
case 9:
RxdCnt=0;
if(rRXD==0) return;
rSBUF=rSBUF0;
rRI=1;
}
}
}
//-----------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -