Код:
.def temp = r16 ; временный регистр для основной программы и подпрограмм, кроме п/п прерываний
.def delay_cnt = r19 ; счётчик для задержки времени
.def cnt = r20 ; регистр для счетчиков циклов
Код:
;
***********************************************************************************************************************
;* 170930-03 ВРЕМЕННАЯ ЗАДЕРЖКА 1 мс (1мсек=8МГЦ / 5 / 1000 = 0x000640)
;***********************************************************************************************************************
Delay1mS:
push temp
push cnt
push delay_cnt
ldi temp,243 ; для 8 МГц
ldi cnt, 107 ; для 8 МГц
mov delay_cnt,temp
Delay1ms_1:
inc cnt
breq Delay1ms_exit
mov temp,delay_cnt
Delay1ms_2:
inc temp
breq Delay1ms_1
rjmp Delay1ms_2
Delay1ms_exit:
pop delay_cnt
pop cnt
pop temp
ret
;***********************************************************************************************************************
;* 170806-03 ВРЕМЕННАЯ ЗАДЕРЖКА 5 мс
;***********************************************************************************************************************
Delay5mS:
rcall Delay1mS
rcall Delay1mS
rcall Delay1mS
rcall Delay1mS
rcall Delay1mS
ret
;***********************************************************************************************************************
;* 170806-03 ВРЕМЕННАЯ ЗАДЕРЖКА 50 мс
;***********************************************************************************************************************
Delay50mS:
push temp
ldi temp,50
Delay50mS_10:
rcall Delay1mS
dec temp
brne Delay50mS_10
pop temp
ret
;***********************************************************************************************************************
;* 150409-02 ВРЕМЕННАЯ ЗАДЕРЖКА 100 мс
;***********************************************************************************************************************
Delay100mS:
push temp
ldi temp,100
Delay100mS_10:
rcall Delay1mS
dec temp
brne Delay100mS_10
pop temp
ret
;***********************************************************************************************************************
;* 150409-02 ВРЕМЕННАЯ ЗАДЕРЖКА 1 СЕК
;***********************************************************************************************************************
Delay1S:
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
rcall Delay100mS
ret
;***********************************************************************************************************************
; короткая задержка
;***********************************************************************************************************************
SMALL_WAIT:
nop
ret
- - - Добавлено - - -
Код:
;***********************************************************************************************************************
;* 170805-03 Cold Reset (CurLeft+RESET) (COM+00: PrnScr)
;***********************************************************************************************************************
Command_00:
PRESS CS+KEY_5
rcall Delay100mS ; время нажатия одной кнопки 100 милисекунд
PRESS Z80_RESET ; включение сигнала RESET
PRESS NULL ; отпускание всех кнопок
ret
;***********************************************************************************************************************
;* 170723-03 Magic (NMI) (COM+15: ScrollLock)
;***********************************************************************************************************************
Command_15:
PRESS Z80_NMI
PRESS NULL ; отпускание всех кнопок и выключение NMI
rcall Delay1S ; время нажатия одной кнопки 1 секунда
ret
;***********************************************************************************************************************
;* 170925-03 Turbo On/Off (COM+16: NumLock)
;***********************************************************************************************************************
Command_16:
PRESS Z80_TURBO
PRESS NULL ; отпускание всех кнопок
rcall Delay100mS ; время нажатия одной кнопки 1 милисекунда
ret
;***********************************************************************************************************************
;* 180604-03 PAUSE, пауза /WAIT (COM+18))
;***********************************************************************************************************************
Command_18:
sbis PORTD,PD1 ; проверяем состояние бита 1
rjmp BIT_IS_LO ; если бит в 0, то включаем его
cbi PORTD,PD1 ; иначе выключаем его
rjmp WAIT_EXIT
BIT_IS_LOW:
sbi PORTD,PD1 ;включили бит
WAIT_EXIT:
PRESS NULL ; отпускание всех кнопок
rcall Delay100mS ; время нажатия одной кнопки 100 милисекунд
ret
Вроде бы для организации WAIT через разъём UART я ещё аппаратно припаивал диод или резистор на данный контроллер, счас не помню, а скорп убран.
Если быстро нажать-отпустить PrnScr, то получается "тёплый старт" как простой сброс, если нажать-чуть подержать-отпустить, то срабатывает полноценный макрос "холодный старт" с инициализацией скорпиона. Почему так получается, если написан только один макрос - не понимаю.