"STC12C5A60S2单片机双串口通信实例及波特率设置"
版权申诉
51 浏览量
更新于2024-03-28
收藏 35KB DOCX 举报
STC12C5A60S2 单片机是一款功能比较强大的单片机,具有两个全双工串行通信接口。其中,串口1的功能及操作与传统51单片机串行口相同,但内部有一个独立波特率发生器,可以选择定时器1或独立波特率发生器作为波特率发生器。而串口2只能使用独立波特率发生器。
下面是一段双串口通信的程序示例:
/***********************************************************************
时间:2012.11.24
芯片:STC12C5A60S2
晶振:22.1184MHz
波特率:9600bps
引脚定义:
串口1:发送端口P3.1,接收端口P3.0
串口2:发送端口P3.2,接收端口P3.3
***********************************************************************/
#include <STC12C5A60S2.H>
#define FOSC 22118400UL
#define BAUD 9600
void UART1_Init()
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 256 - FOSC/12/32/BAUD;
TL1 = TH1;
ET1 = 0;
TR1 = 1;
}
void UART2_Init()
{
S2CON = 0x50;
T2L = (65536 - FOSC/4/BAUD);
T2H = (65536 - FOSC/4/BAUD) >> 8;
AUXR |= 0x14;
AUXR &= 0xFE;
IE2 |= 0x01;
}
void UART1_SendByte(unsigned char dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
unsigned char UART1_ReceiveByte()
{
unsigned char dat;
while(RI == 0);
dat = SBUF;
RI = 0;
return dat;
}
void UART2_SendByte(unsigned char dat)
{
S2BUF = dat;
while(!TI2);
TI2 = 0;
}
unsigned char UART2_ReceiveByte()
{
unsigned char dat;
while(!RI2);
dat = S2BUF;
RI2 = 0;
return dat;
}
void main()
{
UART1_Init();
UART2_Init();
while(1)
{
unsigned char dat1, dat2;
dat1 = UART1_ReceiveByte();
dat2 = UART2_ReceiveByte();
UART1_SendByte(dat2);
UART2_SendByte(dat1);
}
}
这段代码演示了如何利用STC12C5A60S2单片机的双串口通信功能,通过串口1接收数据,然后通过串口2发送出去;同时通过串口2接收数据,然后通过串口1发送出去,实现了双串口之间的数据交换。通过这个例子,展示了STC12C5A60S2单片机在双串口通信方面的强大功能和灵活性。
2022-12-17 上传
2022-06-25 上传
2023-07-02 上传
点击了解资源详情
2021-10-02 上传
2022-11-17 上传
春哥111
- 粉丝: 1w+
- 资源: 5万+
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程