UART串口测试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

sbit PIN_RXD=P3^0;
sbit PIN_TXD=P3^1;

bit RxdEnd=0;
bit TxdEnd=0;
bit RxdOrTxd=0;
unsigned char RxdBuf=0;
unsigned char TxdBuf=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-(12000000/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;
}

void InterruptTimer0() interrupt 1
{
static unsigned char count;

if(RxdOrTxd)
{
count++;
if(count<=8)
{
PIN_TXD=TxdBuf&0x01;
TxdBuf>>=1;
}
else if(count==9)
{
PIN_TXD=1;
}
else
{
count=0;
TR0=0;
TxdEnd=1;
}
}
else
{
if(count==0)
{
if(!PIN_RXD)
{
RxdBuf=0;
count++;
}
else
{
TR0=0;
}
}
else if(count<=8)
{
RxdBuf>>=1;
if(PIN_RXD)
{
RxdBuf|=0x80;
}
count++;
}
else
{
count=0;
TR0=0;
if(PIN_RXD)
{
RxdEnd=1;
}
}
}
}

相关文档
最新文档