Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova_TR_13.doc
Скачиваний:
1
Добавлен:
10.12.2018
Размер:
1.11 Mб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]