ня поки контролер не видасть підтвердження про виконання операції. Як тільки прийшло підтвердження контролер USB в залежності від операції відправляє або підтвердження про запис або відправляє лічені дані. А далі починає програму заново з місця очікування запиту головного пристрою.
Програма контролера пам'яті.
При запуску програма переходить в режим очікування запиту від контролера USB прта, як тільки прийшов запит визначається код операції над пам'яттю і зчитуються адреси. Якщо операція читання подається запит на пам'ять для читання даннис з переданого адреси. Всі дані з пам'яті записуються в змінну page (64) і разом з підтвердженням про виконаною операцією відправляються дані контролеру USB порту. Якщо ж операція запису, то спочатку приймаються дані для запису з контролера Usb порту, потім за прийнятим адресою відбувається стирання даних, далі йде їх запис і перевірка на запис, тобто зчитування записаних даних і порівняння їх з вихідними. Після цих операцій відправляється підтвердження про запис даних. Після чого програма починає свою роботу заново.
Лістинг програми
Програма для контролера ADuC812
my_kurs: do
$ include (reg51. dcl) data_usb (4) byte, _command byte, _l byte, _h byte, (64) byte,, j byte; _time byte, _start byte, _on byte, byte, byte, byte, byte, byte;
/////////////////////////////////////////< ; timer> _int: procedure interrupt 1; (timer_start = 1) then; _start = 0; _on = 1;; (timer_on = 1) then; _time = timer_time - 1; (timer_time = 0) then; _on = 0;; ; timer_int;
////////////////////////////////////////
//////////////////////////////////////// < delay> _time: procedure (time); time byte; i = 0 to time; t1 = 0 to 4; _time = 250; _start = 1; while timer_on = 0 or timer_start = 1;;;; delay_time;
////////////////////////////////////////
//////////////////////////////////////// < usb> _command_usb: procedure; _command = 0; while (p3.2 = 0);
/////////////////while (p3.0 = 1); (p3.2 = 1) then usb_command = 10; while (p3. 0 = 1); (p3.1 = 1) then usb_command = usb + command + 1;
/////////////////(usb_command = 1) then; _flag = 1; _flag = 0;; (usb_command = 2) then; _flag = 1; _flag = 0;;
///////////////////while (p3.2 = 0);
///////////////////i = 0 to 8; while (p3.0 = 1); (p3.1 = 1) then addr_l = addr_l +1; _l = shl (addr_l, 0); while (p3.0 = 1); (p3.1 = 1) then addr_l = addr_l + 1; (i <7) then addr_l = shl (addr_l , 0);; i = 0 to 8; while (p3.0 = 1); (p3.1 = 1) then addr_h = addr_h +1; _h = shl (addr_l, 0); while (p3.0 = 1 ); (p3.1 = 1) then ad...