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

📄 serial.c

📁 cf8020+cp2200(网络)的驱动实现
💻 C
字号:
//-----------------------------------------------------------------------------
// Copyright (c) 2002 Jim Brady
// Do not use commercially without author's permission
// Last revised August 2002
// Net SERIAL.C
//
// This module handles RS-232 messages and associated tasks
//-----------------------------------------------------------------------------

#include "net1.h"
#include "serial1.h"
#include "stdio.h"

// bit CommRecDataOverflowFlag,FlagRecComm,SendItComm;
// 
// unsigned char CommSendBufferHead, CommSendBufferTail;
// unsigned char CommRecBufferHead, CommRecBufferTail;
// 
// unsigned char xdata CommSendBuffer[DB_SENDMAXSIZE] _at_ 0 ; //串行口缓冲区定位在内部4K XRAM中
// unsigned char xdata CommRecBuffer[DB_RECMAXSIZE] _at_ DB_SENDMAXSIZE; 
//  
// void ClearCommRecBuffer(void)
// {
// 	unsigned char i;
// 	CommRecBufferHead=CommRecBufferTail=0;
// 	CommSendBufferHead=CommSendBufferTail=0;
// 	FlagRecComm=0;
// 	for (i=0;i<DB_SENDMAXSIZE;i++)
// 	{
// 		CommSendBuffer[i]=0;
// 	}
// 	for (i=0;i<DB_RECMAXSIZE;i++)
// 	{
// 		CommRecBuffer[i]=0;
// 	}
// }
// 
// void init_serial(void)
// {
// 	ClearCommRecBuffer();
// 	OpenComm();
// }
// 
// void OpenComm(void) 
// {
// 	PCON |= 0x80;		// SMOD=1 (HW_UART uses Timer 1 overflow with no divide down).
// 	TMOD |= 0x20;		// Configure Timer 1 for use by UART0
// 	CKCON |= 0x10;		// Timer 1 derived from SYSCLK
// 
// 	RCAP2H=(65536-(SYSCLK/BAUDRATE0/32))/256;
// 	RCAP2L=(65536-(SYSCLK/BAUDRATE0/32))%256;
// 	TH2=RCAP2H;TL2=RCAP2L;
// 	CT2=0;				//T2:timer mode	
// 	TR2=1;
// 	TCLK=1;RCLK=1;		//说明:52,对于SIO0,可选择T1(TCLK=0,RCLK=0)或T2(TCLK=1,RCLK=1)作为波特率发生器
// 					    //            SIO1只能用T1作为波特率发生器
// 					    //baud=OSC/(32*(65536-[RCAP2H,RCAP2L])
// 	CommSendBufferHead=CommSendBufferTail=0; // set the head and tail to the base of the ring buffer
// 	CommRecBufferHead=CommRecBufferTail=0;
// 	FlagRecComm=0;
// 	RI0=0;					// Clear HW_UART receive and transmit
// 	TI0=0;					// complete indicators.
// 	SCON0 = 0x50;			// Configure UART0 for mode 1, receiver enabled.
// 	ES0=1; 					// allow the serial interrupt
// 	SendItComm=1;
// }
/*
void SendCommChar(char ch)
{
	CommSendBuffer[CommSendBufferTail]=ch; 
	CommSendBufferTail++;
	if (CommSendBufferTail==DB_SENDMAXSIZE)
	{ 	
		CommSendBufferTail=0;
	}
	if (SendItComm)
	{	 
		SendItComm=0;
		SBUF0=CommSendBuffer[CommSendBufferHead]; 
	}
	while (CommSendBufferHead!=CommSendBufferTail);
	return ;
}

code unsigned char hex[]="0123456789ABCDEF";
void SendCommHex(unsigned char senddata)//往串口发送hex码 表示的一个字符 例如senddata=0x3A那么将向串口发送两个字符'3','A'hex[]为转换表,在前面有定义
{
	unsigned char ch;
	ch=senddata>>4;
	SendCommChar(hex[ch]);
	ch=senddata&0x0F;
	SendCommChar(hex[ch]);
}
void SendCommWord(unsigned int asciiword)
//向串口发送一个int型的 hex码表示的字符 例如:asciiword=0x124D 将向串口发送4个字符:'1','2','4','D'
{
	unsigned char ascii;
	ascii=asciiword>>8;
	SendCommHex(ascii);
	ascii=asciiword&0xff;
	SendCommHex(ascii);
}

void SendCommLong(unsigned long asciilong)
{
	SendCommWord(asciilong>>16);
	SendCommWord(asciilong&0xffff);
}
*/
void serial_send(unsigned char *base)
{
//	printf((char*)base);
}

