#include <STC12C5A60S2.H>
#include "intrins.h"
#define FOSC 11059200L
#define BAUD 9600
#define S2RI 0x01; //串口2接收bit
#define S2TI 0x02; //串口2发送bit
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void InitUart()
{
SCON=0x50;
TMOD=0x20;
TH1=TL1=-(FOSC/12/32/BAUD);
TR1=1;
TI=1;
}
void InitUart2()
{
S2CON=0x50;
AUXR|=0x14;
BRT=-(FOSC/32/BAUD);
S2CON|=S2TI;
}
void SendData2(unsigned char dat)
{
bit busy=S2CON&S2TI;
while(!busy)
{
busy=S2CON&S2TI;
}
S2CON&=~S2TI;
S2BUF=dat;
}
void SendData(unsigned char dat)
{
while(!TI);
TI=0;
SBUF=dat;
}
void main()
{
unsigned char ch = 0;
InitUart();
InitUart2();
while(1)
{
SendData(ch);
SendData2(ch);
ch++;
if(ch==8) ch=0;
Delay500ms();
Delay500ms();
}
}
如果需要定时器1也工作在12T模式,则需要做如下修改:
void InitUart()
{
SCON=0x50;
AUXR|=0x40;
TMOD=0x20;
TH1=TL1=-(FOSC/32/BAUD);
TR1=1;
TI=1;
}
此时修改BAUD的宏定义为115200,即可实现115200的波特率。
如果两个串口波特率相同,还可以直接修改成如下,并节省出一个定时器。
void InitUart()
{
SCON=0x50;
AUXR|=0x41;
TI=1;
}
上一篇:STC12C5A60S2读取ADC的值串口发送
下一篇:STC12C5A60S2使用NRF24L01和stm32通信
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BD90640EFJ-C 的参考设计
- RSO-1205S 5V、200mA输出DC/DC转换器典型应用电路
- 使用 Microchip Technology 的 TC38C47COE 的参考设计
- ZXTR2012Z 100V输入、12V 30Ma稳压晶体管的典型应用
- KIT33903BD3EVBE: 评估套件 - MC33903BD3,带CAN和LIN的第二代SBC
- MAXREFDES163#:工业磁传感器
- AD8604DRUZ-REEL 作为 DAC 输出缓冲器驱动重负载的典型应用
- BTN8982双路大电流电机驱动
- LT6657BHMS8-1.25 扩展电源范围基准的典型应用电路
- 使用 ON Semiconductor 的 NCP2860 的参考设计