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

📄 upsd_timer.lst

📁 ST uPSD32XX I2C This example demo code is provided as is and has no warranty, implied or otherwise.
💻 LST
字号:
C51 COMPILER V7.00  UPSD_TIMER                                                             11/13/2002 09:49:12 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE UPSD_TIMER
OBJECT MODULE PLACED IN upsd_timer.OBJ
COMPILER INVOKED BY: E:\KEIL\C51\BIN\C51.EXE upsd_timer.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*------------------------------------------------------------------------------
   2          uPSD_TIMER.C
   3          
   4          uPSD Timer0 Device Driver Functions
   5          06/2002 Ver 0.1 - Initial Version
   6          
   7          Copyright 2002 ST Microelectronics
   8          This example demo code is provided as is and has no warranty,
   9          implied or otherwise.  You are free to use/modify any of the provided
  10          code at your own risk in your applications with the expressed limitation
  11          of liability (see below) so long as your product using the code contains
  12          at least one uPSD products (device).
  13          
  14          LIMITATION OF LIABILITY:   NEITHER STMicroelectronics NOR ITS VENDORS OR 
  15          AGENTS SHALL BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF USE, LOSS OF DATA,
  16          INTERRUPTION OF BUSINESS, NOR FOR INDIRECT, SPECIAL, INCIDENTAL OR
  17          CONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER THIS AGREEMENT OR
  18          OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  19          ------------------------------------------------------------------------------*/
  20          
  21          #pragma CODE                                    // include assembler listing in .lst file
  22          
  23          #include "upsd3200.h"
  24          #include "upsd_timer.h"
  25          
  26          /*------------------------------------------------------------------------------
  27                           Local Macro and Manifest Constant Declarations
  28          ------------------------------------------------------------------------------*/
  29          //#define TIMER0_COUNT   0xFACA     // ((10000h-TC)*(Period*12)) - 17)= 10mS
  30          #define TIMER0_COUNT     0xF448     // for DK3200 (36MHz board)
  31          
  32                                              //  16Mhz     = 0xcbfc, (0xfaca=1mS)
  33                                                                          //  12mHZ     = 0xd8ff
  34                                                                              //  11.059Mhz = 0xdb62
  35                                                                              //  36.00 Mhz = 0x8ae0 (0xf448=1mS)
  36          
  37          /*------------------------------------------------------------------------------
  38                                    Local Variable Declarations
  39          ------------------------------------------------------------------------------*/
  40          static unsigned timer0_tick;
  41          
  42          /*------------------------------------------------------------------------------
  43          static void timer0_isr (void);
  44          
  45          This function is an interrupt service routine for TIMER 0.  It should never
  46          be called by a C or assembly function.  It will be executed automatically
  47          when TIMER 0 overflows.
  48          ------------------------------------------------------------------------------*/
  49          static void timer0_isr (void) interrupt 1 using 1       // 10mS Timer Interrupt Update
  50                  {
  51   1              TR0 = 0;                                                                // stop timer 0 
  52   1              TL0 = TL0 + (TIMER0_COUNT & 0x00FF);    // Update LSB
  53   1              TH0 = TH0 + (TIMER0_COUNT >> 8);                // Update MSB
  54   1              TR0 = 1;                                                                // start timer 0
  55   1              timer0_tick++;                                                  // Increment the timer tick.. every 10mS
C51 COMPILER V7.00  UPSD_TIMER                                                             11/13/2002 09:49:12 PAGE 2   

  56   1              }
  57          
  58          /*------------------------------------------------------------------------------
  59          void timer0_initialize (void);
  60          
  61          This function enables TIMER 0.  TIMER 0 will generate a synchronous interrupt
  62          once every 100Hz (10mS).
  63          ------------------------------------------------------------------------------*/
  64          void timer0_initialize (void)           // Enable TMR0 for 10mS interrupts
  65                  {
  66   1              EA = 0;                                                 // disable interrupts
  67   1              timer0_tick = 0;                                // initialize tick value
  68   1              TR0 = 0;                                                // stop timer 0
  69   1              TMOD &= ~0x0F;                                  // clear timer 0 mode bits
  70   1              TMOD |= 0x01;                                   // put timer 0 into 16-bit no prescale
  71   1              TL0 = (TIMER0_COUNT & 0x00FF);  // set LSB timeout
  72   1              TH0 = (TIMER0_COUNT >> 8);              // set MSB timeout
  73   1              PT0 = 0;                                                // set low priority for timer 0
  74   1              ET0 = 1;                                                // enable timer 0 interrupt
  75   1              TR0 = 1;                                                // start timer 0
  76   1              EA = 1;                                                 // enable interrupts
  77   1      }
  78          
  79          /*------------------------------------------------------------------------------
  80          unsigned timer0_count (void);
  81          
  82          This function returns the current timer0 tick count.
  83          ------------------------------------------------------------------------------*/
  84          unsigned timer0_count (void)
  85                  {
  86   1              unsigned t;
  87   1              EA = 0;
  88   1              t = timer0_tick;
  89   1              EA = 1;
  90   1              return(t);
  91   1              }
  92          
  93          
  94          /*------------------------------------------------------------------------------
  95          void timer0_delay (
  96            unsigned count);
  97          
  98          This function waits for 'count' timer ticks to pass.
  99          ------------------------------------------------------------------------------*/
 100          void timer0_delay (unsigned int count)
 101          {
 102   1      unsigned start_count;
 103   1      
 104   1      start_count = timer0_count (); /* get the start count */
 105   1      
 106   1      while ((timer0_count () - start_count) <= count)   /* wait for count "ticks" */
 107   1        {
 108   2        }
 109   1      }
 110          
 111          
 112          void delay_10ms()               
 113                  { 
 114   1              timer0_delay(10);
 115   1              }
 116          
 117          /*
C51 COMPILER V7.00  UPSD_TIMER                                                             11/13/2002 09:49:12 PAGE 3   

 118          void delay_1sec(void)
 119                  {
 120                  timer0_delay(1000);
 121                  }
 122          
 123          void delay_2sec(void)
 124                  {
 125              delay_1sec();
 126              delay_1sec();
 127                  }
 128          
 129          void delay_10sec(void)
 130                  {
 131              delay_2sec();
 132              delay_2sec();
 133              delay_2sec();
 134              delay_2sec();
 135              delay_2sec();
 136                  }
 137          
 138          void delay_0_5sec(void)
 139                  {
 140                  timer0_delay(500);
 141              }
 142          
 143          void delay_0_1sec(void)
 144                  {
 145                  timer0_delay(100);
 146             }
 147          */
 148          
