📄 usb_task.lst
字号:
147 2 if (usb_connected == TRUE)
148 2 {
149 3 usb_connected = FALSE;
150 3 Led_all_off();
151 3 Led_3_on();
152 3 }
153 2
154 2 if (Usb_resume())
155 2 {
156 3 usb_connected = TRUE;
157 3 Usb_clear_suspend();
158 3 Usb_clear_resume();
159 3 Usb_clear_sof();
160 3 Led_3_off();
161 3 }
162 2 }
C51 COMPILER V7.06 USB_TASK 01/29/2008 10:59:25 PAGE 4
163 1 else
164 1 {
165 2 usb_connected = TRUE;
166 2 if (Usb_reset()) { usb_var_init(); Usb_clear_reset(); }
167 2
168 2 if (Usb_sof())
169 2 {
170 3 usb_sof_counter ++;
171 3 if (usb_sof_counter == 0xFF)
172 3 {
173 4 Led_0_toggle();
174 4 }
175 3 Usb_clear_sof();
176 3 }
177 2
178 2 if (Usb_endpoint_interrupt())
179 2 {
180 3 Usb_select_ep(EP_CONTROL);
181 3 if (Usb_setup_received()) { usb_enumeration_process(); }
182 3 Usb_select_ep(EP_KBD_IN);
183 3 if (Usb_tx_complete()) { Usb_clear_tx_complete();
184 4 key_hit = FALSE;
185 4 Led_1_off(); }
186 3 }
187 2 }
188 1 }
189
190 /*F**************************************************************************
191 * NAME: usb_kbd
192 *----------------------------------------------------------------------------
193 * PARAMS:
194 * delay: none
195 * return: none
196 *----------------------------------------------------------------------------
197 * PURPOSE:
198 * This function links the keyboard and the USB bus.
199 *----------------------------------------------------------------------------
200 * EXAMPLE:
201 *----------------------------------------------------------------------------
202 * NOTE:
203 *----------------------------------------------------------------------------
204 * REQUIREMENTS:
205 *****************************************************************************/
206 void usb_kbd_task (void)
207 {
208 1 // if USB ready to transmit new data :
209 1 // - if last time = 0, nothing
210 1 // - if key pressed -> transmit key
211 1 // - if !key pressed -> transmit 0
212 1 if ((!key_hit) && (usb_configuration_nb != 0) && !(Usb_suspend()))
213 1 {
214 2 kbd_test_hit();
215 2 if (key_hit == TRUE)
216 2 {
217 3 Led_1_on();
218 3 transmit_no_key = TRUE;
219 3 Usb_select_ep(EP_KBD_IN);
220 3 Usb_write_byte(0);
221 3 Usb_write_byte(shift_key);
222 3 Usb_write_byte(usb_key);
223 3 Usb_write_byte(0);
224 3 Usb_write_byte(0);
C51 COMPILER V7.06 USB_TASK 01/29/2008 10:59:25 PAGE 5
225 3 Usb_write_byte(0);
226 3 Usb_write_byte(0);
227 3 Usb_write_byte(0);
228 3 Usb_set_tx_ready();
229 3 return;
230 3 }
231 2
232 2 if (transmit_no_key)
233 2 {
234 3 key_hit = TRUE;
235 3 transmit_no_key = FALSE;
236 3 Usb_select_ep(EP_KBD_IN);
237 3 Usb_write_byte(0);
238 3 Usb_write_byte(0);
239 3 Usb_write_byte(0);
240 3 Usb_write_byte(0);
241 3 Usb_write_byte(0);
242 3 Usb_write_byte(0);
243 3 Usb_write_byte(0);
244 3 Usb_write_byte(0);
245 3 Usb_set_tx_ready();
246 3 }
247 2 }
248 1 }
249
250 /*F**************************************************************************
251 * NAME: kbd_test_hit
252 *----------------------------------------------------------------------------
253 * PARAMS:
254 *
255 * return:
256 *----------------------------------------------------------------------------
257 * PURPOSE:
258 * This function scans the keyboard keys and update the scan_key word.
259 * if a key is pressed, the key_hit bit is set to TRUE.
260 *----------------------------------------------------------------------------
261 * EXAMPLE:
262 *----------------------------------------------------------------------------
263 * NOTE:
264 *----------------------------------------------------------------------------
265 * REQUIREMENTS:
266 *****************************************************************************/
267 void kbd_test_hit(void)
268 {
269 1 switch (usb_kbd_state)
270 1 {
271 2 case 0: if (P3_2 == 0)
272 2 {
273 3 usb_kbd_state = 1;
274 3 usb_key_pointer = usb_keys;
275 3 usb_data_to_send = SIZEOF_USB_KEYS;
276 3 Led_2_off();
277 3 }
278 2 else
279 2 {
280 3 Led_2_on();
281 3 };
282 2 break;
283 2 case 1: if (usb_data_to_send != 0)
284 2 {
285 3 if ((key_hit == FALSE) && (transmit_no_key == FALSE))
286 3 {
C51 COMPILER V7.06 USB_TASK 01/29/2008 10:59:25 PAGE 6
287 4 usb_key = *usb_key_pointer;
288 4 usb_key_pointer ++;
289 4 usb_data_to_send --;
290 4 key_hit = TRUE;
291 4 }
292 3 }
293 2 else
294 2 {
295 3 usb_kbd_state = 0;
296 3 }
297 2 break;
298 2 }
299 1 }
300
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 408 ----
CONSTANT SIZE = 362 ----
XDATA SIZE = 11 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 2 ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -