Лабораторная работа 5 / mps_lab5
.docСанкт-Петербургский государственный электротехнический университет
Кафедра ВТ
Микропроцессорные системы
Отчет по лабораторной работе №5
Вариант 1
Выполнили: Попов А.
Таранюк М.
Гр.2372
Проверила: Головина Л.К.
Санкт-Петербург
2006
Форматы управляющих слов
При программировании подсистемы прерываний использовались следующие управляющие слова:
SETB EA ; enable all interrupts
SETB ET1 ; enable interrupt request from T/C0
SETB EX0 ; enable internal interrupt
SETB IT0 ; programming interrupts
SETB PX0 ; high priority int0
Коды программ
Пункт1 – реализация бегущего огня и вывод на экран по прерыванию 55h
$NOMOD51
#include <reg932.h>
Blinking SEGMENT CODE ; segment declaration
; defines a segment with the name 'Blinking' and the memory class CODE
RSEG Blinking ; switch to this code segment
JMP punkt1
org 03h ; internal interrupt
clr EA
PUSH PSW
PUSH ACC
mov p2,#055h
mov r5,#0FFh
delay:
DJNZ R5, delay
POP ACC
POP PSW
setb EA
RETI
ORG 01Bh ; 01BH is address for Timer 1 interrupt
clr EA
PUSH PSW
PUSH ACC
MOV P2, R7
DJNZ R6, next
MOV R6, #0FFh
CJNE R7, #10000000b, shift
MOV R7, #00000001b
JMP next
shift:
MOV A, R7
RL A
MOV R7, A
next: POP ACC
POP PSW
setb EA
RETI
punkt1:
MOV P2M1, #00h ; configure Port 2 as Quasi-bidirectional
MOV R7, #00000001b
MOV R6, #0FFh
MOV TMOD, #010h ; configure Timer 0 in mode 1 (16-bit counter)
; programming interrupt logic
SETB EA ; enable all interrupts
SETB ET1 ; enable interrupt request from T/C0
SETB TR1 ; run Timer
SETB EX0 ; enable internal interrupt
// SETB IT0 ; programming interrupts
jmp forever
forever:
JMP forever
END
Пункт 2,3 – по прерыванию меняется направление бегущего огня
$NOMOD51
#include <reg932.h>
Blinking SEGMENT CODE ; segment declaration
; defines a segment with the name 'Blinking' and the memory class CODE
RSEG Blinking ; switch to this code segment
JMP punkt1
org 03h ; internal interrupt
PUSH PSW
PUSH ACC
mov a,r4
cpl a
anl a,#01h
mov r4,a
mov r5,#0FFh
delay:
DJNZ R5, delay
POP ACC
POP PSW
RETI
ORG 01Bh ; 01BH is address for Timer 0 interrupt
PUSH PSW
PUSH ACC
MOV P2, R7
DJNZ R6, next
MOV R6, #0FFh
CJNE R4, #01h, right
left:
CJNE R7, #10000000b, shift_left
MOV R7, #00000001b
JMP next
shift_left:
MOV A, R7
RL A
MOV R7, A
jmp next
right:
CJNE R7, #00000001b, shift_right
MOV R7, #10000000b
JMP next
shift_right:
MOV A, R7
RR A
MOV R7, A
jmp next
next: POP ACC
POP PSW
RETI
punkt1:
MOV P2M1, #00h ; configure Port 2 as Quasi-bidirectional
MOV R7, #00000001b
MOV R6, #0FFh
MOV TMOD, #010h ; configure Timer 0 in mode 1 (16-bit counter)
; programming interrupt logic
SETB EA ; enable all interrupts
SETB ET1 ; enable interrupt request from T/C1
SETB TR1 ; run timer
SETB EX0 ; enable int0
SETB PX0 ; high priority int0
mov r4,#01h
// SETB IT0
jmp forever
forever:
JMP forever
END