// void SendCommString(unsigned char *base) 
// {
// unsigned char i=0;
// 	if (base[0]==0) return;
// 	for (;;)
// 	{	
// 		if (base[i]==0) break;
// 		CommSendBuffer[CommSendBufferTail]=base[i]; 
// 		CommSendBufferTail++; 
// 		if (CommSendBufferTail==DB_SENDMAXSIZE)
// 		{ 						
// 			CommSendBufferTail=0;
// 		}
// 		i++;
// 	}
// 	if (SendItComm)
// 	{	 						
// 		SendItComm=0;
// 		SBUF0=CommSendBuffer[CommSendBufferHead];
// 	}
// 	while (CommSendBufferHead!=CommSendBufferTail);
// }
// /*
// void SendCommBuffer(unsigned char *base, unsigned char size) 
// {
// unsigned char i=0;
// 	if (!size) { return; }	
// 	while (i<size) 
// 	{	 
// 		CommSendBuffer[CommSendBufferTail]=base[i]; 
// 		i++;
// 		CommSendBufferTail++; 
// 		if (CommSendBufferTail==DB_SENDMAXSIZE)
// 		{ 
// 			CommSendBufferTail=0;
// 		}
// 	}
// 	if (SendItComm)
// 	{	 
// 		SendItComm=0;
// 		SBUF0=CommSendBuffer[CommSendBufferHead]; 
// 	}
// }
// */
// void CommISR(void) interrupt 4
// {
// 	if (_testbit_(TI0))
// 	{
// 		TI0=0;
// 		CommSendBufferHead++; 	
// 		if (CommSendBufferHead==DB_SENDMAXSIZE)
// 		{	 
// 			CommSendBufferHead=0;
// 		}
// 		if (CommSendBufferHead!=CommSendBufferTail)
// 		{	 
// 			SBUF0=CommSendBuffer[CommSendBufferHead]; // send the next byte
// 			SendItComm=0;
// 		}
// 		else
// 		{
// 			SendItComm=1;
// 		}
// 	}
// 	if (_testbit_(RI0))	
// 	{	 
// 		RI0=0;
// 		if (CommRecBufferTail==CommRecBufferHead)
// 		{
// 			CommRecDataOverflowFlag=1;				//接收缓冲区溢出
// 		}
// 		CommRecBuffer[CommRecBufferTail]=SBUF0;     //receive data           
// 	    CommRecBufferTail++;
// 	    if (CommRecBufferTail==DB_RECMAXSIZE)
// 	    {
// 	    	CommRecBufferTail=0;
// 	    }
// 		FlagRecComm=1;
//    	}
// }
// 
// //从接收缓冲区读数据 ,无数据返回0,有数据返回1
// /*bit GetCommChar(unsigned char idata *ch)      
// { 
// 	if (CommRecBufferTail==CommRecBufferHead) return 0;     
// 	*ch=CommRecBuffer[CommRecBufferHead];
// 	CommRecBufferHead++;
// 	if (CommRecBufferHead==DB_RECMAXSIZE)
// 	{
// 		CommRecBufferHead=0;
// 	}
// 	if (CommRecBufferTail==CommRecBufferHead) FlagRecComm=0;
// 	return 1;
// }
// /*
// //在T(0-255)毫秒内从接收缓冲区读数据 ,无数据返回0,有数据返回1
// bit GetCommCharWait(unsigned char idata *ch,unsigned char T)  //T ms    
// { 
// 	Count1ms=T;*ch=0;
// 	while (Count1ms)
// 	{
// 		if (CommRecBufferTail!=CommRecBufferHead) break;
// 	}
// 	if (Count1ms==0) return 0;
// 	*ch=CommRecBuffer[CommRecBufferHead];
// 	CommRecBufferHead++;
// 	if (CommRecBufferHead==DB_RECMAXSIZE)
// 	{
// 		CommRecBufferHead=0;
// 	}
// 	return 1;
// }
// */
// 
// //------------------------------------------------------------------------
// // This function converts an integer to an ASCII string.  It is a 
// // normally provided as a standard library function but the Keil
// // libraries do not include it.  Caution: The string passed to this
// // must be at least 12 bytes long
// //------------------------------------------------------------------------
// char * itoa(UINT value, char * buf, UCHAR radix)
// {
// 	UINT i;
// 	char * ptr;
// 	char * temphold;
// 
//   	temphold = buf;
// 	ptr = buf + 12;
// 	*--ptr = 0;		// Insert NULL char
// 	do
// 	{
// 	   // First create string in reverse order
// 	   i = (value % radix) + 0x30;
// 		if(i > 0x39) i += 7;
// 		*--ptr = i;
//       value = value / radix;
//   	} while(value != 0);
// 
// 	// Next, move the string 6 places to the left
// 	// Include NULL character
// 	for( ; (*buf++ = *ptr++); );	
// 	return(temphold);
// }


⌨️ 快捷键说明

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