C51 COMPILER V7.00  UPSD_TIMER                                                             11/13/2002 09:49:12 PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION timer0_isr (BEGIN)
0000 C0E0              PUSH    ACC
0002 C0D0              PUSH    PSW
                                           ; SOURCE LINE # 49
                                           ; SOURCE LINE # 51
0004 C28C              CLR     TR0
                                           ; SOURCE LINE # 52
0006 7448              MOV     A,#048H
0008 258A              ADD     A,TL0
000A F58A              MOV     TL0,A
                                           ; SOURCE LINE # 53
000C 74F4              MOV     A,#0F4H
000E 258C              ADD     A,TH0
0010 F58C              MOV     TH0,A
                                           ; SOURCE LINE # 54
0012 D28C              SETB    TR0
                                           ; SOURCE LINE # 55
0014 0500        R     INC     timer0_tick+01H
0016 E500        R     MOV     A,timer0_tick+01H
0018 7002              JNZ     ?C0008
001A 0500        R     INC     timer0_tick
001C         ?C0008:
                                           ; SOURCE LINE # 56
001C D0D0              POP     PSW
001E D0E0              POP     ACC
0020 32                RETI    
             ; FUNCTION timer0_isr (END)

             ; FUNCTION timer0_initialize (BEGIN)
                                           ; SOURCE LINE # 64
                                           ; SOURCE LINE # 65
                                           ; SOURCE LINE # 66
