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

📄 com.lst

📁 本人自己写的用C8051F020驱动的DAC8541程序,直接对口操作,信号非常好,已经完全经过调试
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   COM                                                                   10/03/2007 21:56:30 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE COM
OBJECT MODULE PLACED IN .\com.obj
COMPILER INVOKED BY: F:\Program Files\keil c51\C51\BIN\C51.EXE ..\com.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\com.obj)

line level    source

   1          #pragma  REGPARMS
   2          
   3          #include <math.h>
   4          #include <stdlib.h>
   5          #include <stdio.h>
   6          #include <string.h>
   7          
   8          #include <absacc.h>
   9          #include <c8051f020.h>  
  10          #include <intrins.h>
  11          #define   SDA   0x20//BIT0
  12          #define   SCL   0x10//BIT1
  13          #define   _NOP()  _nop_()
  14          #define   DIN   P4
  15          #define uchar unsigned char
  16          #define uint  unsigned int
  17          #define   S_SDA P4|=SDA//DDIR|=SDA,DOUT|=SDA
  18          #define   C_SDA P4&=~SDA//DDIR|=SDA,DOUT&=~SDA
  19          #define   S_SCL P4|=SCL//DDIR|=SCL,DOUT|=SCL
  20          #define   C_SCL P4&=~SCL//DDIR|=SCL,DOUT&=~SCL
  21          //#define   SDA_IN _NOP//DDIR&=~SDA
  22          #define   READ_SDA  _nop_()//(DIN&SDA)
  23          //#define   delay() _nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(
             -),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(),_nop_(
             -)
  24          /***************************************************/
  25          unsigned char ack=0;
  26          /********************************************/
  27          
  28          #include "com.h"
  29          
  30          sfr16 DP       = 0x82;                 // data pointer
  31          sfr16 TMR3RL   = 0x92;                 // Timer3 reload value
  32          sfr16 TMR3     = 0x94;                 // Timer3 counter
  33          sfr16 ADC0     = 0xbe;                 // ADC0 data
  34          sfr16 ADC0GT   = 0xc4;                 // ADC0 greater than window
  35          sfr16 ADC0LT   = 0xc6;                 // ADC0 less than window
  36          sfr16 RCAP2    = 0xca;                 // Timer2 capture/reload
  37          sfr16 T2       = 0xcc;                 // Timer2
  38          sfr16 RCAP4    = 0xe4;                 // Timer4 capture/reload
  39          sfr16 T4       = 0xf4;                 // Timer4
  40          sfr16 DAC0     = 0xd2;                 // DAC0 data
  41          sfr16 DAC1     = 0xd5;                 // DAC1 data
  42          
  43          //-----------------------------------------------------------------------------
  44          // Global CONSTANTS
  45          //-----------------------------------------------------------------------------
  46          
  47          #define BAUDRATE     9600              // Baud rate of UART in bps
  48          #define SYSCLK       11059200          // SYSCLK frequency in Hz
  49          #define SAMPLE_RATE  50000             // Sample frequency in Hz
  50          #define INT_DEC      256               // integrate and decimate ratio
  51          
  52          
  53          unsigned int ii,j;
