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

📄 text.lst

📁 MSC1210单片机在TINY操作系统下的C语言例程
💻 LST
字号:
C51 COMPILER V7.01  TEXT                                                                   01/18/2006 15:50:36 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE TEXT
OBJECT MODULE PLACED IN Text.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE Text.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include <REG1210.H>      /* special function register 1210       */
   3          #include <stdio.h>        /* standard I/O .h-file                 */
   4          #include <rtx51tny.h>     /* RTX-51 tiny functions & defines      */
   5          #include <stdlib.h>
   6          #include <string.h>
   7          #include <16b.h>
   8          
   9          #define uint  unsigned int
  10          #define uchar unsigned char
  11          
  12          
  13          sbit   DAC8532=P1^4;         /*dac8532                                  */    
  14          unsigned char data ccnun=4,chanl_n=0;   
  15          uint   daval1=0;
  16          uint   daval2=0;
  17          
  18          
  19          void write_8532(unsigned int val,unsigned char port) 
  20          {
  21   1          uchar i;
  22   1              SPICON = SPICON_8532;
  23   1              DAC8532 =0;
  24   1              for(i=0;i<5;i++)
  25   1              {;}
  26   1          if(port==1)
  27   1              {
  28   2                      while((AIE&0X08)!=0X08){}SPIDATA=Dac8532A;
  29   2                      while((AIE&0X08)!=0X08){}SPIDATA=((val>>8)&0xFF);
  30   2              while((AIE&0X08)!=0X08){}SPIDATA=((val)&0xFF);
  31   2              }
  32   1              if(port==2)
  33   1              {
  34   2                      while((AIE&0X08)!=0X08){}SPIDATA=Dac8532B;
  35   2                      while((AIE&0X08)!=0X08){}SPIDATA=((val>>8)&0xFF);
  36   2              while((AIE&0X08)!=0X08){}SPIDATA=((val)&0xFF);
  37   2              }
  38   1              for(i=0;i<5;i++)
  39   1              {;} 
  40   1              DAC8532 =1;
  41   1      }
  42          
  43          
  44          /* initial spi ,SPICON在各自的子程序中设置*/
  45          void init_spi(void)
  46          {
  47   1              P1DDRH=0x75;            /* SPI port setup */
  48   1              SPITCON=SCLK_EN|DRV_EN;
  49   1          PDCON &= ~(PDSPI);          /* turn on SPI  */
  50   1      }
  51          
  52           /* initial ADC */
  53          void init_adc(void)
  54          {               
  55   1              int decimation=720;                                             /* factor of extractive  */
C51 COMPILER V7.01  TEXT                                                                   01/18/2006 15:50:36 PAGE 2   

  56   1          EAI = CLEAR;                                  
  57   1              ACLK = 4;                                                                       /* ACLK = 11.0592 MHz/(9+1) = 1.10592 MHz */
  58   1              ADCON0 &= (~(BOD|EVREF|VREFH|EBUF)|PGA_1);      /* Vref Off,Extenal Verf,Buff off,BOD off, PGA=1 */
  59   1              ADCON1 = (POL|SM_3|CAL_1);                                      /* Unipolar, sinc3, self calibration, offset, gain */
  60   1              ADCON2 = decimation & 0xff;                                     /* LSB of decimation */
  61   1              ADCON3 = (decimation >>8)&0x07;                         /* MSB of decimation */
  62   1              SSCON = CLEAR;
  63   1              ADMUX = INP_0|INN_COM;                                          /* Select AIN0+/Acom- */
  64   1              adcsum.ps = CLEAR;                                                      /* buffer sp clear */
  65   1          AIE = AD_EN;                                                        /* Enable Aux Interrupt */
  66   1              EAI=SET ;                                                                       
  67   1              AI=CLEAR;
  68   1      }
  69          
  70          
  71                 /*辅助中断服务程序*/
  72          assistant_proc() interrupt 6 using 3
  73          {
  74   1              signed long int xdata result;
  75   1              switch(PAI&0x0f)
  76   1              {
  77   2                      case 0x06://adc滤波中断
  78   2                      {
  79   3                              if (ccnun--)    result=unipolar();                              // Dummy read to clear ADCIRQ
  80   3                              else
  81   3                              {                       
  82   4                                      result=unipolar();                                                      // read to clear ADCIRQ
  83   4                                      adcsum.buf[adcsum.ps]=result>>8;                        // read to clear ADCIRQ
  84   4                                      switch ((chanl_n++)&0x01)
  85   4                                      {
  86   5                                              case 0:
  87   5                                              {
  88   6                                                      ADMUX=((chanl_n+1)<<3)|0x08;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
             -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
  89   6                                                      adcsum.ps=(chanl_n+1)>>1;
  90   6                                              }break;
  91   5                                              case 1:
  92   5                                              {
  93   6                                                      ADMUX=0x08;
  94   6                                                      adcsum.ps=0;
  95   6                                              }break;
  96   5                                      }
  97   4                                      chanl_n= (chanl_n<8)? chanl_n : 0 ;
  98   4                                      ccnun=4;        
  99   4                              }
 100   3                      }break;
 101   2      
 102   2              }
 103   1              AI=CLEAR;
 104   1      }
 105          
 106           /******************************************************************************/
 107          /*        Task 0 'init': Initialize                                           */
 108          /******************************************************************************/
 109          void init (void) _task_ INIT  /* program execution starts here        */
 110          {      
 111   1          init_spi();
 112   1          init_adc();
 113   1          PDCON |= PDWDT;                                             /* turn oFF WatchDog  */
 114   1              WDTCON |= EWDT;                                 /* set ewbt            */
 115   1              WDTCON &= ~EWDT;                                /* clear ewbt set timeout=8,900ms    */
 116   1          PDCON &= ~(PDSPI|PDAD);                     /* turn on SPI and ADC device */ 
C51 COMPILER V7.01  TEXT                                                                   01/18/2006 15:50:36 PAGE 3   

 117   1          DAC8532 =1;
 118   1          os_create_task (LOGIC_JUDGE);
 119   1              os_delete_task (INIT);              /* stop init task (no longer needed)    */
 120   1      }
 121          
 122          /*--------------------------------------------------------------------------
 123                                读写FPGA
 124          ---------------------------------------------------------------------------*/
 125          
 126          void logic_judge (void) _task_ LOGIC_JUDGE  
 127          {       
 128   1          int data i=0;
 129   1              while(1)
 130   1              {
 131   2                      os_wait (K_TMO, 10,0);
 132   2                  for(i=0;i<5;i++)
 133   2              {
 134   3                  *(W_ADDRESS+i)= adcsum.buf[i]; 
 135   3              }
 136   2                      daval1=*(W_ADDRESS+64);
 137   2              write_8532(daval1,1);
 138   2                      daval2=*(W_ADDRESS+65);
 139   2              write_8532(daval2,2);
 140   2              }
 141   1      }
 142          
 143          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    429    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     17       4
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       2
   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 + -