机电专业技术网 我要投稿 |  资讯 |  机械 |  电气 |  软件 | 
机电专业技术网>电子电气>单片机>
赞助商连接
最新文档列表
热门文档列表

51单片机串行口中断服务程序

 //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理 
//出入均设有缓冲区,大小可任意设置。 
//可供使用的函数名: 
//char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。  
//getline(char idata *line, unsigned char n); 获取一行数据回车结束,已处理backspce和delete,必须定义最大输入字符数  
//putinbuf(uchar c);模拟接收到一个数据 
//putbyte(char c);放入一个字节到发送缓冲区 
//putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度 
//putstring(unsigned char code *puts);发送一个字符串到串口  
//puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。 
//putchar(uchar c,uchar j);发送一个字节数据的asc码表达方式,需要定义小数点的位置  
//putint(uint ui,uchar j);发送一个整型数据的asc码表达方式,需要定义小数点的位置 
//CR;发送一个回车换行 
//*************************************************************************  
#include <w77e58.h> //该头文件包括了51,52,80320的特殊寄存器,用在51,52上也可 
#define uchar unsigned  
char #define uint unsigned int #define OLEN 64 
/* size of serial transmission buffer */ 
idata unsigned char outbuf[OLEN]; 
/* storage for transmission buffer */ 
unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置 
unsigned char idata *putlast=outbuf;  
//最后放入发送缓冲区的字节位置 
#define ILEN 2 /* size of serial receiving buffer */ 
idata unsigned  char inbuf[ILEN]; 
unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置 unsigned  
char idata *getlast=inbuf; //最后取走的字节位置 bit outbufsign; //输出缓冲区非空标志 有=1 bit inbufsign;  
//接收缓冲区非空标志 有=1 
bit inbufful; 
//输入缓冲区满标志 满=1 
#define CR putstring("\r\n") //CR=回车换行  
//***************************** 
//放入一个字节到发送缓冲区 
putbyte(char c) {uchar i,j; ES=0;  
/*暂停串行中断,以免数据比较时出错? */ 
if (outlast==putlast ) 
{ i=(0-TH1); 
do{i--;j=36; 
do {j--;}while(j!=0);  
}while(i!=0); 
//延时一个字节发送时间 

*putlast=c; //放字节进入缓冲区 
putlast++; //发送缓冲区指针加一 if  
(putlast==outbuf+OLEN) putlast=outbuf; //指针到了顶部换到底部 
if (!outbufsign) 
{outbufsign=1;
TI=1;  
} //缓冲区开始为空置为有,启动发送 
ES=1; } 
//****************************** //放一串数据到发送缓冲区 
putbytes(unsigned  char *outplace,unsigned char j)
 { int i; for(i=0;i<j;i++) 
{putbyte(*outplace);
 outplace++;
}
}
//******************************
//putchar(uchar c,uchar j);发送一个字节数据的asc码表达方式,需要定义小数点的位置
putchar(uchar c,uchar j)
{uchar  idata free[4];uchar data i; 
i=0;  
free[i++]=(c/100+0x30);
if (j==3) free[i++]=‘.‘; 
free[i++]=(c%100)/10+0x30;
if (j==2) free[i++]=‘.‘;
if (j==2 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=(c%10)+0x30;
if (j==1 && free[i-3]==0x30) free[i-3]=0x20;

上一页12 3 下一页

程序   服务   中断       free   &   if    char    程序   服务   中断       free   &   if    char   

相关文档列表
推荐文档列表
精彩推荐

机械、电气、软件综合技术网,以广大机械,电气,设计行业从业者为目标全体,提供最新的技术文章与行业资讯.