Тимчасова діаграма роботи мікропроцесорної системи в режимі запису в ОЗУ
7. Розробка програмного забезпечення
Програмне забезпечення реалізовувалося за такими алгоритмами:
В
і алгоритм формування Y3 і Y2:
В
Лістинг програми:; оголошуємо сегмент з побітовим доступом для прапорів I2C та інших: dbit 1: dbit 1CBusy: dbit 1: dbit 1: dbit 1: dbit 1: dbit 1at 30h: ds 3: ds 20: ds 20: ds 2: ds 3: ds 2: ds 2: ds 1: ds 2: ds 1: ds 1; Лічильник бітів для I2C: ds 1; Лічильник байтів для I2C: ds 1; Адреса веденого: ds 3; таймаут: ds 8; буфер передачі I2C, 8 байт: ds 8; Буфер прийому I2C, 8 байтequ 10_ADDR equ 01110100b_ADDR equ 01000010bstart3hint1_alarm13hint2_power23hint3_keyb40h: dw 7FFh; константа Q0: db 24; K: dw 1F4h; A0: db 4; A1equ 0C8h; глибина стека від 200 до 255 байт - 55 байтbit P1.0; сигнал запуску АЦПbit P1.2; дозвіл завантаження старшого байта в ЦАПbit P1.3; оновлення регістрів ЦАПbit P1.4; керуючий сігналbit P1.5; керування контролером дісплеяbit P1.6; управління таймером КР580ВІ53bit P1. 7; аварійна сігналізаціяbit P3.0; синхронізація I2Cbit P3.1; дані I2Cbit P3.4; управління таймером КР580ВІ53bit P3.5; управління сторожовим таймером: SP, # stack-1IE, # 7Fh; заборонимо прериваніяP1, # 10011100bP3, # 11000011bWDI; скинемо watchdogWDI
;//////////////////////////////
; ініціалізація Т2 як джерела зовнішнього прериванія0C9h, # 00000000B; перезапускати режим (0C9h - адреса T2MOD) 0C8h, # 01001000B; Режим таймера Т2. Лічильник, рахунок від зовнішнього входу (0C8h - адреса T2CON) 0CDh, # 0FFH; Запис значення в таймер Т2 (0CDh - адреса TH2) 0CCh, # 0FFH; Запис значення для 16 розрядного рахунку (0CCh - адреса TH2)
;//////////////////////////////
; инициализируем АЦПXmtDat, # 00000010b; адресу РУСXmtDat +1, # 01010000b; керуюче словоSlvAdr, # ADC_ADDR; завантажимо адресу із запитом запису - останній біт "0" R0, # XmtDat; ByteCnt, # 2; SendData; p>
; тепер необхідно повернути покажчик на регістр результатаXmtDat, # 00000000b; адреса регістра результатаSlvAdr, # 01000010b; завантажимо адресу із запитом запису - останній біт "0" R0, # XmtDat; ByteCnt, # 1; SendData;
;/////////////////////////////
; инициализируем контролер клавіатуриXmtDat, # 00000001b; адресу РУСXmtDat +1, # 00000000b; керуюче слово для 0х01XmtDat +2, # 00000000b; керуюче слово для 0х02 - автоувеліченіе адресаXmtDat +3, # 10100000b; керуюче слово для 0х03 - автоувеліченіе адресаXmtDat + 4, # 10000000b; керуюче слово для 0х04 - автоувеліченіе адресаSlvAdr, # KEYB_ADDR; завантажимо адресу із запитом запису - останній біт "0" R0, # XmtDat; ByteCnt, # 5; SendData;
; тепер необхідно повернути покажчик на регістр FIFOXmtDat, # 00000000b; адреса регістра FIFOSlvAdr, # 01110100b; завантажимо адресу із запитом запису - останній біт "0" R0, # XmtDat; ByteCnt, # 1; SendData;
;//////////////////////////////...