📄 uart.h
字号:
#ifndef __UART_H__
#define __UART_H__
#include"44b.h"
#include"user.h"
static int UartIndex=0;
void Uart_Init(BYTE ComIndex,int baud){
int i;
rUFCON0=0x0; //FIFO disable
rUFCON1=0x0;
rUMCON0=0x0;
rUMCON1=0x0;
//UART0 /********************************************************************************/
//ULCON | 7 | | 6 | | 543 | | 2 | |1 0|
// reserve Infra-red ParityMode StopBitsNum WordLength
/********************************************************************************/
rULCON0=0x3; //Normal,No parity,1 stop,8 bit
//rULCON0=0x7; //Normal,No parity,2 stop,8 bit
/********************************************************************************/
//UCON | 9 | | 8 | | 7 | | 6 |
// TxInterruptType RxInterruptType RxTimeOutEnable RxErrorStatusInterruptEnable
//UCON | 5 | | 4 | |3 2| |1 0|
// Loop-BackMode SendBreakSignal TransmitMode ReceiveMode
/********************************************************************************/
rUCON0=0x245; //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
rUBRDIV0=( (int)(MCLK/16./baud + 0.5) -1 );
//UART1
//rULCON1=0x7; //Normal,No parity,2 stop,8 bit
rULCON1=0x3;
rUCON1=0x245;
rUBRDIV1=( (int)(MCLK/16./baud + 0.5) -1 );
UartIndex=ComIndex;
for(i=0;i<100;i++);
}
void Uart_Select(int ch){
UartIndex=ch;
}
/********************************************************************************/
//UTRSTAT | 2 | | 1 | | 0 |
// TransmitShifterEmpty TransmitBufferEmpty ReceiveDataReady
//
//UTXH (UartTransmitHolding-Buffer-)WriteOnly
//URXH (UartReceiveHolding-Buffer-) ReadOnly
/********************************************************************************/
void Uart_TxEmpty(int ch){
if(ch==0){
while(!(rUTRSTAT0 & 0x4)); //wait until tx shifter is empty.
}else{
while(!(rUTRSTAT1 & 0x4)); //wait until tx shifter is empty.
}
}
void Uart_SendBYTE(int data){
if(UartIndex==0){
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
//Delay(10);
WrUTXH0(data);
}else{
while(!(rUTRSTAT1 & 0x2)); //Wait until THR is empty.
//Delay(10);
rUTXH1=data;
}
}
void Uart_SendString(char *pt)//及其注意,不能用 BYTE *pt ,与 Keil51 区别
{
while(*pt)
Uart_SendBYTE(*pt++);
}
BYTE Uart_GetBYTE(void){
if(UartIndex==0){
while(!(rUTRSTAT0 & 0x1)); //Receive data read
return RdURXH0();
}else{
while(!(rUTRSTAT1 & 0x1)); //Receive data ready
return rURXH1;
}
}
void Uart_SendNum(int num){
BYTE SdNumH,SdNumL;
SdNumH=0;
SdNumL=0;
while(num>128){
SdNumH++;
num-=128;
}
SdNumL=num;
Uart_SendBYTE(SdNumH);
Uart_SendBYTE(SdNumL);
}
int Uart_GetWord(){
BYTE RcNumH=0,RcNumL=0;
RcNumH=Uart_GetBYTE();
RcNumL=Uart_GetBYTE();
return RcNumH*128+RcNumL;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -