写一段STC15W4K32S4的串口程序要能收发字符串

下面是一个简单的STC15W4K32S4串口程序示例,可以实现收发字符串的功能:

#include <stc15w4k32s4.h>

#define FOSC 11059200UL    // 系统时钟频率,这里假设为11.0592MHz
#define BAUD 9600          // 串口波特率,这里假设为9600bps

void init_uart() {
    // 配置波特率发生器
    unsigned int divisor;
    divisor = FOSC / 4 / BAUD;
    SCON = 0x50;    // 设置串口工作模式为8位数据位、可变波特率
    TMOD &= 0x0F;   // 清除定时器1设置
    TMOD |= 0x20;   // 设置定时器1为模式2(8位自动重装载)
    TH1 = TL1 = 0xFD;   // 设置定时器1初值
    TR1 = 1;    // 启动定时器1
    PCON |= 0x80;   // SM0=0,即串口工作在模式1(8位波特率可变)下

    // 配置串口引脚
    P2 = P2 | 0xC0;     // P2.6和P2.7设置为推挽输出模式
    P_SW2 &= ~0xC0;     // P_SW2.6和P_SW2.7设置为0,使P2.6和P2.7引脚工作在串口模式下
}

void send_char(unsigned char c) {
    SBUF = c;
    while (!TI);    // 等待发送完成
    TI = 0;         // 清除发送完成标志位
}

void send_string(unsigned char *str) {
    while (*str) {
        send_char(*str++);
    }
}

void receive_string(unsigned char *buf, unsigned int len) {
    unsigned int i;
    for (i = 0; i < len; i++) {
        while (!RI);    // 等待接收完成
        RI = 0;         // 清除接收完成标志位
        buf[i] = SBUF;
    }
}

void main() {
    unsigned char receive_buf[32];
    init_uart();
    EA = 1;     // 允许中断
    while (1) {
        send_string("Please enter a string: ");
        receive_string(receive_buf, sizeof(receive_buf));
        send_string("You entered: ");
        send_string(receive_buf);
        send_string("\r\n");
    }
}

这段程序使用STC15W4K32S4的串口模块实现收发字符串的功能。首先通过init_uart()函数对串口进行初始化配置,包括设置波特率发生器和配置串口引脚。然后,通过send_char()函数和send_string()函数实现发送字符串的功能。send_char()函数用于发送单个字符,send_string()函数通过循环调用send_char()函数发送整个字符串。最后,通过receive_string()函数实现接收字符串的功能,该函数通过循环接收指定长度的字符,并存储到指定的缓冲区中。在main()函数中,使用一个循环不断接收用户输入的字符串,并将其原样发送回去

标签: 科技


原文地址: https://cveoy.top/t/topic/h9yu 著作权归作者所有。请勿转载和采集!