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

📄 mainprog.lst

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


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

line level    source

   1          /*
   2          水6月15日 47吨 每吨2.93共137.7元
   3          卫生费24   电共1088,每度0.49元,共1088*0.49=533元。
   4          */
   5          
   6          #include        <intrins.h>               //含_nop_()函数
   7          #include "SM5964reg.h"
   8          #include "OS_CFG.H"
   9          #include "NewType.h"
  10          #include "SerialNewType.h"
  11          #include "ht1621.h"
  12          
  13          //****************************************************************************//
  14          //注意在SerialNewType.h中修改摘机振铃次数(pick_ring_times)供北京铁通使用。    //
  15          //注意如果需要将程序改为拨9次电话不锁机在os_cfg.h中修改CALL9_LOCK_LINE        //
  16          //****************************************************************************//
  17          //定义版本号常量
  18          unsigned char code Versoin[]={"070723"};
  19          //中断用全局变量
  20          bit ADC0_open=0;        //adc0打开控制
  21          bit ADC1_open=1;        //adc1打开控制
  22          bit ADC2_open=0;        //adc2打开控制
  23          bit ADC3_open=1;        //adc3打开控制
  24          
  25          unsigned char timer0_interrupt_counter;
  26          unsigned int ADC_result_intr;           //adc结果
  27          unsigned int ADC_result_intr0;
  28          unsigned int ADC_result_intr1;
  29          unsigned int ADC_result_intr2;
  30          unsigned int ADC_result_intr3;
  31          unsigned long ADC1_accumulate_intr;             //1通道累加值
  32          unsigned int ADC2_accumulate_intr;              //2通道累加值
  33          unsigned int ADC3_accumulate_intr;              //3通道累加值
  34          unsigned char ADC2_counter_intr;                        //adc计数
  35          unsigned char ADC3_counter_intr;                        //adc计数
  36          
  37          //主程序使用变量
  38          unsigned long idata ADC1_accumulate;                    //1通道累加值
  39          
  40          unsigned int ADC_result1,ADC_result2,ADC_result3;               //adc结果
  41          
  42          float  ADC0_coefficient;        //adc系数
  43          float  ADC1_coefficient;        //adc系数
  44          float  ADC2_coefficient;        //adc系数
  45          float  ADC3_coefficient;        //adc系数
  46          float idata charge;                             //累加电荷量
  47          float start_votage;             //充电起始电压
  48          float Curent_Votage;                    //当前电压
  49          float Votage;                                   //电压值
  50          float current;                  //电流记录
  51          float Capacitance;                      //电容
  52          float resistance;
  53          
  54          unsigned char chip_connect;             //芯片是否连接
  55          unsigned char timer0_10ms=0;
