?? uart.c
字號:
#include "STC12C5A60S2.H"
#include "Uart.h"
//========================================
#define RELOAD 0xFA
#define RELOAD_TWO 0xfa
#define BRTx12_enable() AUXR |= 0x04 //BRT 獨(dú)立波特率發(fā)生器的溢出率快 12 倍
#define BRT_start() AUXR |= 0x10 //啟動獨(dú)立波特率發(fā)生器 BRT 計數(shù)。
//=========================================
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);
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -