Mikro licznik


org 0000h
ljmp START
org 000Bh
ljmp PRZERWANIE

org 0100h
START:
lcall setup
; mov a,#'8'
; lcall lcd_write
; mov dptr,#6045h ; 60 - minuty 45 sekundy
; lcall stoper_status
loop:

jb p1.2,LICZ ;start odliczania czasu
; jnb p1.3,PAUZA ;pauza w odliczaniu
; jnb p1.4,RESET ;zerowanie odliczania i wpisanie wartosci startowej
sjmp loop



; argument w dptr, gdzie dph - minuty, dpl - sekundy
stoper_status:
push psw
push acc
push b

mov a,dph
mov b,#10
div ab
orl a,#30h
lcall lcd_write
mov a,b
orl a,#30h
lcall lcd_write
;;;;;;;;;;;;;;;;;;;;;;;
mov a,#':'
lcall lcd_write
;;;;;;;;;;;;;;;;;;;;;;
mov a,dpl
mov b,#10
div ab
orl a,#30h
lcall lcd_write
mov a,b
orl a,#30h
lcall lcd_write

pop b
pop acc
pop psw
ret


SETUP:
push ACC
mov th0,#0 ;ustawienie timera na 0
mov tmod,#00001001b ;ustawienie zasad dzialania timera
setb ET0 ;włączenie licznika
setb EA
; setb TR0

mov R6,#10 ;ustawienie minut
mov R7,#15 ;ustawienie sekund

mov a,R6
mov R3,a ;tu licze minuty
mov a,R7
mov R4,a ;tu licze sekundy

mov R1,#0 ;punkty 1 druzyny
mov R2,#0 ;punkty 2 druzyny

;;;;;;;;;ustawienie przyciskow;;;;;;;;;;;;;;
setb p1.1 ;ustawienie linii
setb p1.2 ;;;;;;;
setb p1.3 ;;;;;;;;;;ustawieniepojedynczych bitów u nas klawisze 1,5,9
setb p1.4 ;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;WYSWIETLACZ;;;;;;;;;;;;;;;;;;;;;;;
lcall lcd_init

pop ACC
ret



;;;;;;;;;;;;;;;;;;;;;LICZENIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LICZ:
mov th0,#50 ;ustawienie timera
setb et0
cpl p1.2
sjmp loop

PRZERWANIE:
push acc

mov a,#20
djnz ACC,P_END
mov th0,#50; ustawienie znowu timera
dec R4

mov dph,r3
mov dpl,r4

lcall stoper_status

cjne R4,#0,loop ;jezeli równe zero to skocz


pop acc
ljmp _MINUTA

P_END:
reti

_MINUTA:
dec R3 ;odejmnij minute
mov R4,#60 ;ustaw sekundy
ljmp loop

;;;;;;;;;;;;;;;;;;;;PAUZA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PAUZA:

cpl p1.6 ; ustaw diode

jnb p1.6,_PAUZA
jb p1.6,END_PAUZA
_PAUZA:
push th0
push acc

mov a,R4;; sekundy
push ACC ;;wartosc sekund na stos
mov a,R3 ;; minuty

cpl ET0 ;wylączenie timera
ljmp START
END_PAUZA:
pop acc
mov R3,a ; wrzucam minuty
pop acc
mov R4,a ; wrzucam sekundy

pop acc ; to co zdjalem na poczatku _PAUZA

ljmp START

;;;;;;;;;;;;;;;;;;;;;;;;;;ZEROWANIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RESET:
ljmp SETUP



;;;;;;;;;;;;;;;UStawianie LCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCD_INIT:
push dph
push dpl
push acc

mov dptr,#8010h ;ustawiamy dptr na zapis
mov a,#00111100b
movx @dptr,a

lcall lcd_busy

mov a,#00001100b
movx @dptr,a

lcall lcd_busy

mov a,#00000001b
movx @dptr,a

lcall lcd_busy

mov a,#00000010b
movx @dptr,a

lcall lcd_busy


pop acc
pop dpl
pop dph
ret
;czekanie na gotowosc lcd
lcd_busy:
push dph
push dpl
push acc

mov dptr,#8012h
busy:
movx a,@dptr ;odczyt komorki
jb acc.7, busy ;sprawdzenie czy zajety

pop acc
pop dpl
pop dph
ret


lcd_instruction:
push dph
push dpl
mov dptr,#8010h
movx @dptr,a
lcall lcd_busy
pop dpl
pop dph
ret

lcd_home: ;; powrot kursora
push acc
mov a,#00000010b
lcall lcd_instruction
pop acc
ret

lcd_setpos:;;ustaw kursor na zadanej pozycji
lcall lcd_home
jz lcd_pos_ret
lcd_pos_loop:
push acc
mov a,#00000101b
lcall lcd_instruction
pop acc
djnz acc,lcd_pos_loop
lcd_pos_ret:
ret

lcd_write:
push dph
push dpl



mov dptr,#8011h
movx @dptr,a

lcall lcd_busy

pop dpl
pop dph
ret


ljmp START

END

Wyszukiwarka

Podobne podstrony:
Mikro licznik
Mikro licznik poprawiony
Kodowanie V A G iem licznika do A4
warunki dodatkowe mikro lub kwasy
8 7 liczniki
liczniki2
wtyki licznikow samochodowych
mikro zaj4 zap
Przerzutn liczniki dekodery
licznik
Licznik rowerowy Sigma BC1200 instrukcja PL
Mikrokontrolery To takie proste, cz 15 (układ licznikowy w 8052C & specjalne tryby pracy 8051)

więcej podobnych podstron