×
单片机 > 单片机程序设计 > 详情

51单片机IO口模拟串口通讯5

发布时间:2024-05-03 发布时间:
|

/***************************************************************

*在单片机上模拟了一个串口,使用P2.1作为发送端

*把单片机中存放的数据通过P2.1作为串口TXD发送出去

*本程序来源于《单片机IO口模拟串口程序(发送+接收)》

*硬件环境:11.0592MHz, TXD P2.1

***************************************************************/

#include

#include

#include

typedef unsigned char uchar;

int i;

uchar code info[] =

{

0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15

};

sbit newTXD = P2^1; //模拟串口的发送端设为P2.1

void UartInit()

{

SCON = 0x50; // SCON: serail mode 1, 8-bit UART

TMOD |= 0x21; // T0工作在方式1,十六位定时

PCON |= 0x80; // SMOD=1;

TH0 = 0xFE; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz

TL0 = 0x7F; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz

// TH0 = 0xFD; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=18.432MHz

// TL0 = 0x7F; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=18.432MHz

}

void WaitTF0(void)

{

while(!TF0);

TF0=0;

TH0=0xFE; // 定时器重装初值 fosc=11.0592MHz

TL0=0x7F; // 定时器重装初值 fosc=11.0592MHz

// TH0 = 0xFD; // 定时器重装初值 fosc=18.432MHz

// TL0 = 0x7F; // 定时器重装初值 fosc=18.432MHz

}

void WByte(uchar input)

{

//发送启始位

uchar j=8;

TR0=1;

newTXD=(bit)0;

WaitTF0();

//发送8位数据位

while(j--)

{

newTXD=(bit)(input&0x01); //先传低位

WaitTF0();

input=input>>1;

}

//发送校验位(无)

//发送结束位

newTXD=(bit)1;

WaitTF0();

TR0=0;

}

void Sendata()

{

for(i=0;i

{

WByte(info[i]);

}

}

void main()

{

UartInit();

Sendata();

while(1)

{;}

}


附抓取到的波形:


PC端接收到单片机发来的字符

看看波形,仔细数数1、2、3

放大看一看,哪个是起始位,哪个是8位数据位,哪个是停止位


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向