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

📄 serial.lst

📁 此文档是网上一款开发板的完整系统,内附有电路图纸!系统有完整的接口程式,包含了字符型LCD驱动,pc串口通讯程式,flash读写驱动程式,中文字库,ad芯片驱动程式,keyscan4*4扫描程式
💻 LST
字号:
C51 COMPILER V7.10   SERIAL                                                                07/01/2005 09:26:56 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: D:\PROGRAM FILES\KEIL\C51\BIN\C51.EXE serial.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //**********************************************************************************
   2          //本函数模块来自"51单片机世界",作者版主丁丁(聂小猛)。
   3          //主页地址http://www.mcu51.com
   4          //本程序为本站推出的"MCU51-63K仿真器"及"DX-51多功能试验板"而设计的,详情请到本站查看.
   5          //"51单片机世界"版权所有,未经允许,不得抄袭作为商业用途
   6          //**********************************************************************************
   7          //串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理
   8          //串口输入设有缓冲区,大小可任意设置。
   9          //可供使用的函数名:
  10          /*
  11          extern char getbyte(void);//从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
  12          extern putbyte(char c);//放入一个字节到发送缓冲区
  13          extern putstring(uchar  *puts);//发送一个字符串到串口
  14          extern puthex(uchar c);//发送一个字节的hex码,分成两个字节发。
  15          extern  bit   inbufsign;
  16          #define CR putstring("\r\n")//发送一个回车换行
  17          extern void serial_init (void);
  18          extern putint(uint n);
  19          */
  20          
  21          //*************************************************************************
  22          #include <reg52.h>
  23          #define  uchar  unsigned char
  24          #define  uint   unsigned int
  25          
  26          #define  ILEN  16 //32            //设置串口中断接收缓冲区大小
  27          idata uchar  inbuf[ILEN];
  28          data uchar idata *inlast=inbuf;  //最后由中断进入接收缓冲区的字节位置
  29          data uchar idata *getlast=inbuf;  //最后取走的字节位置
  30          bit   inbufsign;      //接收缓冲区非空标志   有=1
  31          bit   inbufful;       //输入缓冲区满标志  满=1
  32          #define CR putstring("\r\n")   //CR=回车换行
  33          
  34          //*****************************
  35          //放入一个字节到发送缓冲区
  36          putbyte(unsigned char c)
  37          {
  38   1      SBUF=c;
  39   1      while(!TI);TI=0;
  40   1      }
  41          
  42          //***************************************
  43          //发送一个定义在程序存储区的字符串到串口
  44          putstring(uchar  *puts)
  45          {
  46   1              for(;*puts!=0;puts++)   //遇到停止符0结束
  47   1              putbyte(*puts);
  48   1      }
  49          //*************************************
  50          //发送一个字节的hex码,分成两个字节发。
  51          uchar code hex_[]={"0123456789ABCDEF"};
  52          puthex(unsigned char c)
  53          {
  54   1              int  ch;
  55   1              ch=(c>>4)&0x0f;
C51 COMPILER V7.10   SERIAL                                                                07/01/2005 09:26:56 PAGE 2   

  56   1              putbyte(hex_[ch]);
  57   1              ch=c&0x0f;
  58   1              putbyte(hex_[ch]);
  59   1      }
  60          //*************************************
  61          //从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
  62          uchar getbyte (void)
  63          {
  64   1              char idata c ;
  65   1              while (!inbufsign); //缓冲区空等待
  66   1              ES=0;
  67   1              c= *getlast;            //取数据
  68   1              getlast++;              //最后取走的数据位置加一
  69   1              inbufful=0;            //输入缓冲区的满标志清零
  70   1              if (getlast==inbuf+ILEN) getlast=inbuf; //地址到顶部回到底部
  71   1              if (getlast==inlast) inbufsign=0;       //地址相等置接收缓冲区空空标志,再取数前要检该标志
  72   1              ES=1;
  73   1              return (c);        //取回数据
  74   1      }
  75          /*
  76          //*************************
  77          //以十进制的形式输出一个整型数到串口
  78          putint(uint n)
  79          {
  80                  uchar i[6];
  81                  i[0]=0x30+n/10000;
  82                  i[1]=0x30+(n%10000)/1000;
  83                  i[2]=0x30+(n%1000)/100;
  84                  i[3]=0x30+(n%100)/10;
  85                  i[4]=0x30+n%10;
  86                  i[5]=0;
  87                  putstring(i);
  88          }
  89          
  90          //*********************
  91          //模拟接收到一个字符,
  92          putinbuf(uchar c)
  93          {ES=0;  if(!inbufful)
  94                  {*inlast= c;            
  95                  inlast++;
  96                  if (inlast==inbuf+ILEN) inlast=inbuf;
  97                  if (inlast==getlast)    inbufful=1;  
  98                   inbufsign=1;
  99                  }
 100          ES=1;
 101          }
 102          */
 103          //*****************************************
 104          //串口中断处理
 105          
 106          serial () interrupt 4
 107          {
 108   1              if (RI)
 109   1              {
 110   2                      RI = 0;
 111   2                      if(!inbufful)
 112   2                      {
 113   3                              *inlast= SBUF;            //放入数据
 114   3                              inlast++;                    //最后放入的位置加一
 115   3                              inbufsign=1;
 116   3                              if (inlast==inbuf+ILEN) inlast=inbuf;//地址到顶部回到底部
 117   3                              if (inlast==getlast)    inbufful=1;  //接收缓冲区满置满标志
C51 COMPILER V7.10   SERIAL                                                                07/01/2005 09:26:56 PAGE 3   

 118   3                      }
 119   2              }
 120   1      }
 121          
 122          //*****************************
 123          //串口初始化                11.0592M: 0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200 110592
 124          void serial_init (void)
 125          {
 126   1              //用t1作波特率
 127   1              
 128   1              SCON  = 0x50;                     // mode 1: 8-bit UART, enable receiver
 129   1              TMOD |= 0x21;                      // timer 1 mode 2: 8-Bit reload th0 1X16
 130   1              PCON |= 0x80; 
 131   1              TH1 = 0xfd;//fa,          //baud*2    /* reload value 19200 baud
 132   1              TR1   = 1;                         // timer 1 run
 133   1      
 134   1              //用t2作波特率
 135   1      /*
 136   1              T2CON=0x30;
 137   1              RCAP2H=0xFF;
 138   1              RCAP2L=0xb8;//70=4800,b8=9600,dc=19200,ee=38400,f4=57600,fa=115200
 139   1              TR2=1;ET2=1;
 140   1              SCON=0x50;//SCON=0xd0;
 141   1      */
 142   1      
 143   1              ES = 1;
 144   1              REN=1;
 145   1              EA=1;
 146   1              SM2=1;          //SM2=1时收到的第9位为1才置位RI标志
 147   1      
 148   1      }
 149          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    162    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   IDATA SIZE       =     16       1
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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