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

📄 serial_s.c

📁 51单片机的多机串口互连 通信函数
💻 C
字号:
//*****************************************************
//串口发送接收模块
//作者:尚轲
//时间:2008-08-30 09:57
//最后修改时间:
//*****************************************************
#include <REGX52.H>
#include <delay.h>
#include <stc89c51.h>

#define RBL 16
#define TBL 32

#define  sadr 0x11

unsigned char pdata rbuf[RBL];
unsigned char pdata tbuf[TBL];

unsigned char data shkt;

unsigned char rn=0,rm=0,tn=0,tm=0;

bit sbusy=0;

							  

void serialread() interrupt 4
{
 
    
    if(RI)
    {
		RI=0;
		if(RB8)
		{
			
			shkt=SBUF;
			if((shkt&0x7f)==sadr)
			{
				SM2=0;
				if(shkt&0x80)
				{
					delay(1000);
                	ISP_CONTR=0x60; 
				} 
			}else 
			{
				SM2=1;
			} 
		}else  	  
		{		
        	
        	rbuf[rn]=SBUF;    
        	rn=(rn==RBL-1)?0:rn+1;
        	if(rn==rm)
    		{
        	    rm=(rm==RBL-1)?0:rm+1;//roverfloow
    		}
        } 
	}else if(TI)
    {
        TI=0;
        if(tn!=tm)
        {
            SBUF=tbuf[tn];
            tn=(tn==TBL-1)?0:tn+1;      		
            sbusy=1;
        }else
        {
            sbusy=0;
        }
    }   
}
void putc(unsigned char c)
{
    ES=0;
    if(sbusy)
    {
        tbuf[tm]=c;
        tm=(tm==TBL-1)?0:tm+1;
    }else
    {
        SBUF=c;
        sbusy=1;
    }
    ES=1;
    while(tn==((tm==TBL-1)?0:tm+1));//toverflow
}
void puts(char *s)
{
    while(*s!='\0')
    {
        putc(*s);
        s++;
    }   
}
bit sfree()
{
	return(rm==rn);
}
unsigned char getc()
{
	unsigned char c;
    while(rm==rn);
	c=rbuf[rm];
	rm=(rm==RBL-1)?0:rm+1;
    return(c);
}
/*void signlong(unsigned char *l)
{
    if((*(l+1))&0x80)
        *l=0xff;	
} */
void printud(unsigned int d)
{
    unsigned char t[5];
    char i;
    for(i=0;i<5;i++)
    {
        t[i]=d%10;
        d/=10;
    }
    for(i=4;(i>0)&&(t[i]==0);i--);
    for(;i>=0;i--)
        putc(0x30+t[i]);    
}
void printd(signed int d)
{
    unsigned char t[5];
    char i;
    if(d<0)
    {
        d=-d;
        putc('-');
    }
    for(i=0;i<5;i++)
    {
        t[i]=d%10;
        d/=10;
    }
    for(i=4;(i>0)&&(t[i]==0);i--);
    for(;i>=0;i--)
        putc(0x30+t[i]);    
}
void puti(unsigned int d)
{
	putc((char)(d>>8));
	putc((char)d);
}
void putl(unsigned long d)
{  	
	putc((char)(d>>24));
	putc((char)(d>>16));
	putc((char)(d>>8));
	putc((char)d);
}
unsigned int geti()
{
	//unsigned char i;
	unsigned int d;	
	d=getc();
	d<<=8;
	d|=getc();
	return d;
}
unsigned long getl()
{
	unsigned long d;	
	d=getc();
	d<<=8;
	d|=getc();
	d<<=8;
	d|=getc();
	d<<=8;
	d|=getc();
//	signlong((unsigned char *)&d);
	return d;	
}

void serial_install()
{
//t1
    TMOD|=0x20;
    TH1=0xfa;
    TL1=0xfa;
    TR1=1;
/*
//t2
    TCLK=1;
    RCLK=1;
    EXEN2=0;
    CP_RL2=0;      
    C_T2=0;
    TH2=0xff;
    TL2=0xb8;
    RCAP2H=0xff;
    RCAP2L=0xb8;
    TR2=1;
*/  
//    SCON=0xf0;
	SCON=0xd0;
	SM2=1;
	TB8=0;  
    TI=0;
    RI=0;
    ES=1;

    EA=1;
}

⌨️ 快捷键说明

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