⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 STC12c5a60s2双串口通信
💻 C
字号:
#include  "STC12C5A60S2.H"
#include  "Uart.h"
//========================================
#define   RELOAD       0xFA
#define   RELOAD_TWO   0xfa
#define   BRTx12_enable() AUXR |= 0x04   //BRT 独立波特率发生器的溢出率快 12 倍
#define   BRT_start()     AUXR |= 0x10   //启动独立波特率发生器 BRT 计数。
//=========================================
bit  Uart_One_Flag = 0 ;
bit  Uart_Two_Flag = 0 ;
U8   c =  0   ;
U8   d =  0   ;
extern U8 xdata tab[35]  ;
extern U8 xdata tab2[35] ;
//=========================================
//=======baud 115200=======================
void Uart_One_Init(){ 
	TMOD =  0x20   ;
	SCON =  0x50   ;
//	PCON = 	PCON | 0x80 ;	 //SMOD=1;
	TH1  =  RELOAD ;
	TL1  =  RELOAD ;
	TR1=    1      ;
	EA   =  1      ;
	ES   =  1      ;		
	AUXR|=0X40;				//T1*12;
}								 
//========================================
void Uart_One_Send(U8 k){
	ES  =  0    ;
	TI  =  0    ;
	if(k=='\n'){
	SBUF='\r';
    while(TI!=1);
    TI  =  0  ;
	SBUF= '\n' ;
    while(TI!=1);
    TI  =  0 ;
	//----------
  	}else{	   
    SBUF=k;
    while(TI!=1);
    TI  =  0 ;
 	 }	
	ES  =  1    ;
}
//=========================================
//=========baud 9600=======================
void Uart_Two_Init(){
	S2CON=  0x50   ;
	BRT  =  RELOAD_TWO ;
	AUXR =  AUXR | 0X10   ;		 
//	BRTx12_enable();
	AUXR1=  AUXR1| 0x10   ;	 //S2_P4
	IE2  =  1      ;
	EA   =  1      ;
}

//=========================================
void Uart_Two_Send(U8 k){
	ES  =  0    ;
	if(k=='\n'){
	S2BUF='\r';
    while((S2CON&0x02)!=0x02);
	S2CON &= ~0x02;
	//----------
	S2BUF   =  '\n' ;
    while((S2CON&0x02)!=0x02);
    S2CON &= ~0x02;
  }else{  
    S2BUF   =   k ;
    while((S2CON&0x02)!=0x02);
    S2CON &= ~0x02;
	ES  =  1    ;
	}
}
//=============================================
void UART_One_Printf(U8 *p){
   while(* p!='\0') Uart_One_Send(*p++);
}
//============================================
void UART_Two_Printf(U8 *p){
   while(* p!='\0') Uart_Two_Send(*p++);
}
//===========================================
void Uart_One_Receive() interrupt 4{
	U8  k =  0   ;
	if(RI==1){
	RI   =  0   ;
	k    =  SBUF;
	if(k=='\b'){
		 if(c>0){
		   c=c-1;
		   //Uart_One_Send('\b');
		   //Uart_One_Send(' ');
		   //Uart_One_Send('\b');
		 }
	   }else if(k=='\r'){
		   tab[c]='\0';
		   Uart_One_Send('\n');
		   Uart_One_Flag=1;
		   
	   }else if(k=='\n'){

	   }else{
		   tab[c++]=k;
		   Uart_One_Send(k);
	}
}
}
//========================================
void Uart_Two_Receive() interrupt 8{
	U8 a ;
	U8   k =  0   ;
	a  =	 S2CON ;
	a  =  a & 0x01;
	if(a==1){
	k  = S2BUF   ;
	S2CON = S2CON & 0xfe;
	if(k=='\b'){
		 if(d>0){
		   d=d-1;
		   Uart_Two_Send('\b');
		   Uart_Two_Send(' ');
		   Uart_Two_Send('\b');
		 }
	   }else if(k=='\r'){
		   tab2[d]='\0';
		   Uart_Two_Send('\n');
		   Uart_Two_Flag=1;
		   
	   }else if(k=='\n'){

	   }else{
		   tab2[d++]=k;
		   Uart_Two_Send(k);
	}
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -