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

📄 serial.c.bak

📁 基于无线单片机24e1的组网程序。在无线传感器之类的应用中的成功案例。
💻 BAK
字号:
//========================================================
//深圳奥特迅电力设备有限公司
//电池监控系统用无线传输模块
//文件名:serial.h
//描述:串口操作
//By:Andylee 2006-6-13
//anssett@163.com
//=========================================================
unsigned char TxBuf[TxBuf_Len];         //发送缓冲区
unsigned char RxBuf[RxBuf_Len];         //接收缓冲区
unsigned char *toTxBuf,*fromTxBuf,*toRxBuf,*fromRxBuf;//fifo 指针
bit TIflag=1;
//================================================================
//函数功能:串口初始化
//filename:InitSerial()
//input:none
//output:none
//================================================================
void InitSerial(void) reeentrant
{
	TH1 = 243;                          // 19200@16MHz (when T1M=1 and SMOD=1)
	CKCON |= 0x10;                      // T1M=1 (/4 timer clock)
	PCON = 0x80;                        // SMOD=1 (double baud rate)
	SCON = 0x52;                        // Serial mode1, enable receiver
	TMOD &= ~0x30;
	TMOD |= 0x20;                       // Timer1 8bit auto reload 
 	TR1 = 1;                            // Start timer1
  	P0_ALT |= 0x06;                     // Alternate functions on pins P0.1-2
   
}
//================================================================
//函数功能:串口缓冲区初始化
//filename:InitSerialBuffer()
//input:none
//output:none
//================================================================
void InitSerialBuffer(void) reentrant
{
	toTxBuf=TxBuf;
	fromTxBuf=TxBuf;
	toRxBuf=RxBuf;
	fromRxBuf=RxBuf;	
	ES=1;
}
//================================================================
//函数功能:串口中断服务程序
//filename:SerialIsr()
//input:none
//output:none
//================================================================
void SerialIsr(void) interrupt 4
{	unsigned char *temp;
	if(TI)
	{
		TI=0;
		if(toTxBuf==fromTxBuf)		//发送缓冲区为空
		{
				TIflag=1;
				return;
		}
		SBUF=*fromTxBuf++;		//取数指针指向下一单元
		if(fromTxBuf==TxBuf+TxBuf_Len)	//指向缓冲区开头
		fromTxBuf=TxBuf;
	}	
	if(RI)
	{
		RI=0;
		temp=toRxBuf;
		if(temp==RxBuf+RxBuf_Len)
		temp=RxBuf;			//指向缓冲区开头
		if(++temp==fromRxBuf)		//接收缓冲区为满
		return;
		*toRxBuf=SBUF;
		toRxBuf=temp;
	}
}
//================================================================
//函数功能:从串口缓冲区读取一个字节的数据
//filename:L_getch()
//input:ch 指针指向读出的地址
//output:none
//================================================================
bit L_getch(unsigned char *ch) reentrant//从串口缓冲区读1字节数据
{
        if(inRxBuf==outRxBuf) 
        {ES=1;return 0;}          //RxBuf Empty
        *ch=*fromRxBuf;  
        fromRxBuf++;
        if(fromRxBuf==RxBuf+LenRxBuf) 
        fromRxBuf=RxBuf;        
        return 1;
}
//================================================================
//函数功能:打印一个字符(向发送缓冲区写入一个字符)
//filename:PrintChar()
//input:ch char变量
//output:none
//================================================================
void PrintChar(unsigned char ch) reentrant
{
       unsigned char *t;
       if(TIflag)
       {		
                TIflag=0;
                TI=1;				//启动串口发送
        }
        t=toTxBuf;				//toTxBuf总是指向一个空的可用单元
        t++;
        if(t==TxBuf+TxBuf_Len) t=TxBuf;
        if(t==fromTxBuf) {/*ES=1;*/return;}      //TxBuf Full
        *toTxBuf=ch;
        toTxBuf=t;
       
}
//================================================================
//函数功能:显示ASII
//filename:PrintChar()
//input:ch char变量
//output:none
//================================================================
void PrintCh(unsigned char ch) reentrant
{
        if(ch>=0&&ch<=9) ch=ch+'0';
        else ch=ch+'A'-10;
        PrintChar(ch);
}
//================================================================
//函数功能:以十六进制格式显示1个字节数据
//filename:insidePrintByte()
//input:Byte char变量
//output:none
//================================================================
void insidePrintByte(unsigned char Byte) reentrant
{
        unsigned char c;
        c=Byte;
        c=c>>4;        
        PrintCh(c);
        c=Byte;
        c=c&0x0F;
        PrintCh(c);        
}
//================================================================
//函数功能:以十六进制格式显示1个字节数据
//filename:PrintByte()
//input:Byte char变量
//output:none
//================================================================
void PrintByte(unsigned char Byte) reentrant//以十六进制格式显示1个字节数据
{
        EA=0;        
        insidePrintByte(Byte);                
        EA=1;
}
//================================================================
//函数功能:以十六进制格式显示1个字数据
//filename:insidePrintWord()
//input:Word  int变量
//output:none
//================================================================
void insidePrintWord(unsigned int Word) reentrant
{	        
        insidePrintByte(Word>>8);
        insidePrintByte(Word&0xFF);                        
}
//================================================================
//函数功能:以十六进制格式显示1个字数据
//filename:PrintWord()
//input:Word  int变量
//output:none
//================================================================
void PrintWord(unsigned int Word) reentrant
{	
        EA=0;
        insidePrintWord(Word);
        EA=1;
}
//================================================================
//函数功能:以十六进制格式显示1个长字数据
//filename:PrintLong()
//input:Long0Word  Long变量
//output:none
//================================================================
void PrintLong(unsigned long LongWord) reentrant
{
        EA=0;
        insidePrintWord(LongWord>>16);
        insidePrintWord(LongWord&0xFFFF);
        EA=1;
}
//================================================================
//函数功能:显示字符串
//filename:PrintStr()
//input:char *str
//output:none
//================================================================
void PrintStr(unsigned char *str) reentrant//显示字符串
{
        int i;
        unsigned char j;
        unsigned char ch;
	
        EA=0;
        for(i=0;i<MaxLenStr;i++){
                ch=*(str+i);
                if(ch=='\0') break;
                else if(ch=='\n'){PrintChar(10);PrintChar(13);} 
                else PrintChar(ch);
        }
        EA=1;
}

⌨️ 快捷键说明

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