STC8A8K串口通讯多字节收发发程序,如串口发送123,接收到123
时间: 2024-03-09 11:45:31 浏览: 16
好的,以下是STC8A8K串口通讯多字节收发的程序示例:
```c
#include <STC8.H>
#define FOSC 24000000UL // 系统时钟频率
#define BAUD 9600 // 串口波特率
#define TIMER1_RELOAD (65536UL - (FOSC / 4 / BAUD)) // 计算定时器初值
unsigned char receive_buf[10]; // 接收缓冲区,最大可接收10个字节
unsigned char receive_len = 0; // 接收到的字节数
void uart_init()
{
PCON &= 0x7F; // 波特率不加倍
SCON = 0x50; // 8位数据,可变波特率
AUXR |= 0x04; // 定时器1时钟为Fosc/4
TMOD &= 0x0F; // 设定定时器1为16位自动重载模式
TL1 = TIMER1_RELOAD; // 装初值
TH1 = TIMER1_RELOAD >> 8;
TR1 = 1; // 启动定时器1
ES = 1; // 使能串口中断
EA = 1; // 开启总中断
}
void uart_send(unsigned char dat)
{
SBUF = dat; // 写数据到串口发送缓冲区
while(TI == 0); // 等待发送完成
TI = 0; // 清除发送完成标志
}
void uart_send_string(unsigned char *str)
{
while(*str)
uart_send(*str++);
}
void uart_receive() interrupt 4
{
if(RI) // 判断是否接收到数据
{
RI = 0; // 清除接收标志
receive_buf[receive_len++] = SBUF; // 保存接收数据到缓冲区
if(receive_len >= 10) // 缓冲区满了
receive_len = 0; // 重置缓冲区
}
}
void main()
{
uart_init(); // 初始化串口
uart_send_string("Please input 3 characters:\r\n");
while(receive_len < 3); // 等待接收3个字符
uart_send_string("The received characters are: ");
uart_send_string(receive_buf); // 发送接收到的字符
while(1); // 程序结束
}
```
该程序会不断等待串口接收到3个字符后,将其保存到接收缓冲区,并将接收到的字符再发送出去。你可以根据需要修改该程序来实现你的需求。