📄 uart.txt
字号:
串行通信接口
这是一个串行通信接口的实例
就是在单片机时钟频率在12MHz 波特率 9600bps 的通信方式下实现软件UART的发送程序。
#include <reg51.h>
#include<stdio.h>
sbit P10 = 0x90;
void uart_transmit(char ByteToBeSend);
xdata unsigned char TxByte=0;/*要发送的字节数据*/
unsigned char nTxIndex=0;/*发送单个字符的位指针*/
unsigned char nTxBit=0;/* 单个字符数据位*/
bit UartBusy=0;
main()
{
TMOD=0x01; /* 定时器0工作在方式1 */
EA=1; /* 全局中断允许 */
uart_transmit(0xAA);
while(1)
if(UartBusy==0) uart_transmit(0xAA);
}
void Timer0_Overflow() interrupt 1 using 0
{ if(nTxIndex<8)
{nTxBit=(TxByte>>nTxIndex)&0x01;
P10=nTxBit;/* 产生数据位 */
}
else if(nTxIndex==8)
P10=1;/* 产生停止位 */
TH0=0xFF; /* 写入计数初值到TH0 */
TL0=0x97; /* 写入计数初值到TL0 */
/* 1T后溢出 */
TF0=0; /* 定时器0中断标志位清0 */
if(nTxIndex==9)
{ET0=0; /*关闭定时器0中断*/
UartBusy=0; /*Uart发送完毕*/
nTxIndex=0; /* 接收下一个数据的D0位 */
}
nTxIndex++;
}
void uart_transmit(char ByteToBeSend)
{ TxByte=ByteToBeSend;
TH0=0xFF;
TL0=0x97; /* 写入计数初值到TL0 */
TR0=1; /* 定时器0准备开始 */
P10=0; /* 产生起始位*/
TF0=0; /* 定时器0中断标志位清0 */
ET0=1; /* 定时器0中断允许*/
UartBusy=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -