#include <STC12C5A60S2.H>
typedef unsigned char uchar ;
typedef unsigned int uint ;
uint Smog = 0 ;
void Uart_Init(void)
{
EA=1; //打开总中断
PCON &= 0x7F; //波特率不加倍
/*
定时器 串口模式和51一样
允许独立波特率发生器运行
串口2波特率不加倍
允许使用内部扩展RAM
独立波特率发生器作为波特率的发生器
*/
AUXR = 0x11;
BRT = 0xFD ; //波特率为9600
/*串口1*/
ES=1; //打开串口1中断回执
/*
工作在方式一
允许串行接收
SCON复位后全是0
可位寻址 TI RI
*/
SCON |= 0x50; //0101 0000
/*串口2*/
/*
工作在方式一
允许串行接收
S2CON复位后全是0
不可位寻址
S2TI S2RI
*/
S2CON |= 0x50;
IE2 |= 1 ; //IE2不可位寻址,使能ES2串口中断回调
}
void Uart1Bit(char dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void Uart1Byte(char *byte)
{
while(*byte != '\0')
{
Uart1Bit(*byte++);
}
}
void Uart2Bit(char dat)
{
S2BUF=dat;
while(!(S2CON&2)); //等待S2TI=1 说明发送完成
S2CON &= ~2 ; //清除 S2TI发送标志位
}
void Uart2Byte(char *byte)
{
while(*byte != '\0')
{
Uart2Bit(*byte++);
}
}
void main()
{
Uart_Init(); //涓插彛1鍒濆鍖?
while(1)
{
}
}
//=====================================================
void interUart1() interrupt 4
{
if(RI)
{
RI = 0 ;
Smog = SBUF ;
Uart1Byte("Uart1:");
Uart1Bit(Smog);
Uart1Byte("\r\n");
}
}
void interUart2() interrupt 8
{
if(S2CON&1) //S2RI=1说明接收完成
{
S2CON &= ~1 ; //清除接收完成标志位
Smog = S2BUF ;
Uart2Byte("Uart2:");
Uart2Bit(Smog);
Uart2Byte("\r\n");
}
}
链接:https://pan.baidu.com/s/1FJbavsypA5jrPvuOCikW5g
提取码:1111
复制这段内容后打开百度网盘手机App,操作更方便哦