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

📄 c8051f022uart.c

📁 这些源码有的是我自已公司使用的一些实用的程序
💻 C
字号:
//----------------------------------------------------------------------------------
//串口0函数
//----------------------------------------------------------------------------------
void OutPutUART0(uchar *p,uint len)   //输出
{ uint i;
  for(i=0;i<len;i++)
     {SBUF0=p[i];
        while(TI0==0);
        TI0=0;
     }
}
void INPUTUART0()interrupt 4 using 1
{
 if(RI0)
  {
   RI0=0;
	INbuf0[_buf0num]=SBUF0;
   _buf0num++;
   if(_buf0num>300)_buf0num=0x00;
  }

}
/*--------------------------------------
void Svr2320() interrupt 4 using 1
{ 
if(RI0){
	RI0=0;
	R232Buf0[pRecBuf0]=SBUF0;
	pRecBuf0++;
	if(pRecBuf0>R232MEMMAX) pRecBuf0=0x0;}
}
----------------------------------------*/
void UART0_Init (long baud)                                      //串口0初始化
{
	SCON0 = 0X50;
	T2CON = 0X30;
	switch(baud){
			case 4800   : RCAP2 = -(_SYSCLK/4800/32);break;
			case 9600   : RCAP2 = -(_SYSCLK/9600/32);break;
			case 14400  : RCAP2 = -(_SYSCLK/9600/32);break;
			case 19200  : RCAP2 = -(_SYSCLK/19200/32);break;
			case 28400  : RCAP2 = -(_SYSCLK/28400/32);break;
			case 57600  : RCAP2 = -(_SYSCLK/57600/32);break;	
			case 115200 : RCAP2 = -(_SYSCLK/115200/32);break;
	            }
	T2 = RCAP2;
	CKCON |= 0X20;
	PCON |= 0X80;
	TR2=1;
	EA=1;
	ES0=1;

//	EIE2 |= 0X40;
}


//----------------------------------------------------------------------------------
//串口1函数
//----------------------------------------------------------------------------------
void UART1_Init (long baud)                        //串口1初始化
{
	SCON1 = 0X50;
	T4CON = 0X30;
	switch(baud){
			case 4800   : RCAP4 = -(_SYSCLK/4800/32);break;
			case 9600   : RCAP4 = -(_SYSCLK/9600/32);break;
			case 14400  : RCAP4 = -(_SYSCLK/9600/32);break;
			case 19200  : RCAP4 = -(_SYSCLK/19200/32);break;
			case 28400  : RCAP4 = -(_SYSCLK/28400/32);break;
			case 57600  : RCAP4 = -(_SYSCLK/57600/32);break;	
			case 115200 : RCAP4 = -(_SYSCLK/115200/32);break;
	}
	T4 = RCAP4;
	CKCON |= 0X40;
	PCON |= 0X10;
	T4CON |= 0X04;
	EIE2 |= 0X40;
}

void OutPut(uchar *p,uint len)   //输出
{ uint i;
  for(i=0;i<len;i++)
     {SBUF1=p[i];
        while((SCON1&0x02)==0);
        SCON1&=0xfd;
     }
}

/*-----------------------------------
void Svr232() interrupt 20 using 3
{
if(SCON1&0x01){
	SCON1&=0xfe;
	R232Buf[pRecBuf]=SBUF1;
	pRecBuf++;
	if(pRecBuf>0X424) pRecBuf=0x0;}
}
------------------------------------*/
//-----------------------------------------------------------------------------------
//系统晶振和端口配置
//-----------------------------------------------------------------------------------
void SYSCLK_INIT0 (void)
{
int i; // 延时计数器
OSCXCN = 0x67; // 开启外部振荡器3.579MHz晶体
for (i=0; i < 256; i++) ; // 等待振荡器启振
while (!(OSCXCN & 0x80)) ; // 等待晶体振荡器稳定
OSCICN = 0x88; // 选择外部振荡器为系统时钟源并允许丢失时钟检测器
}

void PORT_INIT0(void)
{
 XBR0=0x04;
 XBR1=0x00;
 XBR2=0x46;
 P0MDOUT=0x0;
 P1MDOUT=0x0;
 P2MDOUT=0x0;
 P3MDOUT=0x0;
 P74OUT|=0xcc;
 p20=1;
 p21=1;
 p22=1;
 p23=1;
// p36=0;

 }


//----------------------------------------------------------------------------------
//延时
//----------------------------------------------------------------------------------
void Delay(uchar i)
{uint k=5000;
 for(;i>0;i--)
   while(k>0) k--;
  
}

⌨️ 快捷键说明

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