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

📄 serial.c

📁 基于51内核的单片机的ucos-ii操作系统的移植的源代码
💻 C
字号:
/*
*********************************************************************************************************
*                                               uC/OS-II
*                                               实时内核
*
*                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
*                                               版权所有
*
*                                            MCU-51 专用代码
*                                           KEIL C51大模式编译
*
* 文件名 : SERIAL.C
* 作者   : Jean J. Labrosse
* 改编   : 田江学  福华先进微电子上海有限公司  03/28/2005  (参考于杨屹大侠)    www.fameg.com
*********************************************************************************************************
*/


//**********************************************************************************
//建议:
//    你完全可以把该子程序当作函数库使用,以便减少重复劳动,提高代码质量。
//**********************************************************************************

#ifndef  OS_MASTER_FILE
#include "includes.h"
#endif

//**********************************************************************************

unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体
unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针
bit TIflag=1;//Note:It must be 1.


void InitSerial() reentrant//串口0初始化,采用T1定时
{
        TMOD=TMOD&0x0F;
        TMOD=TMOD|0x20;
        TL1=0xF8,TH1=0xF8;  //4800 , 15MHz
        SCON=0x50;
		PCON=0x00;
        TR1=1;
		TI=1;
}

void InitSerialBuffer(void) reentrant//串口缓冲区初始化
{
        inTxBuf=TxBuf;outTxBuf=TxBuf;
        inRxBuf=RxBuf;outRxBuf=RxBuf;
        ES=1;
        EA=1;
}

void serial(void) reentrant //interrupt 4
{    //中断在汇编中实现,去掉interrupt 4{//串口中断服务子程序
        unsigned char *t;

       if(TI){
                TI=0;
                if(inTxBuf==outTxBuf) {TIflag=1;return;}//TxBuf Empty
                SBUF=*outTxBuf; outTxBuf++;
                if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;	
        }
        if(RI){
                RI=0;
                t=inRxBuf;t++;
                if(t==RxBuf+LenRxBuf) t=RxBuf;
                if(t==outRxBuf) return;                 //RxBuf Full
                *inRxBuf=SBUF;
                inRxBuf=t;
        }
}


void PrintChar(unsigned char ch) reentrant//显示字符
{
        unsigned char *t;

        //ES=0;        
        if(TIflag){		
                TIflag=0;
                TI=1;
        }
        t=inTxBuf;t++;
        if(t==TxBuf+LenTxBuf) t=TxBuf;
        if(t==outTxBuf) {return;}                  //TxBuf Full
        *inTxBuf=ch;
        inTxBuf=t;
        //ES=1;        
}


void PrintStr(unsigned char *str) reentrant//显示字符串
{
        int i;
        unsigned char j;
        unsigned char ch;
	
        EA=0;
        for(i=0;i<MaxLenStr;i++){
                ch=*(str+i);
                if(ch=='\0') break;
                else if(ch=='\n'){PrintChar(10);PrintChar(13);} 
                else if(ch=='\t'){
                        for(j=0;j<TABNum;j++)
                                PrintChar(' ');
                }
                else PrintChar(ch);
        }
        EA=1;
}

void clrscr() reentrant//清屏
{        
        PrintStr("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");//30个回车换行清屏幕。
}


⌨️ 快捷键说明

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