📄 comm_51.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 + -