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

📄 uart.h

📁 44b0+PDIUSBD12开发的USB鼠标源代码
💻 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 + -