📄 main.lst
字号:
C51 COMPILER V7.08 MAIN 10/08/2006 14:54:46 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //文件名 main.c
2 //UPS切换装置
3
4 //周登勇
5
6 #include "main.h"
7
8 void main()
9 {
10 1 Init();
11 1 for(;;)
12 1 {//计算恢复切换和主从切换
13 2
14 2 if( bAC1Low && !bAC2Low)
15 2 {//AC1欠压
16 3 if( !bLocat )
17 3 {//AC2不欠压,切换到AC2
18 4 ACChange( 1 );
19 4 }
20 3 }
21 2 else if( bAC2Low && !bAC1Low )
22 2 {//AC2欠压
23 3 if( bLocat )
24 3 {//AC1不欠压切换到AC1
25 4 ACChange( 0 );
26 4 }
27 3 }
28 2 else if( !bAC1Low && !bAC2Low )
29 2 {//系统正常
30 3 if( bMainSub )
31 3 {
32 4 if( bLocat )
33 4 {//切换到AC1
34 5 if( bAC2 )
35 5 {//过零切换
36 6 ACChange( 0 );
37 6 }
38 5 }
39 4 else
40 4 {
41 5 bAC1 = FALSE;
42 5 }
43 4 }
44 3 else
45 3 {
46 4 if( !bLocat )
47 4 {//过零到AC2
48 5 if( bAC1 )
49 5 {//同步切换
50 6 ACChange( 1 );
51 6 }
52 5 }
53 4 else
54 4 {
55 5 bAC2 = FALSE;
C51 COMPILER V7.08 MAIN 10/08/2006 14:54:46 PAGE 2
56 5 }
57 4 }
58 3 }
59 2 WatchDog();
60 2 ReadMainSub();
61 2 }
62 1 }
63
64 void Init()
65 {
66 1
67 1 IT0 = TRUE;
68 1 IT1 = TRUE;
69 1 EX0 = TRUE;
70 1 EX1 = TRUE;
71 1 ET0 = TRUE;
72 1 ET1 = TRUE;
73 1 TMOD = 0X99;
74 1
75 1 EA = 1;
76 1 }
77
78
79 void Ac1SyncInt() interrupt 0
80 {
81 1 TR0 = FALSE;
82 1 TH0 = 0XFD;
83 1 if( bAC1Low )
84 1 {
85 2 TL0 = 0XF8;
86 2 }
87 1 else
88 1 {
89 2 TL0 = 0XC0;
90 2 }
91 1 TR0 = TRUE;
92 1 //计算切换
93 1 if( AC1Count<500 )
94 1 {
95 2 AC1Count++;
96 2 }
97 1 else
98 1 {
99 2 bAC1Low = FALSE;
100 2 }
101 1 bAC1 = TRUE;
102 1 }
103
104 void Ac2SyncInt() interrupt 2
105 {
106 1 TR1 = FALSE;
107 1 TH1 = 0XFD;
108 1 if( bAC2Low )
109 1 {
110 2 TL1 = 0XF8;
111 2 }
112 1 else
113 1 {
114 2 TL1 = 0XC0;
115 2 }
116 1 TR1 = TRUE;
117 1 //计算切换
C51 COMPILER V7.08 MAIN 10/08/2006 14:54:46 PAGE 3
118 1 if( AC2Count<500 )
119 1 {
120 2 AC2Count++;
121 2 }
122 1 else
123 1 {
124 2 bAC2Low = FALSE;
125 2 }
126 1 bAC2 = TRUE;
127 1 }
128
129 //AC1欠压切换
130 void Ac1LowInt() interrupt 1
131 {
132 1 AC1Count = 0;
133 1 bAC1Low = TRUE;
134 1 }
135 //AC2欠压切换
136 void Ac2LowInt() interrupt 3
137 {
138 1 AC2Count = 0;
139 1 bAC2Low = TRUE;
140 1 }
141 //AC切换
142 //numb=0换向AC2 else 切向AC1
143 void ACChange( BOOL numb )
144 {
145 1 if( !numb )
146 1 {
147 2 P1 = 0XEB;
148 2 }
149 1 else
150 1 {
151 2 P1 = 0XE7;
152 2 }
153 1 Delay( 5 );
154 1 P1 = 0XFF;
155 1 }
156 //延时
157 void Delay( U16 count )
158 {
159 1 U16 i;
160 1 for( i=0; i<count; i++ )
161 1 {
162 2 WatchDog();
163 2 }
164 1 }
165 //喂狗
166 void WatchDog()
167 {
168 1 P1 = 0X5F;
169 1 P1 = 0XFF;
170 1 }
171 //读取运行模式
172 void ReadMainSub()
173 {
174 1 if( bMode != bMainSub )
175 1 {
176 2 if( cModeCount < 5000 )
177 2 {
178 3 cModeCount++;
179 3 }
C51 COMPILER V7.08 MAIN 10/08/2006 14:54:46 PAGE 4
180 2 else
181 2 {
182 3 bMainSub = bMode;
183 3 cModeCount = 0;
184 3 }
185 2 }
186 1 else
187 1 {
188 2 cModeCount = 0;
189 2 }
190 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 314 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 4
IDATA SIZE = ---- ----
BIT SIZE = 5 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -