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

📄 ad.lst

📁 模拟和数字转换芯片的驱动 该AD芯片是ADC0832
💻 LST
字号:
C51 COMPILER V7.07   AD                                                                    11/26/2007 19:54:09 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE AD
OBJECT MODULE PLACED IN AD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AD.c BROWSE DEBUG OBJECTEXTEND TABS(8)

stmt level    source

   1          #include "reg51.h"
   2          #include"intrins.h"
   3          sbit  data595=P0^2;                                                             /*74hc595的数据输入脚*/
   4          sbit  clk595=P0^0;                                                              /*74hc595的时钟输入脚*/
   5          sbit  str595=P0^1;                                                              /*74hc595的时钟状态脚*/
   6          sbit  Q0=P0^4;                                                                  /*数码管片选脚Q0*/
   7          sbit  Q1=P0^5;                                                                  /*数码管片选脚Q1*/
   8          sbit  Q2=P0^6;                                                                  /*数码管片选脚Q2*/
   9          sbit  Q3=P0^7;                                                                  /*数码管片选脚Q3*/
  10          sbit  cs=P2^0;                                                                  /*ADC0832片选脚*/
  11          sbit  clk=P2^1;                                                                 /*ADC0832时钟输入脚*/
  12          sbit  data_o=P2^2;                                                              /*ADC0832数据输入脚*/
  13          #define uchar unsigned char
  14          #define uint  unsigned int
  15          #define nop  _nop_()                                                            /*定义空操作指令*/
  16          #define XMS 5500                                                                /*定时中断间隔11.0592MHz*/       
             -                                
  17          uchar disppoint,tx_dat;
  18          uint buf[]={0,0,0,0};
  19          uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};              /*显示段表0~9*/
  20          void senddata(uchar date_)               /*发送数据*/                                                       
  21          {
  22   1              uchar m,i;
  23   1              str595=0;
  24   1              for(i=0;i<8;i++)                                         
  25   1                      {
  26   2                              clk595=0;
  27   2                              m=date_;                         
  28   2                              m&=0x80;                                                   /*保留M的最高位*/
  29   2                              data595=(bit)m;                                            /*在每个clk周期,同时送出1bit串行数据*/                               
  30   2                              date_<<=1;                                                 /*将date_向左移动一位*/
  31   2                              clk595=1;                                                  /*0-->1,clk为上升沿*/        
  32   2                      }
  33   1              str595=1;                                                                  /*数据送完,锁存到输出端进行显示*/                             
  34   1              str595=0;
  35   1       }                       
  36          void timer0(void) interrupt 1 using 0                                              /*定时器显示中断程序*/
  37          {
  38   1              EA=0;                                                                       /*关中断*/
  39   1              TH0=-(XMS/256);                                                             /*定时器赋值*/ 
  40   1              TL0=-(XMS%256);
  41   1              disppoint&=3;                                                               /*显示位赋值*/
  42   1              if(disppoint==2){tx_dat=seg[buf[disppoint]];tx_dat&=~0x80;senddata(tx_dat);}/*第三个数码显示小数点
             -*/
  43   1              else senddata(seg[buf[disppoint]]);
  44   1              switch(disppoint)                                                           /*显示片选处理*/
  45   1                      {
  46   2                              case 2:Q3=0;Q2=1;Q1=1;Q0=1;break;
  47   2                              case 3:Q2=0;Q3=1;Q1=1;Q0=1;break;
  48   2                              case 0:Q1=0;Q3=1;Q2=1;Q0=1;break;
  49   2                              case 1:Q0=0;Q3=1;Q2=1;Q1=1;break;
  50   2                      }
  51   1              disppoint++;
  52   1              EA=1;                                                                       /*开中断*/
  53   1      }
C51 COMPILER V7.07   AD                                                                    11/26/2007 19:54:09 PAGE 2   

  54          /***********************************************************/
  55          void BCD(uchar ad_)
  56          {
  57   1              uint temp;
  58   1              uchar i;
  59   1              temp=(uint)(((unsigned long)((unsigned long)ad_*500))/256);               /*将AD结果转换成BCD码*/
  60   1              for(i=0;i<3;i++)
  61   1                      {
  62   2                              buf[i]=temp%10;
  63   2                              temp=temp/10;
  64   2                      }
  65   1       }
  66          /**************************************************************/
  67          uchar read_adc(void)                    /*读取AD值*/
  68          {  
  69   1              uchar i,ch=0;
  70   1              cs=0; 
  71   1              clk=1;
  72   1              nop;
  73   1              nop;
  74   1              clk=0;
  75   1              nop;
  76   1              nop;
  77   1              for(;data_o==1;)                                                        /*等待AD转换结束*/
  78   1                      {
  79   2                              clk=1;
  80   2                              nop;
  81   2                              nop;
  82   2                              clk=0;
  83   2                              nop;
  84   2                              nop;
  85   2                      }
  86   1              for(i=0; i<8; i++)
  87   1                      {  
  88   2                              clk=1;
  89   2                              nop;
  90   2                              nop;
  91   2                              clk=0;
  92   2                              nop;
  93   2                              nop; 
  94   2                              ch=(ch<<1)|data_o;                                      /*读取串行数据*/
  95   2                      }
  96   1              cs=1;
  97   1              return(ch);
  98   1      }
  99          /***********************************************************************/
 100          
 101          void main(void)
 102          {
 103   1              uint ad=0;
 104   1              uchar j,tmp;
 105   1              uchar ad_temp[10]={0};
 106   1              P0=0xff;                                                                        /*P0初始化*/
 107   1              TMOD=0x01;                                                                      /*定时器工作方式*/
 108   1              TH0=-(XMS/256);                                                                 /*定时器赋值*/          
 109   1              TL0=-(XMS%256);
 110   1              TR0=1;                                                                          /*允许T0工作*/
 111   1              ET0=1;                                                                          /*允许T0中断*/
 112   1              EA=1;                                                                           /*允许全局中断*/
 113   1              while(1)
 114   1                      {
 115   2                              while(tmp!=read_adc())
C51 COMPILER V7.07   AD                                                                    11/26/2007 19:54:09 PAGE 3   

 116   2                                      {
 117   3                                              tmp=read_adc();
 118   3                                              for(j=0;j<10;j++)ad_temp[j]=read_adc();         /*读取10次AD值*/
 119   3                                              for(j=0;j<10;j++)ad=ad+ad_temp[j];              /*AD值累加*/
 120   3                                              tmp=(uchar)(ad/10);                             /*计算平均值*/
 121   3                                              BCD(tmp);                                       /*BCD转换*/
 122   3                                              ad=0; 
 123   3                                      } 
 124   2                      } 
 125   1       }
 126          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    383    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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