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

📄 wdcal_lib.lst

📁 为了更好的利用LPC900系列单片机的系统时钟
💻 LST
字号:
C51 COMPILER V7.02b   WDCAL_LIB                                                            08/01/2007 17:38:35 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE WDCAL_LIB
OBJECT MODULE PLACED IN WDCAL_lib.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE WDCAL_lib.c BROWSE DEBUG OBJECTEXTEND SRC(.\WDCAL_lib.SRC)

stmt level    source

   1          // wdcal_lib.c
   2          // Library with functions for the self-calibration
   3          
   4          // This file contains asm directives:
   5          // Set the Compiler options (Keil uVision2) for this file to:
   6          // - Generate Assembler SRC File
   7          // - Assemble SRC File
   8          
   9          #include <REG932.H>
  10          #include "WDCAL_lib.h"
  11          #include "CSTM_lib.h"
  12          
  13          unsigned char WDTcnt=0;
  14          
  15          void WDcal()
  16          {
  17   1              // state machine
  18   1              unsigned char calStat=0;                
  19   1              calStat=EEPROMread(ADRSTAT);            // get current state 
  20   1              switch(calStat)
  21   1              {
  22   2                      case MESWD:     // this is the very first powerup:
  23   2                                              EEPROMwrite(ADRSTAT, calStat+1);        
  24   2      
  25   2                                              // Set timer0 16bit Mode 1
  26   2                                              TAMOD=0x00;                     // set mode 1, 16bit timer
  27   2                                              TMOD=0x01;
  28   2                                              TH0=0x3E;                       // setup 13.44ms until overflow @ fosc=7.374MHz (RCosc)
  29   2                                              TL0=0x74;                               
  30   2                                              IP0H|=0x02;                     // interrupt priority level 2
*** ERROR C202 IN LINE 30 OF WDCAL_LIB.C: 'IP0H': undefined identifier
  31   2                                              IP0&=0xFD;
  32   2      
  33   2                                              // Set watchdog
  34   2                                              WDL=0x00;                       // WDT reloadvalue=0 -> OverFlowPeriod=80us@400kHz
  35   2                                              WDCON=0x05;                     // Start WDT, use WDTosc
  36   2                                              IP0H&=0xBF;                     // interrupt priority level 1
*** ERROR C202 IN LINE 36 OF WDCAL_LIB.C: 'IP0H': undefined identifier
  37   2                                              IP0|=0x40;              
  38   2      
  39   2                                              // Enable both timers
  40   2                                              msec(11);                       // wait for WDT update (wait for next underflow)
  41   2                                              ET0=1;                          // enable timer0 interrupt
  42   2                                              EC=1;                           // enable WDT interrupt
  43   2                                              EA=1;
  44   2                                              TR0=1;                          // start TR0
  45   2                                              WDTcnt=0;                       // reset overflow counter
  46   2                                              while(EC);                      // wait until measurement is done
  47   2                                              setUCFG(WDTOSC);        // select WDTosc and reset
  48   2                                              break;
  49   2                      case USERC:     break;                          // this is a 'following' powerup:
  50   2                                                                                      //  now execute user code
  51   2              }
  52   1      }
  53          
C51 COMPILER V7.02b   WDCAL_LIB                                                            08/01/2007 17:38:35 PAGE 2   

  54          void EEPROMwrite(unsigned int adr, unsigned char dat)
  55          {
  56   1              EA=0;                                                                   // disable interrupts during write
  57   1              DEECON=(unsigned char)((adr>>8)&0x01);  // set byte write mode
  58   1              DEEDAT=dat;                                                             // write data to buffer
  59   1              DEEADR=(unsigned char) adr;                             // start write
  60   1              EA=1;
  61   1              while((DEECON&0x80)==0);                                // wait until write complete
  62   1      }
  63          
  64          unsigned char EEPROMread(unsigned int adr)
  65          {
  66   1              DEECON=(unsigned char)((adr>>8)&0x01);   
  67   1              DEEADR=(unsigned char) adr;                             // start byte read
  68   1              while((DEECON&0x80)==0);                                // wait until read complete
  69   1              return DEEDAT;                                                  // copy data from buffer
  70   1      }
  71          
  72          void WDT_ISR() interrupt 10
  73          {
  74   1              WDTcnt++;                               // count WDT overflows
  75   1              WDCON&=0x0FD;                   // reset WDT interrupt flag
  76   1      }
  77          
  78          void T0_ISR() interrupt 1
  79          {
  80   1              EC=0;                                                   // Deactivate all timers,
  81   1              ET0=0;                                                  
  82   1              EEPROMwrite(ADRWDFQ, WDTcnt);   // Save WDTcnt to EEPROM        
  83   1      }
  84          
  85          void setUCFG(unsigned char ucfg)
  86          {
  87   1              EA=0;                           // disable interrupt during IAP
  88   1              ACC=ucfg;                       // 0x43: RCosc, 0x44: WDTosc, 0x40: Crystal
  89   1              #pragma asm
  90   1              MOV R5,A                        ;IAP parameter
  91   1              MOV A,#02h
  92   1              MOV R7,#00h
  93   1              CALL 0FF00h                     ;call IAP
  94   1              MOV AUXR1, #08h         ;software reset
  95   1              #pragma endasm
  96   1              EA=1;
  97   1      }
  98          
  99          void msec(int x)         // delays x msec (at fosc=11.0592MHz)
 100          {
 101   1              int j=0;
 102   1              while(x>=0)
 103   1              {
 104   2                      for (j=0; j<1350; j++);
 105   2                      x--;
 106   2              }
 107   1      }
 108          

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

⌨️ 快捷键说明

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