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

📄 mainprog.lst

📁 单体电容测试仪源码程序 可测电压、有A/D转换等。
💻 LST
📖 第 1 页 / 共 5 页
字号:
 198   1              if (ADC3_open==1){      //adc3打开控制
 199   2                      ADC_CONTR=0xe8+3;                                       //启动AD转换,用最低转换速率
 200   2                      while ((ADC_CONTR & 0x10)==0) {}
 201   2                      ADC_CONTR=0xe0+3;                                       //停止AD转换
 202   2                      ADC3_accumulate_intr += ADC_HIGH*4;
 203   2                      ADC3_accumulate_intr +=ADC_LOW & 0x03;                  //adc结果
 204   2                      if (++ADC3_counter_intr>=1) {
 205   3                              ADC3_counter_intr=0;
 206   3                              ADC_result_intr3=ADC3_accumulate_intr/1;        //adc计数
 207   3                              ADC3_accumulate_intr=0;
 208   3                      }
 209   2              }
 210   1              flag_1ms_adc=1;
 211   1              resistance_measure_1ms ++;
 212   1          //timer0中断计数
 213   1          if (++timer0_interrupt_counter<10) return;
 214   1          timer0_interrupt_counter=0;
 215   1              Mesure_counter_10ms++;  //侧量计数
 216   1              flag_10ms_1=1;
 217   1              if (++timer0_10ms==10) {
 218   2                      timer0_10ms=0;
 219   2                      flag_0d1s=1;
 220   2                      RefreshDisplay_0d1s=1;
 221   2                      if (++ timer0_0d1s==10) {
 222   3                              timer0_0d1s=0;
 223   3                              flag_1s_1=1;
 224   3                              RefreshDisplay_1s++;
 225   3                              if (timer0_1s!=0xff) timer0_1s++;
 226   3                              //disp_char_decimal(second);
 227   3                              if(++second>=60){
 228   4                                      second=0;
 229   4                                      if(++minute>=60){
 230   5                                              minute=0;
 231   5                                              if(++hour>=60){
 232   6                                                      hour=0;
 233   6                                              }
 234   5                                      }       
 235   4                              }
 236   3                      }
 237   2              }
 238   1      }
 239          
 240          
 241          
