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