Podivne chovani MPLABU
Saša
sasa.dvoraku
Středa Březen 17 14:27:09 CET 2004
Zdravim lidi,
v priloze je jeden programek, ktery mi cele odpoledne fungoval a vecer,
po doplneni nekolika drobnosti proste prestal fungovat. Zajimave ale je, ze
cast, ktera zlobi, je jiz od rana stejna a menila jsem neco uplne jineho,
konkretne to byla konstatnta cekaci smycky. Ve vypisu je ono podivne misto
oznacene hvezdickami. Na simulatoru je videt, ze se program sam od sebe
resetuje na konci procedury KODUJ2. Pokud se oznacene misto odstrani, ale
staci vyhodit jenom jednu podminku, tak to funguje tak jak se da ocekavat.
Pritom procedura KODUJ2 se normalne pouziva i v jinem miste a tam je to bez
problemu. Napada nekoho co to muze byt ?
Dalsi informace klidne poskytnu, ale asi to nebude nutne. Program pocita od
00.00 do 23.59 a pak stale dokola. Jako displej je pouzit MM5450BN na portu
PA0-2, je to z programu jasne videt. Na portu PB jsou tlacitka. Kmitocet
oscilatoru je 3.2768 Mc/s (jiny nemam).
Paradox je, ze to cely den funguje a pak to zacne blbnout. Dala to i na
jinych procesorech.
Diky Sasa
---
Odchoz? zpr?va obsahuje celou moj? sb?rku vir? a jin?ch ??lenost?,
tak si je u?ijte ve zdrav? :)
Zkontrolov?no antivirov?m syst?mem AVG (http://www.grisoft.cz).
Verze: 6.0.325 / Virov? b?ze: 182 - datum vyd?n?: 19.2.2002
-------------- next part --------------
;............................................................................................
; Obsluzny program pro hodiny v 2.0
;............................................................................................
;............................................................................................
; Definice promenych
;............................................................................................
tmr0 equ 01h
pc equ 02h
status equ 03h
fsr equ 04h
porta equ 05h
portb equ 06h
eedata equ 08h
eeadr equ 09h
pclatch equ 0Ah
intcon equ 0Bh
op_reg equ 81h
trisa equ 85h
trisb equ 86h
#define RP0 status,5
#define Z status,2
#define C status,0
#define CLK porta,0
#define DATA porta,1
#define DE porta,2
#define RST porta,3
#define PIP porta,4
#define GIE intcon,7
#define T0IF intcon,2
#define T0IE intcon,5
offram equ 0Ch
TMP equ offram+0
TMP1 equ offram+1
TMP2 equ offram+2
zobraz equ offram+3
pocet equ offram+4
Z1 equ offram+5 ;zobrazeni jednotek
Z10 equ offram+6
Z100 equ offram+7
Z1000 equ offram+8 ;zobrazeni tisicu
ZD equ offram+9 ; zobrazeni diod
JM equ offram+10 ; jednoky minut
DM equ offram+11
JH equ offram+12
DH equ offram+13 ; desitky hodin
HO equ offram+14 ; hodiny
MI equ offram+15 ; minuty
SE equ offram+16 ; sekundy
tecka equ offram+17
B1 equ offram+18
B2 equ offram+19
;.............................................................................................
; Inicializace
;.............................................................................................
org 0
goto start
start BSF RP0 ; vyber v pameti Banku 1
MOVLW b'00000000'
MOVWF trisa
BCF RP0 ; vyber v pameti zpet Banku 0
movlw 00h
movwf porta
;.............................................................................................
; Hlavni program
;.............................................................................................
movlw .0
movwf HO
movlw .0
movwf MI
movlw .0
movwf SE
movlw .0
movwf B1
movlw .0
movwf B2
movlw b'00000000'
movwf ZD
movlw b'00000100'
movwf tecka
call prevod
bcf DE
call zob
bsf DE
smycka movlw b'00000000'
movwf ZD
call seku
call cekej
call prevod
bcf DE
call zob
bsf DE
btfss portb,2
call nastav
;***********************************************************************
btfss SE,0 ;Kdyz jednu podminky vyhodim, tak to funguje.
movlw b'00000000' ;
btfsc SE,0 ;
movlw b'00000100' ;
movwf tecka
;************************************************************************
goto smycka
seku incf SE,f
movlw .60
subwf SE,w
btfsc status,2
clrf SE
btfsc status,2
call minu
return
minu incf MI,f
movlw .60
subwf MI,w
btfsc status,2
clrf MI
btfsc status,2
call hodi
return
hodi incf HO,f
movlw .24
subwf HO,w
btfsc status,2
clrf HO
return
;.............................................................................................
; Podprogramy
;.............................................................................................
;.............................................................................................
; Nastaveni hodin
;.............................................................................................
nastav movlw b'00000000'
movwf tecka
movlw b'10000000'
movwf ZD
clrf SE
stel btfss portb,1
call M
btfss portb,0
call H
call cekej
btfss portb,3
return
call prevod
bcf DE
call zob
bsf DE
goto stel
M incf MI,f
movlw .60
subwf MI,w
btfsc status,2
clrf MI
return
H incf HO,f
movlw .24
subwf HO,w
btfsc status,2
clrf HO
return
;.............................................................................................
; Prekodovani cisel HEX -> BCD
;.............................................................................................
prevod movf HO,w
call prek
movwf TMP
movf TMP,w
movwf JH
bcf JH,7
bcf JH,6
bcf JH,5
bcf JH,4
swapf TMP
movf TMP,w
movwf DH
bcf DH,7
bcf DH,6
bcf DH,5
bcf DH,4
movf MI,w
call prek
movwf TMP
movf TMP,w
movwf JM
bcf JM,7
bcf JM,6
bcf JM,5
bcf JM,4
swapf TMP
movf TMP,w
movwf DM
bcf DM,7
bcf DM,6
bcf DM,5
bcf DM,4
retlw 00h
prek addwf pc,f
retlw b'00000000' ;00
retlw b'00000001' ;01
retlw b'00000010' ;02
retlw b'00000011' ;03
retlw b'00000100' ;04
retlw b'00000101' ;05
retlw b'00000110' ;06
retlw b'00000111' ;07
retlw b'00001000' ;08
retlw b'00001001' ;09
retlw b'00010000' ;10
retlw b'00010001' ;11
retlw b'00010010' ;12
retlw b'00010011' ;13
retlw b'00010100' ;14
retlw b'00010101' ;15
retlw b'00010110' ;16
retlw b'00010111' ;17
retlw b'00011000' ;18
retlw b'00011001' ;19
retlw b'00100000' ;20
retlw b'00100001' ;21
retlw b'00100010' ;22
retlw b'00100011' ;23
retlw b'00100100' ;24
retlw b'00100101' ;25
retlw b'00100110' ;26
retlw b'00100111' ;27
retlw b'00101000' ;28
retlw b'00101001' ;29
retlw b'00110000' ;30
retlw b'00110001' ;31
retlw b'00110010' ;32
retlw b'00110011' ;33
retlw b'00110100' ;34
retlw b'00110101' ;35
retlw b'00110110' ;36
retlw b'00110111' ;37
retlw b'00111000' ;38
retlw b'00111001' ;39
retlw b'01000000' ;40
retlw b'01000001' ;41
retlw b'01000010' ;42
retlw b'01000011' ;43
retlw b'01000100' ;44
retlw b'01000101' ;45
retlw b'01000110' ;46
retlw b'01000111' ;47
retlw b'01001000' ;48
retlw b'01001001' ;49
retlw b'01010000' ;50
retlw b'01010001' ;51
retlw b'01010010' ;52
retlw b'01010011' ;53
retlw b'01010100' ;54
retlw b'01010101' ;55
retlw b'01010110' ;56
retlw b'01010111' ;57
retlw b'01011000' ;58
retlw b'01011001' ;59
;.............................................................................................
; Zobrazeni na zobrazovaci
;.............................................................................................
zob movf JM,w ;presun JEDNOKY MINUT do W
btfss tecka,0 ;ma svitit tecka ?
call koduj1 ;NE - koduj1
btfsc tecka,0 ;ma svitit tecka ?
call koduj2 ;ANO - koduj2
movwf Z1 ;presun W do Z1
movf DM,w
btfss tecka,1
call koduj1
btfsc tecka,1
call koduj2
movwf Z10
movf JH,w
btfss tecka,2
call koduj1
btfsc tecka,2
call koduj2
movwf Z100
movf DH,w
btfss tecka,3
call koduj1
btfsc tecka,3
call koduj2
movwf Z1000
call ini
movf Z1,w
movwf zobraz
call uloz
movf Z10,w
movwf zobraz
call uloz
movf Z100,w
movwf zobraz
call uloz
movf Z1000,w
movwf zobraz
call uloz
movf ZD,w
movwf zobraz
call uloz
retlw 00h
;.............................................................................................
; Vyslani inicializacniho pulzu
;.............................................................................................
ini bsf DATA
bsf CLK
bcf CLK
return
;.............................................................................................
; Vyslani 8 bitu
;.............................................................................................
uloz movlw .8
movwf pocet
ulo1 bsf DATA
rlf zobraz,f
btfss C
bcf DATA
bsf CLK
bcf CLK
decfsz pocet,f
goto ulo1
retlw 00h
;.............................................................................................
; Procedura pro prevod kodu znaku BIN -> 7seg
;.............................................................................................
koduj1 addwf pc,f ; kody bez tecky
retlw b'11111100' ; 0 0
retlw b'01100000' ; 1 1
retlw b'11011010' ; 2 2
retlw b'11110010' ; 3 3
retlw b'01100110' ; 4 4
retlw b'10110110' ; 5 5
retlw b'10111110' ; 6 6
retlw b'11100000' ; 7 7
retlw b'11111110' ; 8 8
retlw b'11110110' ; 9 9
retlw b'00000000' ; 10 MEZERA
retlw b'00000010' ; 11 -
koduj2 addwf pc,f ; kody s teckou
retlw b'11111101' ; 0 0
retlw b'01100001' ; 1 1
retlw b'11011011' ; 2 2
retlw b'11110011' ; 3 3
retlw b'01100111' ; 4 4
retlw b'10110111' ; 5 5
retlw b'10111111' ; 6 6
retlw b'11100001' ; 7 7
retlw b'11111111' ; 8 8
retlw b'11110111' ; 9 9
retlw b'00000001' ; 10 MEZERA
retlw b'00000011' ; 11 -
;.............................................................................................
; Cekaci smycka
;.............................................................................................
cekej movlw .255
movwf TMP1
loop1 movlw .255
movwf TMP
loop2 decfsz TMP,f
goto loop2
decfsz TMP1,f
goto loop1
retlw 00h
;.............................................................................................
END
Další informace o konferenci Hw-list