STC12C5A60S2 双串口

/********************************************************
函数功能 :	串口初始化
入口参数 :  波特率 Baud
返 回 值 :  
说  明 	 :	查看有文件是否宏定义串口来决策是否初始化该串口
********************************************************/
void UART_Init(unsigned int Baud)		//9600bps@11.0592MHz
{

//串口1

  PCON &= 0x7F;				//波特率不倍速
	SCON = 0x50;				//8位数据,可变波特率

//串口2

	AUXR &= 0xF7;				//波特率不倍速
	S2CON = 0x50;				//8位数据,可变波特率


  //公用部分
	AUXR = 0x04;				//独立波特率发生器时钟为Fosc,即1T
	BRT = 256-(FOSC/32)/Baud;		    //设定独立波特率发生器重装值
	AUXR |= 0x01;				//串口1选择独立波特率发生器为波特率发生器
	AUXR |= 0x10;				//启动独立波特率发生器

	IE2 = 0x01;                 //使能串口2中断
	ES = 1;						//使能串口1中断
	TI = 0; 
	EA = 1;						//开总中断

}


/********************************************************
函数功能 :	串口1发送数据
入口参数 :  dat-一个字节
返 回 值 :  
说  明 	 :
********************************************************/
void Uart1_Send(unsigned char dat)
{
    SBUF = dat; 
    while(TI == 0 ); 
    TI = 0; 
}

void UART_Str(unsigned char *s)
{

	while(*s)
	{
		Uart1_Send(*s);
		s++;
	}	
}

/********************************************************
函数功能 :	串口1中断入口函数
入口参数 :  无
返 回 值 :  无
说  明 	 :
********************************************************/
void Uart1() interrupt 4 
{
	
	unsigned char res=0 ;
	if(RI)
	{
	   RI=0 ;	   
	}
   
}

bit busy;
void Uart2_Send(u8 dat)
{
    while (busy);           //Wait for the completion of the previous data is sent
    ACC = dat;              //Calculate the even parity bit P (PSW.0)
    busy = 1;
    S2BUF = ACC;            //Send data to UART2 buffer
}

/********************************************************
函数功能 :	串口2中断入口函数
入口参数 :  无
返 回 值 :  无
说  明 	 :
********************************************************/
void Uart2() interrupt 8 
{	
	
    if (S2CON & S2RI)
    {    
      S2CON &= ~S2RI;     //清除串口2标志位 
    }

    //清除接收标志位
    if (S2CON & S2TI)
    {
	
        S2CON &= ~S2TI;     //Clear transmit interrupt flag
        busy = 0;           //Clear transmit busy flag
    }
 
}
 
	

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值