📄 mainloop.lst
字号:
C51 COMPILER V7.04 MAINLOOP 12/18/2005 18:05:21 PAGE 1
C51 COMPILER V7.04, COMPILATION OF MODULE MAINLOOP
OBJECT MODULE PLACED IN Mainloop.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Mainloop.c OPTIMIZE(2,SPEED) DEBUG OBJECTEXTEND
stmt level source
1 #include <stdio.h>
2 #include <string.h>
3
4 #include <reg51.h> /* special function register declarations */
5
6 #include "epphal.h"
7 #include "d12ci.h"
8 #include "mainloop.h"
9 #include "usb100.h"
10 #include "chap_9.h"
11 #include "protodma.h"
12 /*
13 //*************************************************************************
14 // USB protocol function pointer arrays
15 //*************************************************************************
16 */
17
18 unsigned char RxRead24C02OneByte(unsigned char Address);
19 void RxWrite24C02OneByte(unsigned char TempAddress, unsigned char TempData);
20
21 unsigned short AT24C02DelayTime; // 读24C02N延迟时间计时,必须保证每个加减单位为1毫秒
22
23 unsigned short MilliSecondCount;
24 unsigned short MinuteCount;
25
26
27 unsigned char TempValue;
28 unsigned short TempShort;
29 unsigned long TempLong;
30
31
32 unsigned long UsedMinuteTime;
33 unsigned short WriteUseMinuteTime;
34
35
36 unsigned char OutputPulseValue;
37 unsigned short OutputPulseFrequency;
38
39 //USB标准请求
40 code void (*StandardDeviceRequest[])(void) =
41 {
42 get_status,
43 clear_feature,
44 reserved,
45 set_feature,
46 reserved,
47 set_address,
48 get_descriptor,
49 reserved,
50 get_configuration,
51 set_configuration,
52 get_interface,
53 set_interface,
54 reserved,
55 reserved,
C51 COMPILER V7.04 MAINLOOP 12/18/2005 18:05:21 PAGE 2
56 reserved,
57 reserved
58 };
59
60 //用户厂商请求
61 code void (*VendorDeviceRequest[])(void) =
62 {
63 reserved,
64 reserved,
65 reserved,
66 reserved,
67 reserved,
68 reserved,
69 reserved,
70 reserved,
71 reserved,
72 reserved,
73 reserved,
74 reserved,
75 read_write_register,
76 reserved,
77 reserved,
78 reserved
79 };
80
81 /*
82 //*************************************************************************
83 // Public static data
84 //*************************************************************************
85 */
86
87 extern EPPFLAGS bEPPflags;
88 extern unsigned long ClockTicks;
89 extern unsigned char idata GenEpBuf[];
90 extern IO_REQUEST idata ioRequest;
91
92 extern unsigned char ioSize, ioCount;
93 extern unsigned char idata EpBuf[];
94
95 CONTROL_XFER ControlData;
96 BOOL bNoRAM;
97
98 code char * _NAME_USB_REQUEST_DIRECTION[] =
99 {
100 "Host_to_device",
101 "Device_to_host"
102 };
103
104 code char * _NAME_USB_REQUEST_RECIPIENT[] =
105 {
106 "Device",
107 "Interface",
108 "Endpoint(0)",
109 "Other"
110 };
111
112 code char * _NAME_USB_REQUEST_TYPE[] =
113 {
114 "Standard",
115 "Class",
116 "Vendor",
117 "Reserved"
C51 COMPILER V7.04 MAINLOOP 12/18/2005 18:05:21 PAGE 3
118 };
119
120 code char * _NAME_USB_STANDARD_REQUEST[] =
121 {
122 "GET_STATUS",
123 "CLEAR_FEATURE",
124 "RESERVED",
125 "SET_FEATURE",
126 "RESERVED",
127 "SET_ADDRESS",
128 "GET_DESCRIPTOR",
129 "SET_DESCRIPTOR",
130 "GET_CONFIGURATION",
131 "SET_CONFIGURATION",
132 "GET_INTERFACE",
133 "SET_INTERFACE",
134 "SYNC_FRAME"
135 };
136
137
138 void help_devreq(unsigned char typ, unsigned char req)
139 {
140 1 typ >>= 5;
141 1
142 1 if(typ == USB_STANDARD_REQUEST) {
143 2 }
144 1 else {
145 2 if(bEPPflags.bits.verbose)
146 2 printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[typ],
147 2 req);
148 2 }
149 1 }
150
151 /* Configure Timer 0
152 - Mode = 1
153 - Interrupt = ENABLED
154 - Clock Source = INTERNAL
155 - Enable Gating Control = DISABLED
156 */
157 //定时器0初始化程序
158 //定时器用来定时检测按键状态
159 void init_timer0(void)
160 {
161 1 // TMOD &= 0xF0; /* clear Timer 0 */
162 1 // TMOD |= 0x01;
163 1 // TL0 = 0X0; /* value set by user */
164 1 // TH0 = 0X0; /* value set by user */
165 1
166 1 TMOD &= 0xF0; /* clear Timer 0 */
167 1 TMOD |= 0x01;
168 1 TH0 = (-2000) >> 8; // Timer 0 -- (12*x/f=1ms) at 24MHz
169 1 TL0 = (-2000) & 0xff;
170 1
171 1 ET0 = 1; /* IE.1*/
172 1 TR0 = 1; /* TCON.4 start timer */
173 1 // PT0 = 1;
174 1
175 1 EA = 1;
176 1 }
177
178 /* Interrupt Control Unit */
179 /* **** Enabled interrupts in Interrupt Enable Register ****
C51 COMPILER V7.04 MAINLOOP 12/18/2005 18:05:21 PAGE 4
180 **** GLOBAL INTERRUPT MUST BE ENABLED FOR ANY OTHER
181 **** INTERRUPT TO WORK!
182 */
183 /* GLOBAL INTERRUPT DISABLED ALL INTERRUPTS
184 ARE DISABLED */
185 /* External interrupt 0 */
186 /* Priority Level = 0 */
187 /* Timer 0 interrupt */
188 /* Priority Level = 0 */
189 //中断设置
190 void init_special_interrupts(void)
191 {
192 1 IT0 = 0;
193 1 EX0 = 1;
194 1 PX0 = 0;
195 1 }
196
197 //I/O口初始化程序
198 void init_port()
199 {
200 1 P0 = 0xFF;
201 1 P1 = 0xFF;
202 1 P2 = 0xFF;
203 1 P3 = 0xFF;
204 1 MCU_D12CS = 0x0;
205 1 D12SUSPD = 0;
206 1 }
207
208 /*Serial Port */
209 /*Mode = 1 /8-bit UART
210 Serial Port Interrupt = Disabled */
211 /*Receive = Enabled */
212 /*Auto Addressing = Disabled */
213 //串行口设置
214 void init_serial(void)
215 {
216 1 SCON = 0X52;
217 1 PCON = 0X80 | PCON;
218 1 TMOD = 0X20;
219 1 TCON = 0x69; // TCON
220 1 TH1 = 0xF3;
221 1 }
222
223
224 void main(void)
225 {
226 1 unsigned char key, i;
227 1
228 1 init_port();//初始化I/O口
229 1 init_serial();//初始化串行口
230 1 //注:串行口是用来外扩LCD和键盘,用于查询显示当前的工作状态
231 1 //在USB Smart Board标准配置中并未带该LCD和键盘,这里给出的程序仅供参考
232 1
233 1
234 1 init_timer0();//初始化定时器0
235 1 init_special_interrupts();//设置中断
236 1
237 1 MilliSecondCount = 0;
238 1 MinuteCount = 0;
239 1
240 1 // for (TempValue=0; TempValue<128; TempValue++){
241 1 // RxWrite24C02OneByte(TempValue, 0);
C51 COMPILER V7.04 MAINLOOP 12/18/2005 18:05:21 PAGE 5
242 1 // }
243 1
244 1
245 1 UsedMinuteTime = 0;
246 1 TempValue = RxRead24C02OneByte(0);
247 1 UsedMinuteTime = UsedMinuteTime + ((unsigned long)TempValue) * 256 * 256 * 256;
248 1 TempValue = RxRead24C02OneByte(1);
249 1 UsedMinuteTime = UsedMinuteTime + ((unsigned long)TempValue) * 256 * 256;
250 1 TempValue = RxRead24C02OneByte(2);
251 1 UsedMinuteTime = UsedMinuteTime + ((unsigned long)TempValue) * 256;
252 1 TempValue = RxRead24C02OneByte(3);
253 1 UsedMinuteTime = UsedMinuteTime + ((unsigned long)TempValue);
254 1
255 1
256 1 WriteUseMinuteTime = 0;
257 1 TempValue = RxRead24C02OneByte(4);
258 1 WriteUseMinuteTime = WriteUseMinuteTime + ((unsigned short)TempValue) * 256;
259 1 TempValue = RxRead24C02OneByte(5);
260 1 WriteUseMinuteTime = WriteUseMinuteTime + ((unsigned short)TempValue);
261 1 if (WriteUseMinuteTime == 0){
262 2 WriteUseMinuteTime = 30;
263 2 }
264 1
265 1
266 1 OutputPulseFrequency = 0;
267 1 TempValue = RxRead24C02OneByte(6);
268 1 OutputPulseFrequency = OutputPulseFrequency + ((unsigned short)TempValue) * 256;
269 1 TempValue = RxRead24C02OneByte(7);
270 1 OutputPulseFrequency = OutputPulseFrequency + ((unsigned short)TempValue);
271 1 if (OutputPulseFrequency == 0){
272 2 OutputPulseFrequency = 1;
273 2 }
274 1
275 1 OutputPulseValue = RxRead24C02OneByte(8);
276 1 P2 = OutputPulseValue;
277 1
278 1
279 1
280 1
281 1 MCU_D12CS = 0x1;
282 1
283 1 MCU_D12CS = 0x0;
284 1
285 1 D12_ReadChipID();
286 1
287 1 if(MCU_SWM0 == 0 && MCU_SWM1 == 0) {
288 2 MCU_D12RST = 0;//DMA设置
289 2 MCU_D12RST = 1;
290 2 D12_SetDMA(0x0);
291 2 }
292 1
293 1 bEPPflags.value = 0;
294 1 reconnect_USB();//重新连接USB
295 1 /*
296 1 if((i = D12_GetDMA()) == 0xC3) {
297 1 D12_SendResume();//发送恢复处理
298 1 }
299 1 else {
300 1 bEPPflags.value = 0;
301 1 reconnect_USB();//重新连接USB
302 1 }
303 1 */
C51 COMPILER V7.04 MAINLOOP 12/18/2005 18:05:21 PAGE 6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -