Ik ben een beginner met de pic.
Nu heb ik een stukje gemaakt waarmee ik met 2 knoppen
op of af kan tellen. De waarde komt op een 7segment display. 0 tot F. Het werk eindelijk goed.
code:
include "P16F84a.inc"
cntr1 Equ 21
cntr2 Equ 22
value Equ 23
org 00h
bsf STATUS, RP0 ;select bank 1
movlw b'11111' ;set PortA 5 inputs
movwf TRISA
movlw b'00000000'
movwf TRISB
bcf STATUS, RP0 ;select bank 0
call resetvalue
; main loop
main btfss PORTA,0 ; Check SW1
goto add
btfss PORTA,1 ;Check SW2
goto sub
goto main
segment addwf PCL,f ; add offset to pcl to generate a computed goto
retlw b'00000011' ; Number 0
retlw b'10011111' ; Number 1
retlw b'00100101' ; Number 2
retlw b'00001101' ; Number 3
retlw b'10011001' ; Number 4
retlw b'01001001' ; Number 5
retlw b'01000001' ; Number 6
retlw b'00011111' ; Number 7
retlw b'00000001' ; Number 8
retlw b'00001001' ; Number 9
retlw b'00010001' ; Character A
retlw b'11000001' ; Character B
retlw b'01100011' ; Character C
retlw b'10000101' ; Character D
retlw b'01100001' ; Character E
retlw b'01110001' ; Character F
; add
add incf value, f ; Add 1 to PORTB.
call outputvalue ;naar outp.
add2 call delay ; 10 millieseconden wachten
btfss PORTA,0 ;SW1 checken,laag->main
goto add2
goto main
; sub
sub decf value, f
call outputvalue
sub2 call delay
btfss PORTA,1
goto sub2
goto main
resetvalue
clrf value
outputvalue
movf value, w ; put value into w
andlw 0x0F ; limit the value to max 15.
call segment ; haal waarde uit segment
movwf PORTB ; verplaats naar PORTB
return
; Delay routine
delay movlw 0x0D
movwf cntr2
delay1 movlw 0xff
movwf cntr1
delay2 decfsz cntr1, f
goto delay2
decfsz cntr2, f
goto delay1
return
END
Nu de vraag.
In het stukje Outputvalue wordt het W-regiter beperkt tot 15, maar als ik het verander tot 9 slaat de pic nummers over.
Hoe moet ik dit dan beperken?