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

📄 admp.lst

📁 At89C51与MAX186串行A/D采样程序。采集三个数码盘启动阈值
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.10  ADMP                                                                   12/23/2007 21:31:00 PAGE 1   


C51 COMPILER V6.10, COMPILATION OF MODULE ADMP
OBJECT MODULE PLACED IN E:\刘贞\天津项目\单片机~1\AD采集~4\ADMP.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\刘贞\天津项目\单片机~1\AD采集~4\ADMP.C DB SB OE

stmt level    source

   1          /*******MAX186串行A/D采样程序********/
   2          
   3          #include<reg51.h>
   4          #include<stdio.h>
   5          #include<absacc.h>
   6          
   7          /****定义与码盘地址****/
   8          
   9          #define BYTE0 XBYTE[0x1E00]
  10          #define BYTE1 XBYTE[0x1D00]
  11          #define BYTE2 XBYTE[0x1B00]
  12          #define BYTE3 XBYTE[0x1700]
  13          #define CLC   XBYTE[0x0F00]
  14          
  15          /****定义与MAX186相关的I/O口****/
  16          sbit max186_sclk = P1^2;
  17          sbit max186_cs = P1^3;
  18          sbit max186_din = P1^4;
  19          sbit max186_sstrb = P1^5;
  20          sbit max186_dout = P1^6;
  21          
  22          
  23          
  24          /*****函数声明****/
  25          unsigned int max186_ad(unsigned char);
  26          void send_cb(unsigned char);//控制字发送函数
  27          unsigned int receive(void);//数据接收函数
  28          void delay(unsigned long);//延时函数
  29          void T0_ISR(void);
  30          void t0_init();
  31          void init_serialcomm(void);   //串口初始化
  32          void serial ();
  33          void send_char_com(unsigned char ch);
  34          unsigned long Globtime;
  35          unsigned char Ctl186;  //186控制字
  36          int volt_yz;  //启动 阈值
  37          
  38          /*****主函数****/
  39          void main()
  40          {
  41   1         unsigned int ad_result;
  42   1         unsigned char DAT0,DAT1;
  43   1         unsigned char MP[4];
  44   1         unsigned char i;
  45   1         unsigned int Adrslt;  //ad结果
  46   1         unsigned int UItemp ;
  47   1         int volt_cur;  //当前电压值
  48   1         int Itemp;
  49   1         Globtime=0;
  50   1         t0_init();
  51   1         init_serialcomm();
  52   1         DAT0 = CLC;
  53   1         EA=1;
  54   1         Ctl186=0x85;
  55   1         volt_yz=-50;  //启动 阈值 -50mv
C51 COMPILER V6.10  ADMP                                                                   12/23/2007 21:31:00 PAGE 2   

  56   1         while (1)
  57   1         {
  58   2      
  59   2      
  60   2             if(Globtime>99)
  61   2              {
  62   3                  //向串口发送数据
  63   3                  Globtime=0;
  64   3                  Adrslt=0;
  65   3                  //Ctl186=0xBE;
  66   3                  Itemp=0;
  67   3                /*  for(i=0;i<5;i++)
  68   3                  {
  69   3                    // Adrslt= Adrslt+ max186_ad(Ctl186)/16;
  70   3                    Itemp=   Itemp +  max186_ad(Ctl186);
  71   3                  }   */
  72   3                  Adrslt= Itemp/5;
  73   3                  Adrslt= max186_ad(Ctl186);
  74   3                  DAT0 = Adrslt/256;
  75   3                  DAT1 = Adrslt%256;
  76   3                //  send_char_com(DAT0);
  77   3               //   send_char_com(DAT1);
  78   3                  MP[0] = BYTE3;
  79   3                  MP[1] = BYTE2;
  80   3                  MP[2] = BYTE1;
  81   3                  MP[3] = BYTE0;
  82   3                  //计算电压值
  83   3                  UItemp =   Adrslt;
  84   3                  if(UItemp>=0x8000)  // 负数
  85   3                  {
  86   4      		UItemp =UItemp&0x7ff0;
  87   4      		UItemp =UItemp/16;
  88   4      		UItemp =UItemp-1;
  89   4      		UItemp =~UItemp;
  90   4      		UItemp =UItemp&0x7ff;
  91   4      		volt_cur= -(int)UItemp;
  92   4      	    }
  93   3      	    else
  94   3      	    {
  95   4      	        UItemp =UItemp/16;
  96   4      	        volt_cur= (int)UItemp;
  97   4      	    }
  98   3                  if(  volt_cur> volt_yz)  //如果大于阈值则
  99   3                  {
 100   4                      send_char_com(0xff);
 101   4                      send_char_com(0x00);
 102   4                      send_char_com(0xff);
 103   4                      send_char_com(0x00);
 104   4                      send_char_com(DAT0);
 105   4                      send_char_com(DAT1);
 106   4                      for(i=0;i<4;i++) { send_char_com(MP[i]);}
 107   4                   }
 108   3              }
 109   2      
 110   2         }
 111   1      }
