STC12C5A60S2单片机双串口通信.docx
- 文档编号:17212400
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:12
- 大小:19KB
STC12C5A60S2单片机双串口通信.docx
《STC12C5A60S2单片机双串口通信.docx》由会员分享,可在线阅读,更多相关《STC12C5A60S2单片机双串口通信.docx(12页珍藏版)》请在冰点文库上搜索。
STC12C5A60S2单片机双串口通信
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;
#defineS2RI0x01//串口2接收中断请求标志位
#defineS2TI0x02//串口2发送中断请求标志位
unsignedcharflag1,flag2,temp1,temp2;
/****************串行口初始化函数****************/
voidInitUART(void)
{
TMOD=0x20;//定时器1工作在方式28位自动重装
SCON=0x50;//串口1工作在方式110位异步收发REN=1允许接收
TH1=0xFA;//定时器1初值
TL1=TH1;
TR1=1;//定时器1开始计数
EA=1;//开总中断
ES=1;//开串口1中断
S2CON=0x50;//串口2工作在方式110位异步收发S2REN=1允许接收
BRT=0xFA;//独立波特率发生器初值
AUXR=0x10;//BRTR=1独立波特率发生器开始计数
IE2=0x01;//开串口2中断ES2=1
}
/****************串行口1发送****************/
voidUART_1SendOneByte(unsignedcharc)
{
SBUF=c;
while(!
TI);//若TI=0,在此等待
TI=0;
}
/****************串行口2发送****************/
voidUART_2SendOneByte(unsignedcharc)
{
S2BUF=c;
while(!
(S2CON&S2TI));//若S2TI=0,在此等待
S2CON&=~S2TI;//S2TI=0
}
/*****************主函数******************/
voidmain(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中断处理函数*************/
voidUART_1Interrupt(void)interrupt4
{
if(RI==1)
{
RI=0;
flag1=1;
temp1=SBUF;
}
}
/************串行口2中断处理函数*************/
voidUART_2Interrupt(void)interrupt8
{
if(S2CON&S2RI)
{
S2CON&=~S2RI;
flag2=1;
temp2=S2BUF;
}
}
12C5A60S2.h的头文件如下:
//--------------------------------------------------------------------------------
//新一代1T8051系列单片机内核特殊功能寄存器C51CoreSFRs
//76543210ResetValue
sfrACC=0xE0;//Accumulator0000,0000
sfrB=0xF0;//BRegister0000,0000
sfrPSW=0xD0;//ProgramStatusWordCYACF0RS1RS0OVF1P0000,0000
//-----------------------------------
sbitCY=PSW^7;
sbitAC=PSW^6;
sbitF0=PSW^5;
sbitRS1=PSW^4;
sbitRS0=PSW^3;
sbitOV=PSW^2;
sbitP=PSW^0;
//-----------------------------------
sfrSP=0x81;//StackPointer0000,0111
sfrDPL=0x82;//DataPointerLowByte0000,0000
sfrDPH=0x83;//DataPointerHighByte0000,0000
//--------------------------------------------------------------------------------
//新一代1T8051系列单片机系统管理特殊功能寄存器
//76543210ResetValue
sfrPCON=0x87;//PowerControlSMODSMOD0LVDFPOFGF1GF0PDIDL0001,0000
//76543210ResetValue
sfrAUXR=0x8E;//AuxiliaryRegisterT0x12T1x12UART_M0x6BRTRS2SMODBRTx12EXTRAMS1BRS0000,0000
//-----------------------------------
sfrAUXR1=0xA2;//AuxiliaryRegister1-PCA_P4SPI_P4S2_P4GF2ADRJ-DPS0000,0000
/*
PCA_P4:
0,缺省PCA在P1口
1,PCA/PWM从P1口切换到P4口:
ECI从P1.2切换到P4.1口,
PCA0/PWM0从P1.3切换到P4.2口
PCA1/PWM1从P1.4切换到P4.3口
SPI_P4:
0,缺省SPI在P1口
1,SPI从P1口切换到P4口:
SPICLK从P1.7切换到P4.3口
MISO从P1.6切换到P4.2口
MOSI从P1.5切换到P4.1口
SS从P1.4切换到P4.0口
S2_P4:
0,缺省UART2在P1口
1,UART2从P1口切换到P4口:
TxD2从P1.3切换到P4.3口
RxD2从P1.2切换到P4.2口
GF2:
通用标志位
ADRJ:
0,10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器
1,10位A/D转换结果的最高2位放在ADC_RES寄存器的低2位,低8位放在ADC_RESL寄存器
DPS:
0,使用缺省数据指针DPTR0
1,使用另一个数据指针DPTR1
*/
//-----------------------------------
sfrWAKE_CLKO=0x8F;//附加的SFRWAK1_CLKO
/*
76543210ResetValue
PCAWAKEUPRXD_PIN_IET1_PIN_IET0_PIN_IELVD_WAKE_T1CLKOT0CLKO0000,0000B
b7-PCAWAKEUP:
PCA中断可唤醒powerdown。
b6-RXD_PIN_IE:
当P3.0(RXD)下降沿置位RI时可唤醒powerdown(必须打开相应中断)。
b5-T1_PIN_IE:
当T1脚下降沿置位T1中断标志时可唤醒powerdown(必须打开相应中断)。
b4-T0_PIN_IE:
当T0脚下降沿置位T0中断标志时可唤醒powerdown(必须打开相应中断)。
b3-LVD_WAKE:
当CMPIN脚低电平置位LVD中断标志时可唤醒powerdown(必须打开相应中断)。
b2-
b1-T1CLKO:
允许T1CKO(P3.5)脚输出T1溢出脉冲,Fck1=1/2T1溢出率
b0-T0CLKO:
允许T0CKO(P3.4)脚输出T0溢出脉冲,Fck0=1/2T1溢出率
*/
//-----------------------------------
sfrCLK_DIV=0x97;//ClockDivder-----CLKS2CLKS1CLKS0xxxx,x000
//-----------------------------------
sfrBUS_SPEED=0xA1;//Stretchregister--ALES1ALES0-RWS2RWS1RWS0xx10,x011
/*
ALES1andALES0:
00:
TheP0addresssetuptimeandholdtimetoALEnegativeedgeisoneclockcycle
01:
TheP0addresssetuptimeandholdtimetoALEnegativeedgeistwoclockcycles.
10:
TheP0addresssetuptimeandholdtimetoALEnegativeedgeisthreeclockcycles.(default)
11:
TheP0addresssetuptimeandholdtimetoALEnegativeedgeisfourclockcycles.
RWS2,RWS1,RWS0:
000:
TheMOVXread/writepulseis1clockcycle.
001:
TheMOVXread/writepulseis2clockcycles.
010:
TheMOVXread/writepulseis3clockcycles.
011:
TheMOVXread/writepulseis4clockcycles.(default)
100:
TheMOVXread/writepulseis5clockcycles.
101:
TheMOVXread/writepulseis6clockcycles.
110:
TheMOVXread/writepulseis7clockcycles.
111:
TheMOVXread/writepulseis8clockcycles.
*/
//--------------------------------------------------------------------------------
//新一代1T8051系列单片机中断特殊功能寄存器
//有的中断控制、中断标志位散布在其它特殊功能寄存器中,这些位在位地址中定义
//其中有的位无位寻址能力,请参阅新一代1T8051系列单片机中文指南
//76543210ResetValue
sfrIE=0xA8;//中断控制寄存器EAELVDEADCESET1EX1ET0EX00x00,0000
//-----------------------
sbitEA=IE^7;
sbitELVD=IE^6;//低压监测中断允许位
sbitEADC=IE^5;//ADC中断允许位
sbitES=IE^4;
sbitET1=IE^3;
sbitEX1=IE^2;
sbitET0=IE^1;
sbitEX0=IE^0;
//-----------------------
sfrIE2=0xAF;//AuxiliaryInterrupt------ESPIES20000,0000B
//-----------------------
//76543210ResetValue
sfrIP=0xB8;//中断优先级低位PPCAPLVDPADCPSPT1PX1PT0PX00000,0000
//--------
sbitPPCA=IP^7;//PCA模块中断优先级
sbitPLVD=IP^6;//低压监测中断优先级
sbitPADC=IP^5;//ADC中断优先级
sbitPS=IP^4;
sbitPT1=IP^3;
sbitPX1=IP^2;
sbitPT0=IP^1;
sbitPX0=IP^0;
//-----------------------
//76543210ResetValue
sfrIPH=0xB7;//中断优先级高位PPCAHPLVDHPADCHPSHPT1HPX1HPT0HPX0H0000,0000
sfrIP2=0xB5;//------PSPIPS2xxxx,xx00
sfrIPH2=0xB6;//------PSPIHPS2Hxxxx,xx00
//-----------------------
//新一代1T8051系列单片机I/O口特殊功能寄存器
//76543210ResetValue
sfrP0=0x80;//8bitPort0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.01111,1111
sfrP0M0=0x94;//0000,0000
sfrP0M1=0x93;//0000,0000
sfrP1=0x90;//8bitPort1P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.01111,1111
sfrP1M0=0x92;//0000,0000
sfrP1M1=0x91;//0000,0000
sfrP1ASF=0x9D;//P1analogspecialfunction
sfrP2=0xA0;//8bitPort2P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.01111,1111
sfrP2M0=0x96;//0000,0000
sfrP2M1=0x95;//0000,0000
sfrP3=0xB0;//8bitPort3P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.01111,1111
sfrP3M0=0xB2;//0000,0000
sfrP3M1=0xB1;//0000,0000
sfrP4=0xC0;//8bitPort4P4.7P4.6P4.5P4.4P4.3P4.2P4.1P4.01111,1111
sfrP4M0=0xB4;//0000,0000
sfrP4M1=0xB3;//0000,0000
//76543210ResetValue
sfrP4SW=0xBB;//Port-4switch-LVD_P4.6ALE_P4.5NA_P4.4----x000,xxxx
sfrP5=0xC8;//8bitPort5----P5.3P5.2P5.1P5.0xxxx,1111
sfrP5M0=0xCA;//0000,0000
sfrP5M1=0xC9;//0000,0000
//--------------------------------------------------------------------------------
//新一代1T8051系列单片机定时器特殊功能寄存器
//76543210ResetValue
sfrTCON=0x88;//T0/T1ControlTF1TR1TF0TR0IE1IT1IE0IT00000,0000
//-----------------------------------
sbitTF1=TCON^7;
sbitTR1=TCON^6;
sbitTF0=TCON^5;
sbitTR0=TCON^4;
sbitIE1=TCON^3;
sbitIT1=TCON^2;
sbitIE0=TCON^1;
sbitIT0=TCON^0;
//-----------------------------------
sfrTMOD=0x89;//T0/T1ModesGATE1C/T1M1_1M1_0GATE0C/T0M0_1M0_00000,0000
sfrTL0=0x8A;//T0LowByte0000,0000
sfrTH0=0x8C;//T0HighByte0000,0000
sfrTL1=0x8B;//T1LowByte0000,0000
sfrTH1=0x8D;//T1HighByte0000,0000
//--------------------------------------------------------------------------------
//新一代1T8051系列单片机串行口特殊功能寄存器
//76543210ResetValue
sfrSCON=0x98;//SerialControlSM0/FESM1SM2RENTB8RB8TIRI0000,0000
//-----------------------------------
sbitSM0=SCON^7;//SM0/FE
sbitSM1=SCON^6;
sbitSM2=SCON^5;
sbitREN=SCON^4;
sbitTB8=SCON^3;
sbitRB8=SCON^2;
sbitTI=SCON^1;
sbitRI=SCON^0;
//-----------------------------------
sfrSBUF=0x99;//SerialDataBufferxxxx,xxxx
sfrSADEN=0xB9;//SlaveAddressMask0000,0000
sfrSADDR=0xA9;//SlaveAddress0000,0000
//-----------------------------------
//76543210ResetValue
sfrS2CON=0x9A;//S2ControlS2SM0S2SM1S2SM2S2RENS2TB8S2RB8S2TIS2RI00000000B
sfrS2BUF=0x9B;//S2SerialBufferxxxx,xxxx
sfrBRT=0x9C;//S2Baud-RateTimer0000,0000
//--------------------------------------------------------------------------------
//新一代1T8051系列单片机看门狗定时器特殊功能寄存器
sfrWDT_CONTR=0xC1;//Watch-Dog-TimerControlregister
//76543210ResetValue
//WDT_FLAG-EN_WDTCLR_WDTIDLE_WDTPS2PS1PS0xx00,0000
//-----------------------
//--------------------------------------------------------------------------------
//新一代1T8051系列单片机PCA/PWM特殊功能寄存器
//76543210ResetValue
sfrCCON=0xD8;//PCA控制寄存器。
CFCR----CCF1CCF000xx,xx00
//-----------------------
sbitCF=CCON^7;//PCA计数器溢出标志,由硬件或软件置位,必须由软件清0。
sbitCR=CCON^6;//1:
允许PCA计数器计数,必须由软件清0。
//-
//-
sbitCCF1=CCON^1;//PCA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STC12C5A60S2 单片机 串口 通信
![提示](https://static.bingdoc.com/images/bang_tan.gif)