Ожидание статического сигнала. Например, при подключении датчика к линии бита 4 порта 1 программа ожидания замыкания контакта будет иметь вид:
WAIT0: JNB P1.4, WAIT0 ;ожидание размыкания контакта датчика
Другим частным случаем является процедура ожидания размыкания контакта, которая может быть реализована следующим образом:
NAME InterruptTest
PUBLIC START
PROG SEGMENT CODE
RSEG PROG
jmp START ; переход к основной программе
ORG 03H
jmp sInt0 ; вектор прерывания INT0
ORG OBH
jmp sIntT0 ; вектор прерывания по
; переполнению таймера T0
ORG 30H ; основная программа
START: mov IE,#10000011b ; разблокирование всех прерываний (бит IE.7),
; разрешение прерываний T0 ; (бит IE.1) и INT0 (бит IE.0)
setb TCON.0 ; установка типа прерывания INT0
; по срезу сигнала на входе P3.2
setb TCON.4 ; пуск таймера T0
LOOP: inc A ; инкремент аккумулятора
jnz LOOP ; переход, если не нуль
ORG 60H ; процедуры обслуживания прерываний
sInt0: push PSW ; сохранение в стеке регистров
push ACC
push B
push DPL
push DPH
inc R5
; ….
pop DPH ; восстановление регистров
pop DPL
pop B
pop ACC
pop PSW
reti ; возврат из обработки INT0
IntT0: push PSW ; сохранение в стеке регистров
push ACC
push B
push DPL
push DPH
mov 20H,R5
; ….
pop DPH
pop DPL
pop B
pop ACC
pop PSW ; восстановление регистров
reti ; возврат из обработки T0
END
3. Команда деления может быть также использована для отделения подполей данного в аккумуляторе.
Например, выполняя деление упакованного двоично-десятичного данного на 16 можно отделить два полубайта, старшие разряды в аккумуляторе, а младшие (остаток) - в регистре В. Каждое данное выровнено вправо и, следовательно, может обрабатываться отдельно.
В приведенном примере два упакованных двоично-десятичных числа хранятся в аккумуляторе, выполняется отделение каждого числа, затем вычисляется их произведение и возвращается в упакованном двоично-десятичном формате в аккумулятор.
; DISBCD Выполняет распаковку двух упакованных двоично-
; десятичных чисел, полученных в аккумуляторе, и возвращает их
; произведение в аккумулятор также в двоично-десятичном
; упакованном формате
BEG: MOV B,#10H ; Исходное значение делится
DIV АВ ; на 16. В регистрах А и В хранятся выделенные цифры
; (каждая выровнена вправо)
MUL АВ ; Регистр А содержит произведение в двоичном формате
; (0-99(десятичное)=0-63Н)
MOV В,#10 ; Произведение делится
DIV АВ ; на 10. Регистр А содержит цифру десятков,
; В содержит остаток
SWAP А ; Цифры в упакованном
ORL А,В ; формате
RET
|