Cos takiego na szybko napisalem:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;definicje
wgore equ p3.2
wdol equ p3.3
licznik equ 30h
timerek0 equ 31h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h
jmp start ;przeskakuje obszar wektorow przerwan
org 50h
start:
mov licznik,#0h ;na dziendobry zeruje licznik
main_loop:
;w tej petli sprawdzam tylko czy ktorys z klawiszy nie zostal wcisniety
jb wgore,main_loop_dol
call d20ms
jb wgore,main_loop_dol ;sprawdza stan klawisza od zlicznia w gore
jmp main_loop1
main_loop_dol:
jb wdol,main_loop
call d20ms
jb wdol,main_loop ;;sprawdza stan klawisza od zlicznia w dol
jmp main_loop2
;zaden nie wcisniety
jmp main_loop
main_loop1:
mov a,licznik
cjne a,#5,main_loop1_zwi ;porownuje stan licznika z gornym zakresem
jnb wgore,$ ;gorny zakres osiagniety wiec tylko czekam na puszczenie klawisza
jmp wybor_procedury
main_loop1_zwi:
;tu wskakuje gdy gorny zakres jeszcze nie osiagniety
inc licznik
jnb wgore,$
jmp wybor_procedury
main_loop2:
mov a,licznik
cjne a,#0,main_loop2_zmn
jnb wdol,$
jmp wybor_procedury
main_loop2_zmn:
dec licznik
jnb wdol,$
jmp wybor_procedury
wybor_procedury:
;tu na podstawie wartosci licznika wybieram program
mov a,licznik
cjne a,#0,wybor_procedury_spr1
call procedura_zerowa
jmp main_loop
wybor_procedury_spr1:
cjne a,#1,wybor_procedury_spr2
call procedura_pierwsza
jmp main_loop
wybor_procedury_spr2:
cjne a,#2,wybor_procedury_spr3
call procedura_druga
jmp main_loop
wybor_procedury_spr3:
cjne a,#3,wybor_procedury_spr4
call procedura_trzecia
jmp main_loop
wybor_procedury_spr4:
cjne a,#4,wybor_procedury_spr5
call procedura_czwarta
jmp main_loop
wybor_procedury_spr5:
call procedura_piata
jmp main_loop
;;;tu procedury funkcji
procedura_zerowa:
;instrukcje procedury 0
ret
procedura_pierwsza:
;instrukcje procedury 1
ret
procedura_druga:
;instrukcje procedury 2
ret
procedura_trzecia:
;instrukcje procedury 3
ret
procedura_czwarta:
;instrukcje procedury 4
ret
procedura_piata:
;instrukcje procedury 5
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;a tu male opoznienie dla sprawdzania klawiszy
d20ms:
mov timerek0,#0
djnz timerek0,$
ret
end
Pozdrawiam