写一段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 著作权归作者所有。请勿转载和采集!