C51 COMPILER V7.50   COM                                                                   10/03/2007 21:56:30 PAGE 2   

  54          unsigned int xdata chii;
  55          float f;
  56          unsigned int VCH0,VCH1,VCH2,VCH3,VCH4,VCH5,VCH6,VCH7;
  57          unsigned int xdata BB[1024];
  58          unsigned char bufer[8];
  59          //**************----------------------------------------
  60          /*void chad(int buffer[],int n)      //invert the array BB
  61          { 
  62           int i,j,temp,m=(n-1)/2;
  63           for(i=0;i<=m;i++)
  64           {j=n-1-i;
  65            temp=buffer[i];buffer[i]=buffer[j];buffer[j]=temp;}
  66            return;
  67           
  68           }
  69          /**************------------------------------------------
  70          */
  71          
  72          void delay()
  73          {
  74   1              uchar i,j;
  75   1              for(i=0;i<=100;i++)
  76   1                      {
  77   2                              for(j=0;j<=100;j++)
  78   2                                      ;
  79   2                      }
  80   1      }
  81          
  82          //***********************************************************************************
  83          void SYSCLK_Init (void)
  84          {
  85   1         int i;                              // delay counter
  86   1      
  87   1         OSCXCN = 0x67;                      // start external oscillator with
  88   1                                             // 22.1184MHz crystal
  89   1      
  90   1         for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)
  91   1      
  92   1         while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
  93   1      
  94   1         OSCICN = 0x88;                      // select external oscillator as SYSCLK
  95   1                                             // source and enable missing clock
  96   1                                             // detector
  97   1      }
  98          
  99          //-----------------------------------------------------------------------------
 100          // PORT_Init   use cpumodel.pcb
 101          //-----------------------------------------------------------------------------
 102          
 103          void PORT_Init (void)
 104          {
 105   1              XBR0    = 0x06;  //Enable UART0      P0.0=TXD0      P0.1=RXD0
 106   1                           //Enable SPI        P0.2=SCK       P0.3=MISO
 107   1                           //                  P0.4=MOSI      P0.5=NSS
 108   1                                              
 109   1              XBR1    = 0x00;  //
 110   1                           
 111   1                          
 112   1      
 113   1              XBR2    = 0x42;  //Enable pin on 
 114   1                                              
 115   1                                               //Enable UART1      P0.4=TXD1     P0.5=RXD1 
C51 COMPILER V7.50   COM                                                                   10/03/2007 21:56:30 PAGE 3   

 116   1                                                              
 117   1         
 118   1      
 119   1          P1MDOUT |= 0x40;  // Enable          P1.6 output
 120   1          
 121   1      //      EMI0CF=0x37;
 122   1          EMI0CF=0x3B;      //RAM set: D5=1   外部Ram on p4-p7              
 123   1                            //         d4=1   不复用
 124   1                            //         d3d2=10 <4k use in chip , >4k:use outside
 125   1      //      EMI0CF=0x3F;      //         d3d2=11 only use outside  To:NP441 2006.8.8
 126   1                         
 127   1      }
 128          
 129          //-----------------------------------------------------------------------------
 130          // UART0_Init
 131          //-----------------------------------------------------------------------------
 132          // Configure the UART0 using Timer1, for <baudrate> and 8-N-1.
 133          
 134          void UART0_Init (void)
 135          {
 136   1         SCON0   = 0x50;                     // SCON0: mode 1, 8-bit UART, enable RXD
 137   1         TMOD    = 0x20;                     // TMOD: timer 1, mode 2, 8-bit reload
 138   1         TH1    = -(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
 139   1         TR1    = 1;                         // start Timer1
 140   1         CKCON |= 0x10;                      // Timer1 uses SYSCLK as time base
 141   1         PCON  |= 0x80;                      // SMOD00 = 1
 142   1         TI0    = 1;                         // Indicate TX0 ready
 143   1      }
 144          
 145          
 146          //-------------------------------------------------------
 147          //      ADC0初始化
 148          //-------------------------------------------------------
 149          
 150          void ADC0_init (void)
 151          {
 152   1              ADC0CN=0x81;    // ADC0 d7=1:开,      d6=0:跟踪方试,
 153   1                              //      d5:AD0 INT标志,d4:AD0BUSY
 154   1                              //     d3d2=00:AD)BUSY=1起动,
 155   1                                              //     d0=1:数据左对齐  
 156   1                          
 157   1              ADC0CF=0x48;    //ADC0时钟为系统时钟 5分频  放大器=1
 158   1              AMX0CF=0x00;    //Ain0-Ain7 单端输入0-3.3v
 159   1              
 160   1              AMX0SL=0x07;    //转换CH7
 161   1              for(ii=0;ii<40;ii++){;}
 162   1              AD0BUSY=1;
 163   1              for(ii=0;ii<400;ii++){;}
 164   1              ADC0CN =0x81;
 165   1              VCH7=ADC0>>4;
 166   1              
 167   1              AMX0SL=0x06;    //转换CH6
 168   1              for(ii=0;ii<40;ii++){;}
 169   1              AD0BUSY=1;
 170   1          for(ii=0;ii<400;ii++){;}
 171   1              ADC0CN =0x81;
 172   1              VCH6=ADC0>>4;
 173   1      
 174   1      
 175   1      }
 176          
 177          //-----------------------------------------------------
C51 COMPILER V7.50   COM                                                                   10/03/2007 21:56:30 PAGE 4   

 178          //DAC_init
 179          //-----------------------------------------------------
 180          void DAC_init(void)
 181          {
 182   1         DAC0CN=0x80;//DAC0 enable 更新数据在写DAC0 高字节时,高4位在DAC0H中,低8位在DAC0L中
 183   1         DAC1CN=0x80;//有问题,在C中高位在前,低位在后,而SFR中低位在前,
 184   1         REF0CN=0x0b;//
 185   1      }
 186          
 187          
 188           /******************************************
 189          启动总线函数
 190          **************************************/
 191          void  start()
 192          {     
 193   1            S_SDA;
 194   1            _NOP();
 195   1            S_SCL;
 196   1            delay();
 197   1            C_SDA;
 198   1            delay();
 199   1            C_SCL;
 200   1            _NOP();
 201   1            _NOP();
 202   1      }
 203          /************************************
 204          停止总线函数
 205          **************************************/
 206          void stop()
 207          {   
 208   1           C_SDA;
 209   1               _NOP();
 210   1               S_SCL;
 211   1               _NOP();
 212   1      
 213   1          // C_SCL;
 214   1          _NOP();
 215   1           //C_SDA;
 216   1            delay();
 217   1         //   S_SCL;
 218   1            delay();
 219   1            S_SDA;   
 220   1          _NOP();
 221   1          _NOP();
 222   1          _NOP();
 223   1          _NOP();     
 224   1      }
 225          /************************************
 226          发送一个字节函数
 227          **************************************/
 228          void SendByte(uchar c)
 229          {
 230   1            uchar i;    
 231   1            for(i=0;i<8;i++)
 232   1                {
 233   2                  if((c<<i)&0x80)
 234   2                      S_SDA;
 235   2                  else
 236   2                      C_SDA;
 237   2                  delay();
 238   2                  S_SCL;
 239   2                  delay();
C51 COMPILER V7.50   COM                                                                   10/03/2007 21:56:30 PAGE 5   

 240   2                  C_SCL;
 241   2                  delay();
 242   2                }

⌨️ 快捷键说明

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