📄 wdcal_lib.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 + -