📄 main.lst
字号:
C51 COMPILER V6.02 MAIN 02/19/2005 09:19:52 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\main.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\main.c ROM(SMALL) DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 unsigned int Timer0_Pause, Timer1_Pause;
3 unsigned char test (unsigned char Pos);
4
5 void ExternalINT0_ISR (void) interrupt 0
6 {
7 1 ET0 = 1; ET1 = 1;
8 1 TR0 = 1; TR1 = 1;
9 1 P1 = P1 & 0x7F; // P1.7(INTOUT) = 0;
10 1 P1 = P1 & 0xF7; // P1.4(SW2) = 0; INT;ON, A/Z is connected in C0MMON.
11 1 EX0 = 0;
12 1 }
13
14 void Timer0_ISR (void) interrupt 1
15 {
16 1 P1 = P1 | 0x80; // P1.7(INT) = 1;
17 1 TR0 = 0; ET0 = 0;
18 1 Timer0_Pause = 1;
19 1 }
20
21 void Timer1_ISR (void) interrupt 3
22 {
23 1 TR1 = 0; ET1 = 0;
24 1 Timer1_Pause = 1;
25 1 }
26
27 void main (void)
28 {
29 1 unsigned int Timer0_Counts, Timer1_Counts, mCheckVal, i;
30 1 int retVal, sumVal, Index;
31 1 long ai;
32 1 unsigned char mRepeatNum, bTestCh;
33 1 EA = 1; // Global Interrupt Enable
34 1 TCON = 0x00;
35 1 mRepeatNum = 30; // Repeat Check
36 1 mCheckVal = 2000; // 0 Check
37 1 Index = 0;
38 1 bTestCh = 0;
39 1 DIGITAL_CHECK_PART:
40 1 Timer0_Pause = 0;
41 1 Timer1_Pause = 0;
42 1
43 1 Timer0_Counts = 65535 - mCheckVal + 2 ;
44 1 TH0 = (unsigned char)(Timer0_Counts >> 8); // Set timer0 couunt value to TH0 and TL0...
45 1 TL0 = (unsigned char)Timer0_Counts;
46 1 TMOD = (TMOD & 0xF0) | 0x05; // Set Mode1 : Set Timer0 for 16bit Counter.
47 1
48 1 Timer1_Counts = 57535; // 65535 - 8001 + 1;
49 1 TH1 = (unsigned char)(Timer1_Counts >> 8); // Set timer1 couunt value to TH1 and TL1...
50 1 TL1 = (unsigned char)Timer1_Counts;
51 1 TMOD = (TMOD & 0x0F) | 0x50; // Set Mode1 : Set Timer1 for 16bit Counter.
52 1 ai = 0;
53 1 EX0 = 1; //External interrupt enabble
54 1 while(1)
55 1 {
C51 COMPILER V6.02 MAIN 02/19/2005 09:19:52 PAGE 2
56 2 if(Timer0_Pause)
57 2 {
58 3 ai = 0;
59 3 if(bTestCh == 0)
60 3 { //*******************************
61 4 for(i=0; i<20000; i++); // about 20ms Delay
62 4 retVal = test(1); if(retVal != 20) sumVal = retVal;
63 4 P0 = P0 & 0x7F;//Buffer 2 select
64 4 retVal = test(2); if(retVal != 20) sumVal += retVal*10;
65 4 P0 = P0 | 0x80;//Buffer 2 unselect
66 4 retVal = test(3); if(retVal != 20) sumVal += retVal*100;
67 4 P2 = P2 & 0x7F; //Buffer 4 select
68 4 retVal = test(4); if(retVal != 20) sumVal += retVal*1000;
69 4 P2 = P2 | 0x80; //Buffer 4 unselect
70 4 if( sumVal == (mCheckVal - 2000 ) )
71 4 {
72 5 mRepeatNum = 3;
73 5 if( ++Index < 4 )
74 5 {
75 6 mCheckVal = (1111 * Index) + 2000;
76 6 }
77 5 else
78 5 {
79 6 if( Index < 10 )
80 6 {
81 7 mCheckVal = (111 * Index) + 2000;
82 7 }
83 6 else
84 6 {
85 7 TR1 = 0; ET1 = 0;
86 7 goto ANALOG_CHECK_PART;
87 7 }
88 6 }
89 5 }
90 4 else
91 4 {
92 5 if(--mRepeatNum != 0 )
93 5 {
94 6 TR1 = 0; ET1 = 0;
95 6 goto DIGITAL_CHECK_PART;
96 6 }
97 5 else P1 = P1 & 0xBF; // Red On
98 5 }
99 4 }
100 3 //*******************************
101 3 while( Timer1_Pause == 0 );
102 3
103 3 Timer0_Counts = 65535 - mCheckVal + 2;
104 3 TH0 = (unsigned char)(Timer0_Counts >> 8); // Set timer0 couunt value to TH0 and TL0...
105 3 TL0 = (unsigned char)Timer0_Counts;
106 3 TMOD = (TMOD & 0xF0) | 0x05; // Set Mode1 : Set Timer0 for 16bit Counter.
-
107 3
108 3 Timer1_Counts = 57535; // 65535 - 8001 + 1;
109 3 TH1 = (unsigned char)(Timer1_Counts >> 8); // Set timer1 couunt value to TH1 and TL1...
110 3 TL1 = (unsigned char)Timer1_Counts;
111 3 TMOD = (TMOD & 0x0F) | 0x50; // Set Mode1 : Set Timer1 for 16bit Counter.
112 3
113 3 P1 = P1 & 0x7F; // P1.7(INTO) = 0;
114 3 ET0 = 1; ET1 = 1;
115 3 TR0 = 1; TR1 = 1;
116 3 Timer0_Pause = 0;
C51 COMPILER V6.02 MAIN 02/19/2005 09:19:52 PAGE 3
117 3 Timer1_Pause = 0;
118 3 }
119 2 if(++ai > 60000 ) goto Bad_Chip; // Red On . Contact Test
120 2 }
121 1
122 1 ANALOG_CHECK_PART:
123 1 P1 = P1 & 0xEF; // P1.4(SW1 Switch) = 0; Buff:Open , INTO:Open
124 1 P1 = P1 | 0x08; // P1.3(SW2 Switch) = 1; INTO:Open , INL=COMMON
125 1 ai = 1;
126 1 while(1)
127 1 {
128 2 mRepeatNum = 50;
129 2 switch(ai)
130 2 {
131 3 case 1: P1 = P1 & 0xF9; break; // P1.1(A) = 0, P1.2(B) = 0 : VIN=Vcom;+/-0000
132 3 case 2: P1 = P1 | 0x02;P1 = P1 & 0xFB; break; // P1.1(A) = 1, P1.2(B) = 0 : VIN=VREF=200mV;2000
133 3 case 3: P1 = P1 | 0x06; // P1.1(A) = 1, P1.2(B) = 1 : VIN=GND;-4 overrange
134 3 }
135 2 for(i=0; i<60000; i++); // about 50ms Delay
136 2 Repeat_Check:
137 2 Index = 0;
138 2 for(i=0; i<30000; i++); // about 20ms Delay
139 2
140 2 retVal = test(1); if(retVal != 20) sumVal = retVal;
141 2 else Index++;
142 2 P0 = P0 & 0x7F;//Buffer 2 select
143 2 retVal = test(2); if(retVal != 20) sumVal += retVal*10;
144 2 else Index++;
145 2 P0 = P0 | 0x80;//Buffer 2 unselect
146 2 retVal = test(3); if(retVal != 20) sumVal += retVal*100;
147 2 else Index++;
148 2 P2 = P2 & 0x7F; //Buffer 4 select
149 2 retVal = test(4); if(retVal != 20) sumVal += retVal*1000;
150 2 P2 = P2 | 0x80; //Buffer 4 unselect
151 2 switch(ai)
152 2 {
153 3 case 1: if(((sumVal + 2) < 2) || (sumVal > 3))
154 3 {
155 4 if(--mRepeatNum > 0) goto Repeat_Check;
156 4 else goto Bad_Chip;
157 4 }
158 3 break;
159 3 case 2: if((sumVal < (2000 - 30)) || (sumVal > (2000 - 10)))
160 3 {
161 4 if(--mRepeatNum > 0) goto Repeat_Check;
162 4 else goto Bad_Chip;
163 4 }
164 3 break;
165 3 case 3:P2 = P2 & 0x7F; //Buffer 4 select
166 3 if(!(P2 & 0x09)) //-4 overrange test
167 3 {
168 4 if(--mRepeatNum > 0) goto Repeat_Check;
169 4 else goto Bad_Chip;
170 4 }
171 3 P2 = P2 | 0x80; //Buffer 4 unselect
172 3 }
173 2
174 2 if( ++ai > 3 ) break;
175 2 }
176 1 if(!(P1 & 0x01)) //V- check
177 1 {
178 2 goto Bad_Chip;
C51 COMPILER V6.02 MAIN 02/19/2005 09:19:52 PAGE 4
179 2 }
180 1 // Good_Chip:
181 1 P1 = P1 & 0xCF; // Green On
182 1 // End -3888 display
183 1 P1 = P1 | 0x18; // P1.4(SW1 Switch) = 1; Buff:Open , INTO:Open
184 1 // P1.3(SW2 Switch) = 1; INTO:Open , INL=COMMON
185 1 bTestCh = 1;
186 1 mCheckVal = 5888;
187 1 goto DIGITAL_CHECK_PART;
188 1
189 1 Bad_Chip:
190 1 P1 = P1 & 0xBF; // Red On
191 1 while(1){}
192 1 }
193
194 unsigned char test(unsigned char Pos)
195 {
196 1 unsigned char mch, mVal;
197 1
198 1 if( Pos < 4 )
199 1 {
200 2 switch(Pos)
201 2 {
202 3 case 1: mch = P0 & 0x7F; break;
203 3 case 2: mch = P0 & 0x7F; break;
204 3 case 3: mch = P2 & 0x7F;
205 3 }
206 2 switch( mch )
207 2 {
208 3 case 0x40: mVal = 0; break;
209 3 case 0x79: mVal = 1; break;
210 3 case 0x24: mVal = 2; break;
211 3 case 0x30: mVal = 3; break;
212 3 case 0x19: mVal = 4; break;
213 3 case 0x12: mVal = 5; break;
214 3 case 0x02: mVal = 6; break;
215 3 case 0x78: mVal = 7; break;
216 3 case 0x00: mVal = 8; break;
217 3 case 0x10: mVal = 9; break;
218 3 default: mVal = 20; //error
219 3 }
220 2 }
221 1 if( Pos == 4 )
222 1 {
223 2 mch = P2 & 0x3F;
224 2 switch( mch )
225 2 {
226 3 case 0x3F: mVal = 0; break;
227 3 case 0x39: mVal = 1; break;
228 3 case 0x14: mVal = 2; break;
229 3 case 0x18: mVal = 3; break;
230 3 default: mVal = 20; //error
231 3 }
232 2 }
233 1 return (mVal);
234 1 }
235
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1187 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V6.02 MAIN 02/19/2005 09:19:52 PAGE 5
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 23
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 + -