STC8H1K28 串口与上位机收发代码
时间: 2023-12-27 09:03:40 浏览: 157
以下是STC8H1K28单片机串口与上位机收发代码示例:
```
#include <STC8.H>
#define FOSC 24000000L
#define BAUD 115200L
unsigned char idata buf[64]; // 定义缓冲区
unsigned char idata idx = 0; // 定义缓冲区指针
void InitUART()
{
SCON = 0x50; // 8位数据,可变波特率
TMOD &= 0x0F; // 设置定时器1为模式2
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD); // 设置波特率重装值
TR1 = 1; // 启动定时器1
ES = 1; // 使能串口中断
EA = 1; // 使能总中断
}
void SendByte(unsigned char dat)
{
SBUF = dat; // 发送数据
while(TI == 0); // 等待发送完成
TI = 0; // 清除发送完成标志
}
void SendString(unsigned char *s)
{
while(*s)
{
SendByte(*s++);
}
}
void main()
{
InitUART(); // 初始化UART
while(1)
{
if(idx > 0) // 如果缓冲区有数据
{
SendString(buf); // 发送数据
idx = 0; // 清空缓冲区指针
}
}
}
void UART_ISR() interrupt 4
{
if(RI) // 如果接收到数据
{
buf[idx++] = SBUF; // 读取数据到缓冲区
RI = 0; // 清除接收中断标志
}
}
```
在上面的代码中,串口的波特率为115200,数据位为8位,无校验,停止位为1位。在串口接收中断中,将接收到的数据存入缓冲区中,并在主程序中判断缓冲区是否有数据,如果有则发送数据。发送数据时,先判断发送完成标志TI是否为1,如果为0则等待发送完成。
阅读全文