自己用 C51写的串口通讯程序 
/*定义为中断方式串口处理*/ 
#define INTERSENDSTR 
/*不为8032系列芯片 */  
//#define CHIP_8032   
 
#include <absacc.h> 
#include <reg51.h> 
#include <string.h> 
#include "err.h" 
 
 
#ifdef INTERSENDSTR 
unsigned char xdata sSendComBuf[256],sRecComBuf[256]; 
unsigned char data bOut,bIn,bSout,bSin; 
#else 
#define DEFSENDCHAR TI=0;SBUF=ACC;while(!TI);TI=0; 
#endif 
//bps设置 9600 就是 PSetBps(96)(11.0592Mhz)  
 
unsigned char  PSetBps(unsigned int bps) SMALL 
{ 
unsigned int t1; 
unsigned char t2; 
#ifdef INTERSENDSTR 
/*如果使用中断方式发送数据,必须等待发送数据完毕才能更换波特率 */ 
while(bSin!=bSout) 
{ 
; 
} 
ES=0; 
#endif  
 
#ifdef CHIP_8032 
if(3456%bps) 
{ 
return ERR_SET_BPS; 
} 
t1=3456/bps; 
t1--;t1=~t1; 
RCAP2H=t1/256;RCAP2L=t1; 
T2MOD=0x00; 
/*使用定时器 2 做波特率发生器 */ 
T2CON=0x34;/*TF2=0;EXF2=0;RCLK=1;TCLK=1;EXEN2=0;TR2=1;C/T2=0;CP/RL2=0 
*/ 
#else 
t1=576/bps; 
if((576%bps)||((t1==0))||(t1>=2*256))  
{ 
return ERR_SET_BPS; 
} 
if(t1>256) 
{ 
PCON=00; 
t2=256-(288/bps); 
} 
else 
{ 
PCON=0x80; 
t2=256-t1; 
} 
TH1=t2;TL1=t2; 
TR1=1; 
#endif  
/*模式3*/ 
SM0=0; 
RI=0;TI=0; 
REN=1; 
SM1=1; 
SM2=1; 
#ifdef INTERSENDSTR   
bOut=bIn; 
bSout=bSin; 
ES=1; 
#endif  
return OK; 
} 
void PSendChar(unsigned char ch) SMALL 
{ 
 
#ifdef INTERSENDSTR 
unsigned char tch; 
 
tch=bSin+1; 
while(tch==bSout) 
{ 
; 
} 
sSendComBuf[bSin]=ch; 
ES=0; 
if((bSout==bSin)) 
{ 
SBUF=sSendComBuf[bSin]; 
bSin++; 
} 
else 
{ 
bSin++;                 
} 
ES=1; 
#else  
ACC=ch; 
DEFSENDCHAR; 
#endif  
} 
unsigned char PGetChar() SMALL 
{ 
unsigned char ch; 
#ifdef   INTERSENDSTR 
ch=sRecComBuf[bOut]; 
bOut++; 
return ch; 
#else 
ch=SBUF; 
RI=0; 
#endif  
} 
bit PCharInCom() SMALL 
{ 
#ifdef   INTERSENDSTR 
if(bIn!=bOut) 
{ 
return 1; 
} 
return 0; 
#else 
return RI; 
#endif 
} 
void PSendString(unsigned char *st) SMALL 
{ 
while(*st) 
{ 
PSendChar(*st); 
st++; 
} 
} 
void PSendArray(unsigned char  *st,unsigned int  len) SMALL 
{ 
unsigned int ii; 
for(ii=0;ii<len;ii++) 
{ 
PSendChar(st[ii]); 
} 
} 
#ifdef   INTERSENDSTR 
void PSerialInt() interrupt 4 
{ 
if(RI)  
{ 
sRecComBuf[bIn]=SBUF; 
bIn++; 
RI=0; 
} 
if(TI) 
{ 
TI=0; 
if(bSout!=bSin) 
{ 
bSout++; 
} 
if(bSout!=bSin) 
{ 
SBUF=sSendComBuf[bSout]; 
} 
} 
} 
#endif


 会员中心
 会员中心 会员注册
 会员注册 返回顶部
返回顶部 刷新页面
刷新页面 下到页底
下到页底