当前位置:文档之家› STC单片机虚拟串口发送程序(超简单)

STC单片机虚拟串口发送程序(超简单)

STC单片机(STC12C5A32S)虚拟串口发送程序
//虚拟串口发送子函数
void Uart(uint8 a)
{
ACC=a; //TXD3是已经定义的任意的发送端口
TR1=1;
TXD3=0; //发送起始位
while(TF1==0);
TF1=0; //TF1必须清零,因为只有启用T1中断才会自动清零
TXD3=ACC0; //发送8个位也可以用移位来发送,ACC0-ACC7也必须先定义
while(TF1==0); //表示ACC的8个位,如果用移位发送,就不用这样定义。

TF1=0;
TXD3=ACC1;
while(TF1==0);
TF1=0;
TXD3=ACC2;
while(TF1==0);
TF1=0;
TXD3=ACC3;
while(TF1==0);
TF1=0;
TXD3=ACC4;
while(TF1==0);
TF1=0;
TXD3=ACC5;
while(TF1==0);
TF1=0;
TXD3=ACC6;
while(TF1==0);
TF1=0;
TXD3=ACC7;
while(TF1==0);
TF1=0;
TXD3=1; //发送停止位
while(TF1==0);
TF1=0;
TR1=0;
}
该子函数使用T1定时器,T0也可以。

采用8位自动重装,重装值为A0
Main()
{
TMOD = 0x21; //T0:模式1,16位定时器。

T1:模式2,8位定时器,自动重装AUXR &= 0x3f; //定时器0和定时器1与普通8051定时器一样(不同的单片机设置可能
不同)
TL1 = 0xa0; //虚拟串口波特率:9600
TH1 = 0xa0;
ET0 = 1;
ET1 = 0; //T1中断一定不要使用,要不接收会错误
TR0 = 1;
TR1 = 0;
Uart(0xaa); //0xaa是发送的数据,如果接收有误,在发送一个字节后可加点延时//延时
While(1); //具体程序此处省略
}
注:因本人实验的硬件不需要模拟串口来接收数据,故没给出虚拟串口接收程序。

以上程序已验证成功。

相关主题