- •Національний університет водного господарства та природокористування
- •Курсова робота
- •Постановка задачі
- •Математична модель роботи фотобачка
- •2.1 Мікроконтролери сімейства msc-51
- •2.2 Апаратний комплекс «Навчальний стенд ev8032»
- •2.3 Системи відображення інформації
- •3.1 Алгоритм роботи програми
- •3. Пуск стрічки 1
- •4. Робота транспортера
- •6. Допрацювання
- •3.2 Розрахунок часових параметрів та затримок
- •3.4 Код програми
- •Висновок
3.2 Розрахунок часових параметрів та затримок
Для коректної роботи програми необхідно в її код ввести підпрограми затримок, які будуть імітувати очікування проходження певного заданого інтервалу часу. Ці підпрограми будуть у циклі декрементувати значення регістрів, відраховуючи потрібну нам кількість машинних тактів.
Затримка в 0.3 секунди реалізована у підпрограмі REDRAW. Алгоритм роботи якої зображений на рисунку 19.
Занесення
в R2
значення
FFh
Занесення
в R3
значення
FFh
Декремент
R3
Декремент
R2
Рис 19. Алгоритм роботи підпрограми затримки DELL.
1. Заносимо в R2 значення, необхідні для реалізації потрібного інтервалу затримки,
2. Заносимо в R3 значення, необхідні для реалізації потрібного інтервалу затримки
Враховуємо, що затримка буде (R2)* (R3)* 3 мкс.
4. Декрементуємо R3 поки він не буде рівний 0.
5. Декрементуємо R2.
6. Якщо R2 рівний 0 переходимо до п.3.
Дана підпрограма за час роботи використовує 256 * 256 * 3 = 196608 машинних тактів тривалістю по 1 мкс, тобто створює затримку приблизно рівну 0.2 секунді.
3.4 Код програми
IE DATA 0A8H;
IP DATA 0B8H;
P3 DATA 0B0H;
ORG 0
JMP MAIN;
ORG 03H;
JMP SW_15;
ORG 013H;
JMP SW_16;
ORG 100;
MAIN:
MOV DPTR, #0A004h;Гасіння статичного індикатора
MOV A, #0Fh;
MOVX @DPTR, A;
;Дозвіл переривань
MOV IE, #010001111b;
MOV IP, #000000100b;
;Встановлення стратового стану стрічок - вимкнено
MOV R0, #00b; DYNAMIC
MOV R1, #00b; LEDS
LOOPER:
CALL REDRAW;
JMP LOOPER;Зациклення програми
REDRAW: ;підпрограма індикації стану стрічок
MOV DPTR, #0A006h;Вивід стану стрічки 2 на світлодіодний індикатор
MOV A, R1;
RL A;
MOVX @DPTR,A;
MOV R1, A;
;Генерування коду світіння знакосинтизуючого індикатора із значення ;стану стрічки 1 в регістрі R0
CJNE R0, #010000001b, NO_1;
MOV DPTR, #08000h;
MOV A, #011000b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111101b;
MOVX @DPTR, A; 11000
JMP END_F; 00000
NO_1:
CJNE R0, #011b, NO_2;
MOV DPTR, #08000h;
MOV A, #01100b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111101b;
MOVX @DPTR, A; 01100
JMP END_F; 00000
NO_2:
CJNE R0, #0110b, NO_3;
MOV DPTR, #08000h;
MOV A, #0110b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111101b;
MOVX @DPTR, A; ; 00110
JMP END_F; 00000
NO_3:
CJNE R0, #01100b, NO_4;
MOV DPTR, #08000h;
MOV A, #011b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111101b;
MOVX @DPTR, A; 00011
JMP END_F; 00000
NO_4:
CJNE R0, #011000b, NO_5;
MOV DPTR, #08000h;
MOV A, #011b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111110b;
MOVX @DPTR, A; 00000
JMP END_F; 00011
NO_5:
CJNE R0, #0110000b, NO_6;
MOV DPTR, #08000h;
MOV A, #0110b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111110b;
MOVX @DPTR, A; 00000
JMP END_F; 00110
NO_6:
CJNE R0, #01100000b, NO_7;
MOV DPTR, #08000h;
MOV A, #01100b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111110b;
MOVX @DPTR, A; 00000
JMP END_F; 01100
NO_7:
CJNE R0, #011000000b, NO_8;
MOV DPTR, #08000h;
MOV A, #011000b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111110b;
MOVX @DPTR, A; 00000
JMP END_F; 11000
NO_8:
CJNE R0, #00b, NOTHING;
MOV DPTR, #08000h;
MOV A, #00b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111110b;
MOVX @DPTR, A;
JMP END_F;
NOTHING:
MOV DPTR, #08000h;
MOV A, #010101b;
MOVX @DPTR, A;
MOV DPTR, #08002h;
MOV A, #011111110b;
MOVX @DPTR, A; 00000
JMP END_F; 10101 – код помилки
END_F:
MOV A, R0;
RL A;
MOV R0, A;
MOV R3, #0FFh; Затримка в 0.2 сек
C1:
MOV R2, #0ffh;
C2:
DJNZ R2, C2;
DJNZ R3, C1;
RET;
SW_15: ;Пуск транспортера
MOV R1, #011b;
MOV R0, #00h;
MOV R4, #012h;
PUSK_DYN:
LCALL REDRAW;
DJNZ R4, PUSK_DYN;
MOV R0, #011b;
RETI;
SW_16:; Зупин транспортера
MOV R0, #00h;
MOV R4, #048h;
STOP_DYN:
LCALL REDRAW;
DJNZ R4, STOP_DYN;
MOV R1, #00b;
RETI;
END