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

📄 serial.c

📁 这个事51各个模块的驱动程序
💻 C
字号:
// Serial.c
// 

#include "config.h"

uint8 OS_Q_MEM_SEL SerialInData[MAX_IN_SIZE];        //给读串口消息队列分配的队列空间
uint8 OS_Q_MEM_SEL SerialOutData[MAX_OUT_SIZE];       //给写串口消息队列分配的队列空间
uint8 SerialCanSend = 1;

void SerialInit(void)
{
	SCON = 0x50;
	// PCON = 0x80;			// x2
	TMOD = TMOD & 0x0f;
	TMOD = TMOD | 0x20;
	TH1 = 0xfd;             // 
	TL1 = 0xfd;
	TR1 = 1;
	ES  = 1;
}

void SerialBufferInit(void) 
{
	OSQCreate(SerialInData, MAX_IN_SIZE);
	OSQCreate(SerialOutData, MAX_OUT_SIZE);
}

void SerialSendChar(uint8 Data) reentrant
{
    OS_ENTER_CRITICAL();
    if (SerialCanSend)
    {
        SerialCanSend = 0;
        SBUF = Data;
    }
    else
    {
        OSQPost(SerialOutData,Data);
    }
    OS_EXIT_CRITICAL();
}  

// 显示字符串
void SerialSendStr(uint8 *Str)  reentrant
{
    while (*Str)
	{
		SerialSendChar(*Str);
		Str++;
    }
}

#pragma disable    
void comm(void) interrupt 4
{
    uint8 data temp;
	if (RI)
	{
        OS_INT_ENTER();
		RI = 0;
        OSQIntPost(SerialInData,SBUF);
        OSIntExit();
		return;
	}
	if (TI)
	{
		TI = 0;
		if (OSQAccept(&temp,SerialOutData) == OS_Q_OK)
		{
		    SBUF = temp;
		}
		else
		{
		    SerialCanSend = 1;
		}
	}
}

⌨️ 快捷键说明

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