"STC12C5A60S2单片机双串口通信实例及波特率设置"
版权申诉
95 浏览量
更新于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 上传
102 浏览量
2023-07-02 上传
点击了解资源详情
119 浏览量
2022-11-17 上传
春哥111
- 粉丝: 1w+
- 资源: 6万+
最新资源
- 英语学习常用网站 附写作翻译之类的网站
- SQLServer的简介和使用
- linux入门笔记.pdf 初学者学习linux的最佳选择
- Image segmentation by histogram thresholding
- 恺撒(caesar)密码
- Bookends user guide
- struts in action中文版1.2
- ARM微处理器教程全集
- 用U盘安装系统.doc
- 华为编程规范--相当的严谨
- showModalDialog()、showModelessDialog()方法的使用.
- DOOM启示录(中文版)
- linux内核源码分析0.11.pdf
- DOS工具箱使用方法
- java深入浅出设计模式
- 经典的CCNA笔记 十分精简 短小精悍