Contents ...
udn網路城邦
51 波特率9600副程式
2024/09/06 23:44
瀏覽30
迴響0
推薦0
引用0
// 初始化 UART,设置波特率为 9600

void uart_init(void) {

    TMOD = 0x20;  // 设置定时器 1 为模式 2(8 位自动重装)

    TH1 = 0xFD;   // 9600 波特率 (当晶振频率为 11.0592 MHz 时)

    TR1 = 1;      // 启动定时器 1

    SCON = 0x50;  // 8 位数据,1 个停止位,REN 使能接收

    TI = 1;       // 初始化发送标志位

}


// 串行发送字符

void uart_transmit(char data) {

    SBUF = data;  // 把数据加载到串行缓冲区

    while (TI == 0);  // 等待发送完成

    TI = 0;  // 清除发送中断标志

}


// 串行接收字符

char uart_receive(void) {

    while (RI == 0);  // 等待接收完成

    RI = 0;  // 清除接收中断标志

    return SBUF;  // 返回接收到的数据

}


TMOD = 0x20: 设置定时器 1 为模式 2(8 位自动重装)。

TH1 = 0xFD: 设置定时器 1 的重装值,确保波特率为 9600(假设晶振频率为 11.0592 MHz)。

TR1 = 1: 启动定时器 1。

SCON = 0x50: 设置串行模式为模式 1(8 位数据,1 个停止位,允许接收)。

TI = 1: 初始化发送中断标志,表示准备发送数据。

uart_transmit(): 发送数据的副程式,将数据加载到 SBUF 中并等待发送完成。

uart_receive(): 接收数据的副程式,等待直到数据接收到并返回数据。
全站分類:興趣嗜好 其他
自訂分類:8051
上一則: 波特率計算 c語言
下一則: 51 LCD副程式
你可能會有興趣的文章:

限會員,要發表迴響,請先登入