?? 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;
}
}
}
//-----------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -