欢迎光临MCUWAY! 本站网名:单片机之路  永久域名:www.mcuway.com

设为首页

加入收藏

电子基础 初学MCU 单片机类型 MCU程序 MCU应用 设计软件 测控电路 技术论坛
 您现在的位置: 单片机之路 >> 单片机程序 >> 单片机源码 >> 文章正文

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;
if (j==1 && free[i-3]==0x20 && free[i-2]==0x30) free[i-2]=0x20; 
putbytes(free,i);
}
本文转自网络,经“单片机之路”(www.mcuway.com)摘选整理,版权归原作者所有

[1] [2] 下一页

普通文章28课:单片机音乐汇编程序设计
普通文章27课:单片机的一些基本概念
普通文章26课:单片机矩阵式键盘接口技术
普通文章51单片机教程(从原理开始基于汇编)
普通文章1课:单片机概述
普通文章2课:8051单片机引脚介绍
普通文章3课:单片机存储器结构结构分析
普通文章4课:第一个单片机小程序
普通文章5课:单片机延时程序分析
普通文章6课:单片机并行口结构
普通文章7课:单片机的特殊功能寄存器
普通文章8课:单片机寻址方式与指令系统
普通文章9课:单片机数据传递类指令
普通文章10课:单片机数据传送类指令
普通文章11课:单片机算术运算指令
普通文章12课:单片机逻辑运算类指令
普通文章13课:单片机逻辑与或异或指令祥解
普通文章14课:单片机条件转移指令
普通文章15课:单片机位操作指令
普通文章16课:单片机定时器与计数器
普通文章17课:单片机定时器/计数器的方式控制
普通文章18课:单片机的中断系统
普通文章19课:单片机定时器、中断试验
普通文章20课:单片机定时/计数器实验
普通文章21课:单片机串行口介绍

  • 上一篇文章:
  • 下一篇文章:
  • 更多精彩内容>>>

    普通文章电流单位
    普通文章功率单位
    普通文章什么是达林顿管?
    普通文章晶闸管的作用与原理

    学习单片机的必经之路——单片机之路,永久域名:www.mcuway.com