Ich habe einige Probleme mit dem, was ich für guten Code halte. Dies ist für eine Uni-Aufgabe, aber das ist nicht der Code, den ich einreiche. Dies ist eine Testdatei, um zu verstehen, wie alles funktioniert. Ein Teil dieses Codes wurde in der Aufgabe angegeben: die snum- und binären Abschnitte.
Ich muss jede Zahl nacheinander in snum erhalten und die entsprechende Binärzahl einige Sekunden lang auf einem 7-Segment anzeigen. Es läuft im Debugger bis 'Call Binary', dann springt es wieder auf Start (danach Instructino).
Ich weiß nicht, was ich falsch mache. Irgendwelche Ideen?
; Directive sets processor type .............................
list p=16F84A
#include "P16F84A.INC"
; Set configuration fuses ...................................
__CONFIG _CP_OFF & _WDT_OFF &_PWRTE_ON & _RC_OSC
; Code protection off, watchdog timer off, power up timer on, RC Clock
errorlevel -302 ;No warnings, register not in Bank 0
PCL EQU 02 ; Program Counter Low
PORTB EQU 06 ; Port B Data Register
TRISB EQU 86 ; Port B Data direction register
STATUS EQU 03 ; Status register
RP0 EQU 05 ; Bank select bit
timer EQU 0C ; GPR1 used as delay counter
point EQU 0D ; GPR2 used as table pointer
org 000
goto start
snum addwf PCL,F
dt "0001035020" ;Substitute your student number
;(10 ASCII digits)
; Pattern table for seven segment display on Port B ..
binary addwf PCL,F
retlw b'00111111' ;Set display to 0
retlw b'00000110' ;Set display to 1
retlw b'01011011' ;Set display to 2
retlw b'01001111' ;Set display to 3
retlw b'01100110' ;Set display to 4
retlw b'01101101' ;Set display to 5
retlw b'01111111' ;Set display to 6
retlw b'00000111' ;Set display to 7
retlw b'01111111' ;Set display to 8
retlw b'01101111' ;Set display to 9
; Initialise Port B (Port A defaults to inputs)........
start bcf STATUS,RP0 ;Bank select 0
clrf PORTB ;Clear Port B data latches
bsf STATUS,RP0 ;Bank select 1
movlw 0x00 ;
movwf TRISB ;Set port B lines to output
bcf STATUS,RP0 ;Bank select 0
; MAIN LOOP
nextdigit movlw d'10'
subwf point,W
btfsc 3,2
goto nextdigit
movf point,W
call snum
call binary
movwf PORTB
NOP
NOP
incf point
goto nextdigit
end
Sie initialisieren das Register nicht point
. Das bedeutet, dass es jeden Wert halten kann , wenn Sie mit dem Schleifen der nextdigit
Schleife beginnen! Versuchen Sie, ein clrf point
unter dem start
Etikett hinzuzufügen.
Zum Debuggen: In MPLAB -> Ansicht -> Dateiregister können Sie den Wert von point
während der Laufzeit sehen.
Benutzer17592
btfsc 3,2
) zu verwenden, würde ich Ihnen empfehlen, die Registernamen (btfsc STATUS, Z
) für die Lesbarkeit zu verwenden.Leon Heller
Ashley Hughes
Olin Lathrop