C51 COMPILER V8.06   MAINPROG                                                              02/13/2009 09:29:07 PAGE 2   

  56          unsigned char timer0_0d1s=0;
  57          unsigned char timer0_1s=0;
  58          bit flag_1ms_adc=0;
  59          bit flag_10ms_1=0;
  60          bit flag_0d1s=0;
  61          bit flag_1s_1=0;
  62          unsigned int resistance_measure_1ms=0;
  63          
  64          unsigned char data Mesure_state;                //侧量状态
  65          unsigned int data Mesure_counter_10ms;  //侧量计数
  66          unsigned char data disp_flag;           //动态显示电压标志
  67          unsigned char data stop_flag;           //停止测试标志
  68          unsigned char data second;              //秒    
  69          unsigned char data minute;              //分钟
  70          unsigned char data hour;                //小时
  71          
  72          unsigned char Display_state=0;
  73          unsigned char RefreshDisplay_1s=0;
  74          unsigned char MAX_SP=0;
  75          #define timer0_counter_start 65536-(25000/4)*5 +20;
  76          
  77          extern bit Ti;                                  //Ti=1,串口准备好,可以发送数据
  78          extern bit SendBufFullFlag;             //发送缓冲区满标志
  79          bit RefreshDisplay_0d1s;
  80          
  81          void main()
  82          {
  83   1      
  84   1              //初始化硬件设置。
  85   1              //WDTC = 0x87;                  //5964打开看门狗。复位周期限约4秒钟。
  86   1              WDTC = 0x3f;                    //stc89le516打开看门狗。复位周期限约4.5秒钟。
  87   1              
  88   1              //初始化定时器及串口。
  89   1              IP = 0x02;                              //T0为高级中断
  90   1              TMOD = 0x21;            //定时器0设为方式1,定时器1设为方式2。
  91   1                                  //(方式1:16位计数结构。方式2:8位重置)
  92   1              //TL0 = 0x00;                   //普通定时器初值。14745600Hz下,10ms产生一次中断。
  93   1              //TH0 = 0xd0;                   //65536-14745600/1200=0xd000
  94   1      
  95   1              TL0 = 0x00;                             //12倍速
  96   1              TH0 = 0xd0;                             //65536-14745600/1000=0xc666
  97   1      
  98   1      
  99   1              TL1 = BAUDRATE9600;    //定时器一作为波特率发生器。初值
 100   1              TH1 = BAUDRATE9600;    //重装值,BAUDRATE38400作为系统默认值。
 101   1      
 102   1              PCON = 0x80;            //pcon=#80h时,SMOD=1,波特率加倍;
 103   1                                                              //波特率=(2^SMOD)*(振荡频率/[384(256-TH1)]
 104   1              SCON = 0x50;            //串行口设为方式1,REN=1允许接收。
 105   1                                  //定时器1作为波特率发生器,1个起始位,8个数据位,1个停止位。
 106   1              TCON = 0x50;            //启动T0,T1。
 107   1      
 108   1          P0=0xff;
 109   1              P0M0=0;                         //P0为普通I/0
 110   1              P0M1=0;                                                         
 111   1      
 112   1          P1=0xff;
 113   1              P1M0=0x0f;                              //P1.4-01.7推挽输出1,其它为输入
 114   1              P1M1=0xf0;                                                              
 115   1      
 116   1          P2=0;                               //各开关均关闭
 117   1      
C51 COMPILER V8.06   MAINPROG                                                              02/13/2009 09:29:07 PAGE 3   

 118   1          P3=0xff;
 119   1              P3M0=0;                         //P3为普通I/O输入
 120   1              P3M1=0;                                                         
 121   1      
 122   1      
 123   1      
 124   1              CLK_DIV=0;      //时钟分频00=1,01=2,03=4,03=8,04=16,05=32,06=64,07=128
 125   1              AUXR=0x80;      //d7=1,T0为系统时钟,d6=0,T1为系统时钟/12,d5=0,正常串口波特率
 126   1              
 127   1              //葛同府所写模块初始化函数。
 128   1              InitialGeTF();
 129   1              InitialHT1621();
 130   1              ClearDisplay();
 131   1      
 132   1              timer0_0d1s=0;
 133   1              Mesure_state=0;
 134   1              disp_flag=1;    //动态显示电压
 135   1              ADC_coefficient_measure();      //ADC系数计算
 136   1              IE = 0x92;              //允许T0、串行中断开,开总中断位。
 137   1      
 138   1          while(1)
 139   1          {
 140   2                      //清硬件看门狗。
 141   2                      CearHardWatchDog();
 142   2                      Display ();
 143   2                      //葛同府所写任务调用。
 144   2                      TaskGeTF();
 145   2                      //键盘扫描
 146   2                      JP_SM();
 147   2                      //电容测量
 148   2                      Capacitance_Mesure();
 149   2              }
 150   1      }
 151          
 152          void Timer() interrupt 1
 153          {
 154   1              //TL0 = 0x1e;   
 155   1              //TH0 = 0xd0;   //14745600Hz下,系统时钟/12,10ms产生一次中断计数器初值为0xd000。
 156   1      
 157   1              TL0 = TL0+0x66; 
 158   1              TH0 = 0xc6;             //14745600Hz下,系统时钟/1,1ms产生一次中断计数器初值为0xc666。
 159   1              if (SP <0x20)
 160   1              {
 161   2               // sp_over_flow=1; 
 162   2                if (SP>MAX_SP) MAX_SP=SP; //最大堆栈
 163   2              }
 164   1              if (F12_drv==1) F12_drv=0;
 165   1              else F12_drv=1;
 166   1                                                                               
 167   1              //0通道转换
 168   1              if (ADC0_open==1){      //adc0打开控制
 169   2                      ADC_CONTR=0xe8+0;                                       //启动AD转换,用最低转换速率
 170   2                      while ((ADC_CONTR & 0x10)==0) {}
 171   2                      ADC_CONTR=0xe0+0;                                       //停止AD转换
 172   2                      ADC_result_intr0 = ADC_HIGH*4;
 173   2                      ADC_result_intr0 +=ADC_LOW & 0x03;                      //adc结果
 174   2              }
 175   1              //1通道转换
 176   1              if (ADC1_open==1){      //adc1打开控制
 177   2                      ADC_CONTR=0xe8+1;                                       //启动AD转换,用最低转换速率
 178   2                      while ((ADC_CONTR & 0x10)==0) {}
 179   2                      ADC_CONTR=0xe0+1;                                       //停止AD转换
C51 COMPILER V8.06   MAINPROG                                                              02/13/2009 09:29:07 PAGE 4   

 180   2                      ADC_result_intr1 = ADC_HIGH*4;
 181   2                      ADC_result_intr1 +=ADC_LOW & 0x03;                      //adc结果
 182   2                      ADC1_accumulate_intr +=ADC_result_intr1;                //2通道累加值
 183   2              }
 184   1              //2通道转换
 185   1              if (ADC2_open==1){      //adc2打开控制
 186   2                      ADC_CONTR=0xe8+2;                                       //启动AD转换,用最低转换速率
 187   2                      while ((ADC_CONTR & 0x10)==0) {}
 188   2                      ADC_CONTR=0xe0+2;                                       //停止AD转换
 189   2                      ADC2_accumulate_intr += ADC_HIGH*4;
 190   2                      ADC2_accumulate_intr +=ADC_LOW & 0x03;                  //adc结果
 191   2                      if (++ADC2_counter_intr>=4) {
 192   3                              ADC2_counter_intr=0;
 193   3                              ADC_result_intr2=ADC2_accumulate_intr/4;        //adc计数
 194   3                              ADC2_accumulate_intr=0;
 195   3                      }
 196   2              }
 197   1              //3通道转换

⌨️ 快捷键说明

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