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