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

📄 comm_51.c

📁 ucos2的驱动程序
💻 C
字号:
/*
*********************************************************************************************************
*                              基于uC/OS-II高速串口驱动及应用程序接口函数
*                                             版权所有
*
* 文件名 : COMM_51.C
* 版本号 :beat3
* 作者   : 陈是知 csz-mail@126.com 北京中软 2005.4.21
*********************************************************************************************************
*/

#include "includes.h"

  #define TBUF_SIZE	256		// 这两行不要修改
  #define RBUF_SIZE	256	

INT8U tbuf [TBUF_SIZE];
INT8U rbuf [RBUF_SIZE];

INT8U t_in=0;
INT8U t_out=0;
INT8U t_disabled=0;

INT8U r_in=0;
INT8U r_out=0;

/******************************* 中断处理函数 ***************************
* 功能:完成数据得的接收合发送
************************************************************************/
void CommISRHandler() reentrant
{      
 if (RI) 
 { 	 
			             // 接收
    RI = 0;
    if ((r_in + 1) != r_out)
    rbuf [r_in++] = SBUF;
	//rbuf [r_in++] = 0x99;
  }

 if (TI) 
 {			             	// 发送
 	 TI = 0;
     if (t_in != t_out)
     SBUF = tbuf [t_out++];
 else
     t_disabled = 1;
 }
}


void CommInit()	reentrant
{
        PS=1;
		TMOD=TMOD&0x0F;
        TMOD=TMOD|0x20;
        TL1=0xFF,TH1=0xFF;	//57600, 22.1184MHz
        SCON=0x50;PCON=0x00;
		t_disabled = 1;
        TR1=1;
		ES=1;
}

 
/************************** 串行口字符输出函数 ***************************
* 功能:从串行口输出一个字符c
**************************************************************************/
INT8U CommPutChar (INT8U c) reentrant
{

 if ((t_in-t_out)==255)   
    return (COMM_TX_FULL);	    // 如果发送缓冲区满则返回 COMM_TX_FULL

 OS_ENTER_CRITICAL();            // 关中断
 tbuf [t_in++] = c; 				// 将数据加入到发送缓冲区并开中断
 if (t_disabled)	
 {
   t_disabled = 0;
   TI = 1;			
 }
 OS_EXIT_CRITICAL();                         
 return (COMM_NO_ERR);						// 串行口输出正确,返回0
}


/************************* 串行口字符输入函数 ****************************
* 功能:从串行口输入一个字符
**************************************************************************/
INT8U CommGetChar (INT8U *err) reentrant
{
 INT8U c;

 if ((r_in-r_out) == 0)
  	*err=COMM_RX_EMPTY; 			// 如果接收缓冲区长度为0(未收到字符),返回 -1
 else
 {
  OS_ENTER_CRITICAL();                 
  c = rbuf [r_out++];
  OS_EXIT_CRITICAL(); 
  *err=COMM_NO_ERR;              
  return (c); 				// 串行口输入正确,返回输入的字符
 }
}

⌨️ 快捷键说明

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