0000 C2AF              CLR     EA
                                           ; SOURCE LINE # 67
0002 E4                CLR     A
0003 F500        R     MOV     timer0_tick,A
0005 F500        R     MOV     timer0_tick+01H,A
                                           ; SOURCE LINE # 68
0007 C28C              CLR     TR0
                                           ; SOURCE LINE # 69
0009 5389F0            ANL     TMOD,#0F0H
                                           ; SOURCE LINE # 70
000C 438901            ORL     TMOD,#01H
                                           ; SOURCE LINE # 71
000F 758A48            MOV     TL0,#048H
                                           ; SOURCE LINE # 72
0012 758CF4            MOV     TH0,#0F4H
                                           ; SOURCE LINE # 73
0015 C2B9              CLR     PT0
                                           ; SOURCE LINE # 74
0017 D2A9              SETB    ET0
                                           ; SOURCE LINE # 75
0019 D28C              SETB    TR0
                                           ; SOURCE LINE # 76
001B D2AF              SETB    EA
                                           ; SOURCE LINE # 77
001D 22                RET     
             ; FUNCTION timer0_initialize (END)

C51 COMPILER V7.00  UPSD_TIMER                                                             11/13/2002 09:49:12 PAGE 5   

             ; FUNCTION timer0_count (BEGIN)
                                           ; SOURCE LINE # 84
                                           ; SOURCE LINE # 85
                                           ; SOURCE LINE # 87
0000 C2AF              CLR     EA
                                           ; SOURCE LINE # 88
;---- Variable 't' assigned to Register 'R6/R7' ----
0002 AF00        R     MOV     R7,timer0_tick+01H
0004 AE00        R     MOV     R6,timer0_tick
                                           ; SOURCE LINE # 89
0006 D2AF              SETB    EA
                                           ; SOURCE LINE # 90
                                           ; SOURCE LINE # 91
0008         ?C0003:
0008 22                RET     
             ; FUNCTION timer0_count (END)

             ; FUNCTION _timer0_delay (BEGIN)
                                           ; SOURCE LINE # 100
;---- Variable 'count' assigned to Register 'R4/R5' ----
0000 AD07              MOV     R5,AR7
0002 AC06              MOV     R4,AR6
                                           ; SOURCE LINE # 101
                                           ; SOURCE LINE # 104
0004 120000      R     LCALL   timer0_count
;---- Variable 'start_count' assigned to Register 'R2/R3' ----
0007 AB07              MOV     R3,AR7
0009 AA06              MOV     R2,AR6
000B         ?C0004:
                                           ; SOURCE LINE # 106
000B 120000      R     LCALL   timer0_count
000E C3                CLR     C
000F EF                MOV     A,R7
0010 9B                SUBB    A,R3
0011 FF                MOV     R7,A
0012 EE                MOV     A,R6
0013 9A                SUBB    A,R2
0014 FE                MOV     R6,A
0015 D3                SETB    C
0016 EF                MOV     A,R7
0017 9D                SUBB    A,R5
0018 EE                MOV     A,R6
0019 9C                SUBB    A,R4
001A 40EF              JC      ?C0004
                                           ; SOURCE LINE # 107
                                           ; SOURCE LINE # 108
                                           ; SOURCE LINE # 109
001C         ?C0006:
001C 22                RET     
             ; FUNCTION _timer0_delay (END)

             ; FUNCTION delay_10ms (BEGIN)
                                           ; SOURCE LINE # 112
                                           ; SOURCE LINE # 113
                                           ; SOURCE LINE # 114
0000 7F0A              MOV     R7,#0AH
0002 7E00              MOV     R6,#00H
0004 020000      R     LJMP    _timer0_delay
             ; FUNCTION delay_10ms (END)



C51 COMPILER V7.00  UPSD_TIMER                                                             11/13/2002 09:49:12 PAGE 6   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    108    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      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 + -