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

📄 serial.c

📁 Small RTOS(51) 1.00v 无需外扩ram即可在51上执行的占先式RTOS 可移植,完全免费,公开源代码 具有详细中文文档和注释 (作者已经把它运用到实际的项目中)
💻 C
字号:
#include "config.h"

		void InitSerial(void)
{
	SCON=0x50;
	PCON=0x80;
	TMOD=TMOD&0x0f;
	TMOD=TMOD|0x20;
	TH1=0xf3;                   //com is 4800 b/s
	TL1=0xf3;
	TR1=1;
	ES=1;
    EA=1;
}


bit GetRight=0;
                            void main(void)
{
	InitSerial();
	while(1)
	{
	    if(GetRight==1)
	    {
	        GetRight=0;
	        SBUF='O';
	        while(TI==0);
	        TI=0;
	        SBUF='K';
	        while(TI==0);
	        TI=0;
	        SBUF='!';
	        while(TI==0);
	        TI=0;
	    }
	}
	
}

unsigned char Buf[NBYTE-2];
        void comm(void) interrupt 4
//"串行口中断"
{
    static unsigned char Sum,Flag=0,i;
    unsigned char temp;

    if(RI==1)
    {
        RI=0;
        temp=SBUF;
        switch(Flag)
        {
            case 0:
                if(temp==STARTBYTE1)
                {
                    Flag=1;
                }
                break;
            case 1:
                if(temp==STARTBYTE2)
                {
                    Sum=STARTBYTE1+STARTBYTE2;
                    i=0;
                    Flag=2;
                    break;
                }
                if(temp==STARTBYTE1) break;
                Flag=0;
                break;
            case 2:
                if(temp==STARTBYTE1)
                {
                    Flag=3;
                    break;
                }
                Sum+=temp;
                if((i>=(NBYTE-3))&&Sum==0)
                {
                    GetRight=1;
                    Flag=0;
                    break;
                }
                Buf[i++]=temp;
                break;
            case 3:
                if(temp==STARTBYTE2)
                {
                    Sum=STARTBYTE1+STARTBYTE2;
                    Flag=2;
                    i=0;
                    break;
                }
                Sum+=STARTBYTE1;
                if((i>=(NBYTE-3))&&Sum==0)
                {
                    GetRight=1;
                    Flag=0;
                    break;
                }
                Buf[i++]=STARTBYTE1;
                if(temp==STARTBYTE1)
                {
                    break;
                }
                Sum+=temp;
                if((i>=(NBYTE-3))&&Sum==0)
                {
                    GetRight=1;
                    Flag=0;
                    break;
                }
                Buf[i++]=temp;
                Flag=2;
                break;
        }
    }
}

⌨️ 快捷键说明

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