主页 > 开源代码  > 

蓝桥杯篇---IAP15F2K61S2串口

蓝桥杯篇---IAP15F2K61S2串口

文章目录 前言简介串口通信的基本参数1.波特率2.数据位3.停止位4.校验位 串口相关寄存器1.SCON2.SBUF3.PCON4.TMOD5.TH1/TL1 串口使用步骤1.配置波特率2.配置串口模式3.使能串口中断4.发送数据5.接收数据6.处理中断 示例代码:串口发送与接收示例代码:串口接收数据并回显注意事项1.波特率设置2.中断优先级3.数据缓冲区4.错误处理 总结


前言

本文仅仅简单介绍了IAP15F2K61S2的串口的使用。


简介

IAP15F2K61S2 是一款基于8051内核的单片机,内置一个全双工的串行通信接口(UART),支持异步串行通信。串口通信是单片机与外部设备(如PC、传感器、其他单片机等)进行数据交换的常用方式。

串口通信的基本参数 1.波特率

波特率:数据传输速率,常见值有9600、19200、38400、57600、115200等。

2.数据位

数据位:每帧数据的位数,通常为8位。

3.停止位

停止位:每帧数据结束的标志位,通常为1位。

4.校验位

校验位:用于错误检测,可以是无校验、奇校验或偶校验。

串口相关寄存器 1.SCON

SCON(串口控制寄存器):配置串口的工作模式和状态。

2.SBUF

SBUF(串口数据缓冲器):用于发送和接收数据。

3.PCON

PCON(电源控制寄存器):包含波特率加倍控制位(SMOD)。

4.TMOD

TMOD(定时器模式寄存器):用于配置定时器以生成波特率。

5.TH1/TL1

TH1/TL1:定时器1的初值寄存器,用于波特率生成。

串口使用步骤 1.配置波特率

配置波特率:通过定时器1设置波特率。

2.配置串口模式

配置串口模式:设置 SCON 寄存器。

3.使能串口中断

使能串口中断:如果需要中断方式接收数据,需配置 IE 寄存器。

4.发送数据

发送数据:将数据写入 SBUF。

5.接收数据

接收数据:从 SBUF 读取数据。

6.处理中断

处理中断:在中断服务函数中处理接收或发送完成事件。

示例代码:串口发送与接收

以下代码展示了如何使用串口在 IAP15F2K61S2 上实现数据的发送与接收。

#include <reg52.h> #define uchar unsigned char #define uint unsigned int void UART_Init() { SCON = 0x50; // 串口模式1,8位数据,1位停止位 TMOD |= 0x20; // 定时器1,模式2(8位自动重装) TH1 = 0xFD; // 波特率9600 TL1 = 0xFD; ES = 1; // 使能串口中断 EA = 1; // 使能总中断 TR1 = 1; // 启动定时器1 } void UART_SendByte(uchar dat) { SBUF = dat; // 将数据写入SBUF while (!TI); // 等待发送完成 TI = 0; // 清除发送中断标志 } void UART_SendString(char *str) { while (*str) { UART_SendByte(*str++); // 逐个发送字符 } } void UART_ISR() interrupt 4 { if (RI) { // 如果接收中断标志置位 RI = 0; // 清除接收中断标志 P1 = SBUF; // 将接收到的数据输出到P1口 } } void main() { UART_Init(); // 初始化串口 UART_SendString("Hello, World!\n"); // 发送字符串 while (1); // 主循环,等待中断 } 代码说明 UART_Init: 设置串口为模式1(8位数据,1位停止位)。 配置定时器1为模式2(8位自动重装),设置波特率为9600。 使能串口中断和总中断。 启动定时器1。 UART_SendByte: 将数据写入 SBUF,启动发送。 等待发送完成(TI = 1),并清除发送中断标志。 UART_SendString: 逐个发送字符串中的字符。 UART_ISR: 串口中断服务函数,接收数据并将其输出到P1口。 main: 初始化串口,发送字符串 "Hello, World!",进入主循环等待中断。 示例代码:串口接收数据并回显

以下代码展示了如何使用串口在 IAP15F2K61S2 上实现数据接收并回显。

#include <reg52.h> #define uchar unsigned char #define uint unsigned int void UART_Init() { SCON = 0x50; // 串口模式1,8位数据,1位停止位 TMOD |= 0x20; // 定时器1,模式2(8位自动重装) TH1 = 0xFD; // 波特率9600 TL1 = 0xFD; ES = 1; // 使能串口中断 EA = 1; // 使能总中断 TR1 = 1; // 启动定时器1 } void UART_SendByte(uchar dat) { SBUF = dat; // 将数据写入SBUF while (!TI); // 等待发送完成 TI = 0; // 清除发送中断标志 } void UART_ISR() interrupt 4 { if (RI) { // 如果接收中断标志置位 RI = 0; // 清除接收中断标志 UART_SendByte(SBUF); // 将接收到的数据回显 } } void main() { UART_Init(); // 初始化串口 while (1); // 主循环,等待中断 } 代码说明 UART_Init: 初始化串口,设置波特率为9600。 UART_SendByte: 发送一个字节的数据。 UART_ISR: 串口中断服务函数,接收数据并回显。 main: 初始化串口,进入主循环等待中断。 注意事项 1.波特率设置

波特率设置:波特率需要与通信设备一致,否则会导致通信失败。

2.中断优先级

中断优先级:如果有多个中断,需合理设置中断优先级。

3.数据缓冲区

数据缓冲区:在实际应用中,可能需要使用缓冲区来存储接收到的数据。

4.错误处理

错误处理:在实际应用中,需考虑**通信错误(如帧错误、溢出错误)**的处理。


总结

通过以上代码和说明,你可以在 IAP15F2K61S2 上实现串口通信功能,包括数据发送、接收和回显。实际开发中可以根据需求扩展功能,如协议解析、数据校验等。

标签:

蓝桥杯篇---IAP15F2K61S2串口由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“蓝桥杯篇---IAP15F2K61S2串口