C51 COMPILER V8.06   MAINPROG                                                              02/13/2009 09:29:07 PAGE 5   

 242          //复位硬件看门狗
 243          void CearHardWatchDog(void)
 244          {
 245   1              WDTC = 0x3f;    //d4:CLR_WDT=1清看门狗,硬件自动清零该位
 246   1      }
 247          /*
 248          //以十进制方式显示char形数
 249          void disp_char_decimal(unsigned char char_data)
 250          {                                 
 251                  unsigned bai,shi,ge;
 252                  ge = char_data%10;
 253                  char_data = char_data/10;
 254                  shi = char_data%10;
 255                  bai = char_data/10;
 256                  printh(bai + 0x30);
 257                  printh(shi + 0x30);
 258                  printh(ge + 0x30);
 259                  printh(0x20);
 260          }*/
 261          
 262          /*
 263          //浮点数打印到串口(最大99999)
 264          void pinint_float_decimal(float float_data)
 265          {                                 
 266                  unsigned long long_data;
 267                  unsigned char wan,qian,bai,shi,ge;
 268          
 269                  long_data=(unsigned int)float_data;
 270                  ge = long_data%10;
 271                  long_data = long_data/10;
 272                  shi = long_data%10;
 273                  long_data = long_data/10;
 274                  bai = long_data%10;
 275                  long_data = long_data/10;
 276                  qian = long_data%10;
 277                  long_data = long_data/10;
 278                  wan = long_data%10;
 279          
 280                  printh(wan + 0x30);
 281                  printh(qian + 0x30);
 282                  printh(bai + 0x30);
 283                  printh(shi + 0x30);
 284          //      printh(ge + 0x30);
 285                  printh(0x20);
 286          } */
 287          
 288          /*
 289          //以十进制方式显示电压,单位V.
 290          void disp_float_votage(float float_data,unsigned char decimal_digits)
 291          {                                 
 292                  unsigned long long_data;
 293                  unsigned char shiyi,yi,qianwan,baiwan,shiwan,wan,qian,bai,shi,ge;
 294          
 295                  long_data=(unsigned long)float_data;
 296                  ge = long_data%10;
 297                  long_data = long_data/10;
 298                  shi = long_data%10;
 299                  long_data = long_data/10;
 300                  bai = long_data%10;
 301                  long_data = long_data/10;
 302                  qian = long_data%10;
 303                  long_data = long_data/10;
C51 COMPILER V8.06   MAINPROG                                                              02/13/2009 09:29:07 PAGE 6   

 304                  wan = long_data%10;
 305                  long_data = long_data/10;
 306                  shiwan = long_data%10;
 307                  long_data = long_data/10;
 308                  baiwan = long_data%10;
 309                  long_data = long_data/10;
 310                  qianwan = long_data%10;
 311                  long_data = long_data/10;
 312                  yi = long_data%10;
 313                  long_data = long_data/10;
 314                  shiyi = long_data%10;
 315          
 316                  if (shiyi!=0) {
 317                          printh(shiyi + 0x30);   
 318                          printh(yi + 0x30);
 319                          printh(qianwan + 0x30);
 320                          printh(baiwan + 0x30);
 321                          printh(shiwan + 0x30);
 322                          printh(wan + 0x30);
 323                  }
 324                  else if (yi!=0) {
 325                          printh(yi + 0x30);
 326                          printh(qianwan + 0x30);
 327                          printh(baiwan + 0x30);
 328                          printh(shiwan + 0x30);
 329                          printh(wan + 0x30);
 330                  }
 331                  else if (qianwan!=0)    {
 332                          printh(qianwan + 0x30);
 333                          printh(baiwan + 0x30);
 334                          printh(shiwan + 0x30);
 335                          printh(wan + 0x30);
 336                  }
 337                  else if (baiwan!=0)     {
 338                          printh(baiwan + 0x30);
 339                          printh(shiwan + 0x30);
 340                          printh(wan + 0x30);
 341                  }
 342                  else if (shiwan!=0)     {
 343                          printh(shiwan + 0x30);
 344                          printh(wan + 0x30);
 345                  }
 346                  else if (shiwan!=0)     {
 347                          printh(shiwan + 0x30);
 348                          printh(wan + 0x30);
 349                  }
 350                  else if (wan!=0)        printh(wan + 0x30);
 351                  printh(qian + 0x30);
 352                  printh('.');
 353                  //printh(ge + 0x30);
 354                  //显示小数
 355                  if(decimal_digits==3){  //3位
 356                          printh(bai + 0x30);
 357                          printh(shi + 0x30);
 358                          printh(ge + 0x30);
 359                  }
 360                  else if(decimal_digits==1){      //1位
 361                          printh(bai + 0x30);
 362                  }
 363                  else{                                    //默认2位
 364                          printh(bai + 0x30);
 365                          printh(shi + 0x30);
C51 COMPILER V8.06   MAINPROG                                                              02/13/2009 09:29:07 PAGE 7   

 366                          //printh(ge + 0x30);
 367                  }
 368          
 369                  printh(0x20);
 370          }
 371          
 372          */
 373          
 374          //AD转换
 375          /*
 376          A/D 转换控制寄存器:ADC_CONTR      d7      d6     d5      d4       d3      d2   d1   d0
 377                                        ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
 378          d2-d0=0通道0,p1.0(12脚)作为ADC0;d2-d0=7通道7,p1.7(19脚)作为ADC7;
 379          SPEED1,SPEED0:模数转换器转换速度控制位
 380          SPEED1/SPEED0为A/D转换所需时间
 381                  1 1: 2 1 0 个时钟周期转换一次,CPU工作频率14.7456MHz时,A/D转换速度约70.217KHz,实测约30K
 382                  1 0: 4 2 0 个时钟周期转换一次
 383                  0 1: 6 3 0 个时钟周期转换一次
 384                  0 0: 8 4 0 个时钟周期转换一次
 385          ADC_POWER: ADC 电源控制位。0:关闭ADC 电源;1:打开A/D 转换器电源
 386          ADC_START: 模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换, 转换结束后为0 。
 387          ADC_FLAG: 模数转换器转换结束标志位,当A/D 转换完成后,ADC_FLAG = 1,要由软件清0。
 388          
 389          启动AD 转换前一定要确认AD 电源已打开,AD 转换结束后关闭AD 电源可降低功耗,也可不关闭。
 390          
 391          初次打开内部A/D 转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D 转换
 392          
 393          建议启动A/D 转换后,在A/D 转换结束之前,不改变任何I/O 口的状态,有利于高精度A/D 转换
 394          
 395          不管是A/D 转换完成后由该位申请产生中断,还是由软件查询该标志位A/D 转换是否结束,
 396          当A/D 转换完成后,ADC_FLAG = 1,一定要软件清0。
 397          
 398          ADC_HIGH / ADC_LOW 特殊功能寄存器: A/D 转换结果特殊功能寄存器
 399          模拟/ 数字转换结果计算公式如下:结果 ( ADC_HIGH[7:0],ADC_LOW[1:0] ) = 1024 x Vin / Vcc
 400          
 401          */
 402          
 403          

⌨️ 快捷键说明

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