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

📄 ad.lst

📁 利用带AD的单片机开发的单片机程序
💻 LST
字号:
C51 COMPILER V8.02   AD                                                                    08/31/2007 05:20:24 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE AD
OBJECT MODULE PLACED IN AD.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE AD.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1                    /*----------------------------------------------
   2          通讯+采集,程序可以使用
   3          发送方式与“1”有点不同
   4           
   5          ----------------------------------------------*/
   6          
   7          #include <aduc841.h>
   8          
   9          #define  CTH1 0xfd //定时期1,波特率设置9600
  10          #define  CTL1 0xfd
  11          
  12          #define  CTH0 0xee //定时期0,5ms
  13          #define  CTL0 0x00
  14          
  15          #define  uchar unsigned char  
  16          #define  uint unsigned int
  17          
  18          sbit P37=P3^7;
  19          
  20          uint senddata=0;//发送的数据
  21          uchar sendbuf[2]={0,0};   //发送的数据缓冲
  22          uchar delay1=0;   //延时采集
  23          
  24          bit  flag1=0;   //发送标志
  25          uchar sum=0;    //采集多次之和
  26          uint i=0;
  27          
  28          
  29          //--------------------------------------------------------
  30          uint adc(uchar temp); //ADC采集函数 
  31          void send(uchar num ,uchar *add);   //发送
  32          //--------------------------------------------------------
  33          
  34          
  35          /*------------------------------------------------------
  36          发送程序,num为发送字节的个数,add为指向发送数据的指针
  37          ------------------------------------------------------*/
  38          void send(uchar num ,uchar *add)
  39          {
  40   1       
  41   1       for(num=0;num<2;num++)
  42   1        {
  43   2        SBUF=*(add+num); 
  44   2        while(TI==0);//等待完毕,为下一次做准备
  45   2        TI=0;
  46   2        }
  47   1       flag1=0;//发送启动标志 */
  48   1      }
  49          
  50          
  51          /*------------------------------------------------------
  52          该段程序完成的是,对指定通道的采集,和滤波处理TEMP的值
  53          在0~7之间
  54          ------------------------------------------------------*/
  55          uint adc(uchar chinnels)  //通道选择
C51 COMPILER V8.02   AD                                                                    08/31/2007 05:20:24 PAGE 2   

  56          {
  57   1         uint da=0,max=0,min=0,count=0;
  58   1         long int sum=0;
  59   1         
  60   1         for(count=0;count<1000;count++)  //10次采集和滤波
  61   1          {
  62   2         ADCCON2=chinnels;
  63   2         SCONV=1;  //单次AD转换使能,“1”有效,转换完后由硬件清零
  64   2        
  65   2         while((ADCCON3&0x80)==0x80);  //检测转化是否完毕
  66   2      
  67   2         da=ADCDATAH&0x0f;
  68   2         da=(da<<8)+ADCDATAL;
  69   2      
  70   2         sum=sum+da;
  71   2      
  72   2         if(count==1) { max=da;min=da;}
  73   2         else if(max<da) max=da;
  74   2         else if(min>da) min=da;  
  75   2       }
  76   1      
  77   1       return (sum-max-min)/998;
  78   1      }
  79          
  80           
  81          
  82          /*------------------------------------------------------
  83          定时期0
  84          ------------------------------------------------------*/
  85          void time0(void)interrupt 1   //5ms
  86          {
  87   1       TH0=CTH0;
  88   1       TL0=CTL0;
  89   1        MDO=1;
  90   1      for(i=0;i<2;i++){
  91   2       delay1++;   //采集时间
  92   2       if(delay1>200)
  93   2       {
  94   3        delay1=0;      MDO=0;
  95   3        flag1=0;
  96   3        senddata=adc(i);
  97   3        sendbuf[0]=(senddata&0xf00)>>8;
  98   3        sendbuf[1]=senddata&0x0ff;
  99   3        flag1=1;}//发送启动标志
 100   2       }
 101   1      
 102   1      }
 103          
 104          /*------------------------------------------------------
 105          串口发送中断
 106          ------------------------------------------------------*/
 107          void com1(void)interrupt 4
 108          {
 109   1      }
 110          
 111          
 112          /*------------------------------------------------------
 113          主程序
 114          ------------------------------------------------------*/
 115          main()
 116          {
 117   1       I2CCON=0XFF;
C51 COMPILER V8.02   AD                                                                    08/31/2007 05:20:24 PAGE 3   

 118   1       MDE=1;
 119   1       TMOD=0x21;  //定时期1设置为方式2(自动添装),定时期0为方式1(16位计数)
 120   1      
 121   1       TH1=CTH1;
 122   1       TL1=CTL1;
 123   1      
 124   1       TH0=CTH0;
 125   1       TL0=CTL0;
 126   1      
 127   1       SCON=0x50;  //串口通讯方式1,“1+8+1”
 128   1       PCON=0;
 129   1      
 130   1       TR1=1;   //定时器1启动
 131   1       TR0=1;   //定时器0启动
 132   1      
 133   1       ADCCON1=0x64;   //对AD的基本设置
 134   1      
 135   1       MDE=1;
 136   1       I2CM=1;
 137   1      
 138   1       RI=0;
 139   1       TI=0;
 140   1      
 141   1       ET0=1;   //允许定时器0中断
 142   1       ES=1;   //串口中断允许
 143   1       EA=1;   //总中断
 144   1      
 145   1       while(1)
 146   1       {
 147   2       if(flag1==1)  //发送启动标志
 148   2        {P37=1;MCO=0;MDO=1;
 149   3        send(2,&sendbuf[0]);
 150   3         P37=0;MCO=1;MCO=0; 
 151   3        }
 152   2       }
 153   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    448    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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