Witam, mam taki problem:
Bez tego opoznienia Czekaj_ms dane z tabeli sa ladnie wypisywane na wyswietlacz 7 seg (w emulacji), jak dodalem opoznienie i wrzucilem na procka to co prawda odczytuje z tabeli, ale... do 5 pozycji wlacznie (dochodzi do 5 i zaczyna od zera). Nie mam pojecia o co to chodzi, moze mi ktos pomoc?
;Licznik binarny z wyświetleniem wartości na wyświetlaczu
;7-segmentowym LED TDSY3150 (użycie pojedynczej cyfry)
.include "m128def.inc"
.EQU SYS_FREQ = 4 ; częstotliwość pracy w MHz
.ORG 0 ; wektor zerowania
jmp Reset ; skok do procedury inicjalizującej
Reset: ; podprogram inicjalizujący
ldi R17, high(RAMEND)
ldi R16, low(RAMEND)
out SPH, R17
out SPL, R16 ; inicjalizacja wskaźnika stosu
ldi R16, 0xFF
sts DDRF, R16 ; port F w trybie wyjściowym - do 7seg
sei ; odblokowanie przerwań
clr R16
Petla: ;pętla główna programu
clr R0 ;zerowanie R0-posłuży do dodania ew.przeniesienia
ldi ZL,low(wzorce<<1) ;adres w ROM może być 2-bajtowy,należy uwzględnić
ldi ZH,high(wzorce<<1) ;młodszy i starszy bajt adresu
add ZL,R16 ;do indeksu dodajemy wartość temp-to będzie
adc ZH,R0 ;wartość przesunięcia w tablicy
lpm ;załadowanie do R0 bajtu (wzorca cyfry) z ROM
sts PORTF,R0 ;wyprowadzenie wzoraca przez port A
inc R16 ;zwieksz R16
cpi R16, 10 ;porownaj R16 z liczba 10, jesli rowne
breq RESET ;skocz do RESET
ldi R22, 250
ldi R17, 2
call Czekaj_ms
rjmp Petla ;zapętl program
wzorce: .db 2,10,20,30,40,50,60,70,80,90
;##################OCZEKIWANIE MILISEKUNDOWE###################;
; Parametry:
; R22 - wartość opóźnienia w ms (dla zera - 256 ms)
; R17 - mnożnik opóźnienia (dla zera - 256x)
;
; Wymagane stałe:
; SYS_FREQ - częstotliwość pracy w MHz
;#############################################################;
Czekaj_ms:
push R18
push R19
push R20
push R21
mov R20, R22
mov R21, R17
ldi R18, SYS_FREQ
Czekaj_ms_0:
mov R17, R21 ;______________
; \
Czekaj_ms_1: ; |
mov R22, R20 ;__________ |
; \ |
Czekaj_ms_2: ; | |
ldi R19, 249 ;______ | |
; \ | |
nop ; | | |
Czekaj_ms_3: ;__ | | |
nop ; \ p p p
dec R19 ; p3 2 1 0
brne Czekaj_ms_3 ;__/ | | |
; | | |
dec R22 ; | | |
brne Czekaj_ms_2 ;______/ | |
; | |
dec R17 ; | |
brne Czekaj_ms_1 ;__________/ |
; |
dec R18 ; |
brne Czekaj_ms_0 ;______________/
pop R21
pop R20
pop R19
pop R18
ret
Bez tego opoznienia Czekaj_ms dane z tabeli sa ladnie wypisywane na wyswietlacz 7 seg (w emulacji), jak dodalem opoznienie i wrzucilem na procka to co prawda odczytuje z tabeli, ale... do 5 pozycji wlacznie (dochodzi do 5 i zaczyna od zera). Nie mam pojecia o co to chodzi, moze mi ktos pomoc?