Potřeboval bych pomoc s jednim program je to jednoduchý ale furt mi to hází chybky a to na konci kdy testuju Carry
Kód:
subwf     portA
btfsc     Carry
někde v tomhle je zakopanej pes ale nevim... Když to pustim tak běží cykl čísel od 0 do F, ale když na dipu nastavim nějakou hodnotu DIp=portA tak to doběhne do konce a zhroutí se to
Citace Původně odeslal Zadani
Sestavte program pro PIC16F84, ktery zobrazi na 7x Segmentovce
cissla od 0 do N diod, kde N je dano 4 bitovym cislem z DIPu
Kód:
;------------------------------------------------------------------
;	PREDDEFINOVANE REGISTRY
;------------------------------------------------------------------
RTCC	     equ		1h			;registr RTCC
Option_reg  equ		81h			; Option registr
PCL			equ		2h			;registr PCL (pro BCL code)
SWR		   equ		3h			;regist stavoveho slova
portA	    equ		5h			;port A
portB	    equ		6h			;port B

IntCon	   equ		0Bh			;registr pro preruseni
w		     equ		0h			;pracovni registr W
f		 	 equ		1h			;pomocny registr F
RTIF    	 equ 	  2h

#DEFINE	  Carry	SWR,0		;indikuje preteceni carry flag
#DEFINE	  Zero	 SWR,2		;indikuje nulu
#DEFINE     RP0	  SWR,5		    ;banka registru 0

;-----------------------------------------------------------------
;	PROMENNE
;-----------------------------------------------------------------
Krat 		 equ		8h			;pocet cyklu opakovani pro spozdeni
Citac       equ		10h		        ;adresa citace
Cislo       equ		11h			;adresa bunky se zobraz. cislem
Dip			equ		12h
;-----------------------------------------------------------------
;	OBSLUZNE PODPROGRAMS
;-----------------------------------------------------------------
			org		0	
			goto	Start		;skok na hlavni telo programu
;-------[Zasobnik se zobrazovacem cisel na 7xSeg]-----------------
Segment
			addwf	PCL,f		;soucet prg.count a cisla
			retlw   0C0h		;0
			retlw   0F9h		;1
			retlw   0A4h		;2
			retlw   0B0h		;3
			retlw   099h		;4
			retlw   092h		;5
			retlw   082h		;6
			retlw   0F8h		;7
			retlw   080h		;8
			retlw   090h		;9
			retlw   088h		;A
			retlw   083h		;B
			retlw   0C6h		;C
			retlw   0A1h		; D
			retlw   086h		;E
			retlw   08Eh		;F		
;-------[Spozdeni generovane casovace bez preruseni]--------------
Tdelay
         movwf   Citac
Tdel0
         clrf    RTCC
         bcf     IntCon,RTIF
Tdel1 
         btfss   IntCon,RTIF 
         goto    Tdel1
         decfsz  Citac,1
         goto    Tdel0
         return
;-----------------------------------------------------------------
;	HLAVNI KOD PROGRAMU
;-----------------------------------------------------------------
Start
		   bsf	  RP0			;prepne na banku registru 1
			movlw	b'11000111'	;nastavi fosc/4 do RTCC, 111 = 1:256
			movwf	Option_reg	;presune do Option_reg
			clrf	 portB		;nastavi port pro vystup	
			bcf	  RP0			;prepne na banku registru 0
Opak	
			clrf	 Cislo		;nastavi pocatecni hodnotu cisla
Opak1
			movf	 Cislo,w		;prenos hodnoty v reg. Cislo -> w
			call	 Segment		;volani pro prevedeni cisla
			movwf	portB		;zobrazeni cisla na 7xSegment
			movlw	Krat		;nastaveni poctu cyklu
			call	 Tdelay		;volani spozdeni	
			incf	 Cislo,f		;inkrementace reg. Cislo o 1 
			movf	 Cislo,w		;predani hodnoty z reg. Cislo -> w
			movf	 portA,f		; nepouzivat pro testovani
;----------------------------------------------------------------
			subwf	portA		; result=f-w, jestlize &#40;result < 0&#41; pak Carry=0
			btfsc	Carry		; pokud je zaporne tak preskoci
			goto	 Opak1
			goto	 Opak		;pokud konec tak zpet do nuly
;-------&#91;Konec&#93;---------------------------------------------------
			end