*** WARNING C280 IN LINE 41 OF E:\刘贞\天津项目\单片机~1\AD采集~4\ADMP.C: 'ad_result': unreferenced local variable
 112          //串口中断函数
 113          void serial () interrupt 4 using 3
 114          {
 115   1         unsigned char ch;
 116   1         unsigned char tmp;
C51 COMPILER V6.10  ADMP                                                                   12/23/2007 21:31:00 PAGE 3   

 117   1         static unsigned char cnt;
 118   1         static unsigned char recchar[4];
 119   1         if(RI)
 120   1         {
 121   2             RI = 0;
 122   2             ch=SBUF;
 123   2             if(cnt>=6) cnt=0;
 124   2             if(ch==0xff)  cnt=0;  //帧头
 125   2             else if(ch==0xfe&&cnt==4)  //帧尾
 126   2             {
 127   3               if     (recchar[0]==0x00)   Ctl186 = 0x85; //通道0
 128   3               else if(recchar[0]==0x01)   Ctl186 = 0xc5; //通道1
 129   3               else if(recchar[0]==0x02)   Ctl186 = 0x95; //通道2
 130   3               else if(recchar[0]==0x03)   tmp=CLC;   //码盘清零
 131   3               else if(recchar[0]==0x05)      //启动阈值
 132   3               {
 133   4                  volt_yz=  (int)(recchar[2]/16)*1000+(int)(recchar[2]&0x0f)*100
 134   4                           +(int)(recchar[3]/16)*10  +(int)(recchar[3]&0x0f);
 135   4                  if( recchar[1]==1) volt_yz=-volt_yz;
 136   4               }
 137   3             }
 138   2             else
 139   2             {
 140   3                 recchar[cnt]=ch;
 141   3                 cnt++;
 142   3             }
 143   2         }
 144   1      }
 145          //延时函数
 146          void delay(unsigned long dly_time) //延时
 147          {
 148   1       while ( (dly_time--) > 0 )
 149   1       { ; }
 150   1      }/***********************
 151          串口初始化
 152          /**********************/
 153          void init_serialcomm(void)   //串口初始化
 154          {
 155   1         SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
 156   1         TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload
 157   1         PCON |= 0x00;       //SMOD=1;
 158   1         TH1   = 0xFD;       //Baud:9600  fosc=11.0592MHz
 159   1         // TH1   = 0xF3;     //6M wei 2400bps
 160   1         IE   |= 0x91;       //Enable Serial Interrupt
 161   1         TR1   = 1;          // timer 1 run
 162   1        // TI=1;
 163   1      }
 164          /**********************
 165          串口发送一个字符
 166          /*********************/
 167          void send_char_com(unsigned char ch)
 168          {
 169   1         SBUF=ch;
 170   1          do{}while(TI==0);
 171   1          TI=0;
 172   1      }
 173          
 174          
 175          void t0_init()
 176          {
 177   1        TMOD=0x01;  //T0工作在方式1,16位定时器
 178   1        TH0=0XFC;
C51 COMPILER V6.10  ADMP                                                                   12/23/2007 21:31:00 PAGE 4   

 179   1        TL0=0X18;

⌨️ 快捷键说明

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