STC12C5A60S2单片机双串口通信

  • 格式:docx
  • 大小:24.25 KB
  • 文档页数:24

下载文档原格式

  / 30
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STC12C5A60S2单片机双串口通信

STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作

与传统51单片机串行口相同;特殊的是STC12C5A60S2

单片机内部有一个独立波特率发生器,串口1可以使用

定时器1作为波特率发生器,也可以使用独立波特率发

生器作为波特率发生器;而串口2只能使用独立波特率

发生器作为波特率发生器。

下面是一段双串口通信的程序:

/************************************************ ***********************

时间:2012.11.24

芯片:STC12C5A60S2

晶振:22.1184MHz 波特率:9600bps

引脚定义:串行口1:发送

————TxD/P3.1;接收

————RxD/P3.0

串行口2:发送

————TxD2/P1.3;接收

————RxD2/P1.2

功能描述:STC12双串口通信(中断方式)

当串行口1接收数据后,将此数据由串行口2发送出去

当串行口2接收数据后,将此数据由串行口1发送出去

************************************************* **********************/

#include;

#define S2RI 0x01//串口2接收中断请求标志位

#define S2TI 0x02//串口2发送中断请求标志位unsigned char flag1,flag2,temp1,temp2;

/****************串行口初始化函数

****************/

void InitUART(void)

{

TMOD = 0x20; //定时器1工作在方式2 8位自动重装

SCON = 0x50; //串口1工作在方式1 10位异步收发 REN=1允许接收

TH1 = 0xFA; //定时器1初值

TL1 = TH1;

TR1 = 1; //定时器1开始计数

EA =1;//开总中断

ES =1;//开串口1中断

S2CON = 0x50; //串口2工作在方式1 10位异步收发 S2REN=1允许接收

BRT = 0xFA; //独立波特率发生器初值

AUXR = 0x10; //BRTR=1 独立波特率发生器开始计数

IE2 =0x01;//开串口2中断 ES2=1

}

/****************串行口1发送****************/ void UART_1SendOneByte(unsigned char c)

{

SBUF = c;

while(!TI); //若TI=0,在此等待

TI = 0;

}

/****************串行口2发送****************/ void UART_2SendOneByte(unsigned char c)

{

S2BUF = c;

while(!(S2CON&S2TI)); //若S2TI=0,在此等待 S2CON&=~S2TI; //S2TI=0

}

/*****************主函数******************/ void main(void)

{

InitUART();//串行口初始化

while(1)

{

//如果串口1接收到数据,将此数据由串口2发送

if(flag1==1)

{

flag1=0;

UART_2SendOneByte(temp1);

}

//如果串口2接收到数据,将此数据由串口1发送

if(flag2==1)

{

flag2=0;

UART_1SendOneByte(temp2);

}

}

}

/************串行口1中断处理函数*************/ void UART_1Interrupt(void) interrupt 4

{

if(RI==1)

{

RI=0;

flag1=1;

temp1=SBUF;

}

}

/************串行口2中断处理函数*************/ void UART_2Interrupt(void) interrupt 8

{

if(S2CON&S2RI)

{

S2CON&=~S2RI;

flag2=1;

temp2=S2BUF;

}

}

12C5A60S2.h的头文件如下:

//--------------------------------------------------------------------------------

//新一代 1T 8051系列单片机内核特殊功能寄存器 C51