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

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 (result < 0) pak Carry=0
btfsc Carry ; pokud je zaporne tak preskoci
goto Opak1
goto Opak ;pokud konec tak zpet do nuly
;-------[Konec]---------------------------------------------------
end