double arrow

Розрахунок часових параметрів та затримок


 

Для коректної роботи програми необхідно в її код ввести підпрограми затримок, які будуть імітувати очікування проходження певного заданого інтервалу часу. Ці підпрограми будуть у циклі декрементувати значення регістрів, відраховуючи потрібну нам кількість машинних тактів.

 

Затримка в 0.3 секунди реалізована у підпрограмі REDRAW. Алгоритм роботи якої зображений на рисунку 19.

 
 

 

 


Рис 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 секунді.


 

Код програми

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


Висновок

В результаті виконання курсової роботи ми вивчили та проаналізували апаратне і програмне забезпечення стенду EV8031/AVR , що дало змогу використовувати його для виконання даної роботи, поставили і виконали задачу автоматизації процесу проявки фотоплівки, розробили і описали алгоритм цього процесу та виконуваної програми.

Все це дало нам змогу краще ознайомитися зі стендом та його можливостями, вдосконалити свої навики роботи з мікропроцесором та покращити знання з мови програмування Асемблер.

 


Література

1. Методичні вказівки до виконання лабораторних робіт з курсу “Мікропроцесорна техніка“

2. Додатки до методичних вказівок

3. Освітній інтернет ресурс «Вільна Енциклопедія» wikipedia.org









Сейчас читают про: