不用很复杂的,就两步:1)设定一个内部定时器作为波特率发生器,例如用T1,做下必要的设置如下:
void InitUart()//串口初始化函数
{
SCON = 0x50; //T1工作于方式1
TMOD = 0x20; //T1 8位自动重装
TH1 = 0xf3; //晶体12MHz\波特率2400,其他波特率要重新计算
TR1 = 1; //启动T1
}
2)写个串口发送程序如下:
void SendData(uint dat)//MCU串口数据输出函数
{
SBUF = dat;
while (!TI);
TI = 0;
}
//这里要注意这三条语句的顺序!
应用如下:
/*********主函数***********************************/
main()
{
InitUart();
while(1)
{
ShowResult(10);//可以发送10进制或16进制数据,串口助手里要设定16进制接收
Delay(50);
}
}
//做演示时,要有一个毫秒延时函数相配合;对于普通C51单片机延时可小些,对于1T单片机延时要大些,视数据显示的速度而定,真实应用时,根据具体情况而定。
#include
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void main(void)
{
InitUART();
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
//add your code here!
}
else
TI = 0;
}
//设定计时器的初值就是设定了波特率 那个sendonebyte函数就是发送(
//发送是按照一个字节一个字节的发送)
只要在初始化时设置好波特率等,往里面写就会自动发出去了
他是串行数据传输,我觉得SUBF可能是在上升\下降沿=时,数据锁存和数据输出(从器件中输出出来),你设置定时器1就是给他一个脉冲,提供上升\下降沿。