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

📄 taskgetf.lst

📁 单体电容测试仪源码程序 可测电压、有A/D转换等。
💻 LST
字号:
C51 COMPILER V8.06   TASKGETF                                                              02/13/2009 09:29:09 PAGE 1   


C51 COMPILER V8.06, COMPILATION OF MODULE TASKGETF
OBJECT MODULE PLACED IN TaskGeTF.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE TaskGeTF.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "sm5964reg.h"
   2          #include "newtype.h"
   3          #include "SerialNewType.h"
   4          #include "ht1621.h"
   5          
   6          //定义串行通讯缓冲区
   7          //unsigned char idata cv_SerialReceiverBuf[42];
   8          unsigned char idata cv_SerialReceiverBuf[4];
   9          unsigned char idata cv_SerialSendBuf[60];
  10          
  11          
  12          //定义串行通信缓冲区的读写指针。
  13          unsigned char ReceiverBufWritePoint;
  14          unsigned char ReceiverBufReadPoint;
  15          unsigned char SendBufWritePoint;
  16          unsigned char SendBufReadPoint;
  17          unsigned char ReceiverPackWritePoint;
  18          //超级终端相关变量
  19          unsigned char command_point;                                    //命令开始读指针
  20          unsigned char command_point_new;                                //新命令开始读指针
  21          
  22          
  23          //串口发送缓冲区空闲标志
  24          bit Ti;         //Ti=1,串口准备好,可以发送数据
  25          bit Ri;         //Ri=1,接收缓冲区有数据要接收
  26          bit SendBufFullFlag=0;          //=1,发送缓冲区满
  27          
  28          
  29          extern unsigned char code Versoin[];            //定义版本号常量
  30          extern unsigned char data Mesure_state;         //侧量状态
  31          extern unsigned char data disp_flag;            //动态显示电压标志
  32          extern unsigned char data stop_flag;            //停止测试标志
  33          extern unsigned char data second;               //秒    
  34          extern unsigned char Display_state;
  35          
  36          //葛同府所写模块初始化函数。
  37          void InitialGeTF(void)
  38          {
  39   1              ReceiverBufWritePoint=0;
  40   1              ReceiverBufReadPoint=0;
  41   1              SendBufWritePoint=0;
  42   1              SendBufReadPoint=0;
  43   1      
  44   1              Ti=0;                   //Ti=1,串口准备好,可以发送数据
  45   1              Ri=0;                   //Ri=0,接收缓冲区无数据要接收
  46   1      
  47   1      }
  48          
  49          //串口中断函数
  50          void SerialCom() interrupt 4
  51          {
  52   1              unsigned char temp;
  53   1      
  54   1              //有接收中断,写入接收缓冲区
  55   1              if(RI==1) {
C51 COMPILER V8.06   TASKGETF                                                              02/13/2009 09:29:09 PAGE 2   

  56   2                      RI=0;
  57   2                      Ri=1;           //Ri=1,接收缓冲区有数据要接收
  58   2                      temp=SBUF;
  59   2                      cv_SerialReceiverBuf[ReceiverBufWritePoint]=temp;
  60   2                      //接收缓冲区写指针+1
  61   2                      //接收缓冲区写指针大于接收数组最大值,置0
  62   2                      if(++ReceiverBufWritePoint>=sizeof(cv_SerialReceiverBuf)) {ReceiverBufWritePoint=0;}
  63   2              }
  64   1      
  65   1              //有发送中断,置Ti标志为1
  66   1              if(TI==1) {
  67   2                      TI=0;
  68   2                      if (SendBufWritePoint != SendBufReadPoint) {
  69   3                              //从接收缓冲区读数据
  70   3                              SBUF=cv_SerialSendBuf[SendBufReadPoint];
  71   3                              //发送缓冲区读指针+1
  72   3                              SendBufReadPoint++;
  73   3                              //发送缓冲区读指针大于接收数组最大值,置0
  74   3                              if (SendBufReadPoint >= sizeof(cv_SerialSendBuf)) SendBufReadPoint=0;
  75   3                      }
  76   2                      else Ti=0;
  77   2              }
  78   1      }
  79          
  80          
  81          
  82          //从串口接收缓冲区读数函数
  83          char SerialReceiveBufRead(void)
  84          {
  85   1              unsigned char RecByte;
  86   1              ES=0;
  87   1              //从接收缓冲区读数据
  88   1              RecByte=cv_SerialReceiverBuf[ReceiverBufReadPoint];
  89   1              //接收缓冲区读指针+1
  90   1              //接收缓冲区读指针大于接收数组最大值,置0
  91   1              if (++ReceiverBufReadPoint >= sizeof(cv_SerialReceiverBuf)) ReceiverBufReadPoint=0;
  92   1              
  93   1              if (ReceiverBufWritePoint != ReceiverBufReadPoint) {
  94   2                      Ri=1;   //Ri=1,从接收缓冲区读出数据
  95   2              }
  96   1              else{
  97   2                      Ri=0;   //Ri=0,接收缓冲区无数据
  98   2              }
  99   1              ES=1;
 100   1              return RecByte;
 101   1      }
 102          
 103          //数据放串口发送缓冲区
 104          void SerialSendBufWrite(unsigned char SenByte)
 105          {
 106   1              ES=0;
 107   1              if  (SendBufWritePoint+1 != SendBufReadPoint ) {
 108   2                      //如果发送缓冲区不满,数据放发送缓冲区
 109   2                      cv_SerialSendBuf[SendBufWritePoint]=SenByte;
 110   2                      //发送缓冲区写指针+1
 111   2                      SendBufWritePoint=++SendBufWritePoint;
 112   2                      //发送缓冲区写指针大于接收数组最大值,置0
 113   2                      if (SendBufWritePoint >= sizeof(cv_SerialSendBuf)) SendBufWritePoint=0;
 114   2                      SendBufFullFlag=0;              //发送缓冲区未满
 115   2              }
 116   1              else SendBufFullFlag=1;         //发送缓冲区未满
 117   1              //如果串口中断没有发送数据,置发送中断标志
C51 COMPILER V8.06   TASKGETF                                                              02/13/2009 09:29:09 PAGE 3   

 118   1              if(Ti==0) {
 119   2                      Ti=1;   //表示正在发送数据
 120   2                      TI=1;   //产生串口中断
 121   2              }
 122   1              ES=1;
 123   1      }
 124          
 125          
 126          //打印字符串函数
 127          //遇到'/'字符,输出回车换行
 128          //例如: 
 129          //      print("ok/");   //打OK,并回车换行
 130          //      print("err");   //只打印err,不回车换行
 131          void print(unsigned char *p_string)
 132          {
 133   1              unsigned char c;        
 134   1      
 135   1              while(*p_string != 0x00){
 136   2                      if (*p_string != '/') {
 137   3                              SerialSendBufWrite(*p_string);
 138   3                      }
 139   2                      else{
 140   3                              c=0x0d;
 141   3                              SerialSendBufWrite(c);
 142   3                              c=0x0a;
 143   3                              SerialSendBufWrite(c);
 144   3                      }
 145   2                      p_string++;     
 146   2              }
 147   1      }
 148          
 149          /*
 150          //十六进制数(<=0f)转ASCII字符
 151          unsigned char hex_to_char(unsigned char c)
 152          {
 153                  if (c<0xa){
 154                  c=c | 0x30;
 155                  }
 156                  else{
 157                  c=c+0x37;
 158                  }
 159                  return c;
 160          } 
 161          
 162          /*
 163          //向串口发送字符函数
 164          void printc (unsigned char c)
 165          {       
 166                  SerialSendBufWrite( hex_to_char((c & 0xf0)>>4 ) );
 167                  SerialSendBufWrite( hex_to_char(c & 0x0f) );
 168                  SerialSendBufWrite( 0x20);
 169          } */
 170          /*
 171          //向串口发送整数函数
 172          void printic(unsigned int i)
 173          {
 174                  if (SendBufFullFlag==1) return ;                //=1,发送缓冲区满
 175                  SerialSendBufWrite( hex_to_char((char)((i & 0xf000)>>12)) );
 176                  if (SendBufFullFlag==1) return ;                //=1,发送缓冲区满
 177                  SerialSendBufWrite( hex_to_char((char)((i & 0x0f00)>>8 )) );
 178                  if (SendBufFullFlag==1) return ;                //=1,发送缓冲区满
 179                  SerialSendBufWrite( hex_to_char((char)((i & 0x00f0)>>4 )) );
C51 COMPILER V8.06   TASKGETF                                                              02/13/2009 09:29:09 PAGE 4   

 180                  if (SendBufFullFlag==1) return ;                //=1,发送缓冲区满
 181                  SerialSendBufWrite( hex_to_char((char)(i & 0x000f)) );
 182                  if (SendBufFullFlag==1) return ;                //=1,发送缓冲区满
 183                  SerialSendBufWrite( 0x20);
 184          } */
 185          
 186          /*
 187          //向串口发送整数函数
 188          void printc(unsigned char i)
 189          {
 190                  SerialSendBufWrite( hex_to_char((char)((i & 0xf0)>>4 )) );
 191                  SerialSendBufWrite( hex_to_char((char)(i & 0x0f)) );
 192                  SerialSendBufWrite( 0x20);
 193          } */
 194          
 195          /**/
 196          //葛同府所写任务调用。
 197          void TaskGeTF(void)
 198          {
 199   1              unsigned char temp;
 200   1      
 201   1              //如果串口有数据,接收并处理
 202   1              if (Ri==1) {
 203   2                      temp=SerialReceiveBufRead();    //接收字符
 204   2                      //超级终端命令处理(命令最大6字节)
 205   2                      command_analyse(temp);
 206   2              }
 207   1      }
 208          
 209          //命令解释器(命令最大6字节)
 210          void command_analyse(unsigned char RecByte)
 211          {
 212   1              unsigned char i,j,temp,temp_point,t[8];
 213   1              //unsigned char cv_TempBuf[3];
 214   1              if (RecByte == 0x0d) {
 215   2                      ///命令开始读指针
 216   2                      command_point=temp_point=command_point_new;
 217   2                      //新命令开始读指针
 218   2                      command_point_new=ReceiverBufReadPoint;
 219   2                      //读命令
 220   2                      j=0;
 221   2                      for (i=0;i<sizeof(t);i++) {
 222   3                              temp=cv_SerialReceiverBuf[temp_point];
 223   3                              if (temp != 0x0a) {             //滤除换行符
 224   4                                      t[j]=temp;      j++;
 225   4                              }
 226   3                              //接收缓冲区读指针+1,接收缓冲区读指针大于接收数组最大值,置0
 227   3                              if (++temp_point >= sizeof(cv_SerialReceiverBuf)) temp_point=0;
 228   3                              if (temp_point == command_point_new) i=sizeof(t);       //读完后表示没有命令
 229   3                      }
 230   2                      //显示命令提示符>
 231   2                      printh(0x0d); printh(0x0a); 
 232   2                      //printh('>'); printh(' ');
 233   2                      //ver命令
 234   2                      if ((t[0]=='v') && (t[1]=='e') && (t[2]=='r') && (t[3]==0x0d)) {
 235   3                              printh(':'); print(Versoin); printh(0x0d); printh(0x0a);
 236   3                        return;
 237   3                      }
 238   2                      //显示电压
 239   2                      if (((t[0]=='v') || (t[0]=='V')|| (t[0]=='i') || (t[0]=='I') )&& (t[1]==0x0d)) {
 240   3                              if (disp_flag==1) disp_flag=0;
 241   3                              else disp_flag=1;
C51 COMPILER V8.06   TASKGETF                                                              02/13/2009 09:29:09 PAGE 5   

 242   3                              return;
 243   3                      }
 244   2                      //停止测试
 245   2                      //显示电压
 246   2                      if (((t[0]=='s') || (t[0]=='S'))&& (t[1]==0x0d)) {
 247   3                              stop_flag=1;
 248   3                              Swich_Ctr=1;                            //停止放电
 249   3                              return;
 250   3                      }
 251   2                      //调整时间
 252   2                      if (((t[0]=='+') || (t[0]=='-'))&& (t[1]==0x0d)) {
 253   3                              if (t[0]=='+') second++;
 254   3                              if (t[0]=='-') second--;
 255   3                              return;
 256   3                      }
 257   2                      //显示测试
 258   2                      if (((t[0]=='d') || (t[0]=='D'))&& (t[1]==0x0d)) {
 259   3                              Display_state=Display_test;
 260   3                              return;
 261   3                      }
 262   2                      //显示测试
 263   2                      if (((t[0]=='d') || (t[0]=='D'))&& ((t[1]=='a') || (t[1]=='A'))&& (t[2]==0x0d)) {
 264   3                              disp_all();
 265   3                              return;
 266   3                      }
 267   2              }
 268   1              else {
 269   2                      printh(RecByte);                //打印字符
 270   2              }
 271   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    497    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       9
   IDATA SIZE       =     64    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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