Hallo zusammen, ich programmiere gerade den PIC18F2550 in Assembler und will damit eine 7 Segment Anzeige ansteuern. Ansich funktioniert das auch wunderbar, aber die Variable Seg7_0 inkrementiert immer nur von 0 bis 7 und resettet dann auf 0 zurück. Im Simulator klappt alles einwandfrei. Sie soll von 0 bis 9 laufen und dann auf 0 zurück. Ich habe schon etliche Threads zu Multiplexing und Tabellenzugriff gelesen aber komme einfach nicht weiter. Ich denke, dass es etwas ganz banales ist. Um die Anzeige jetzt erstmal zu testen, habe ich erst einmal nur eine Anzeige angesteuert. PORTA steht aber schon bereit. Bitte schaut mal rein! Danke. :) list p=18f2550 include "p18f2550.inc" CONFIG WDT=OFF; disable watchdog timer CONFIG MCLRE = ON; MCLEAR Pin on CONFIG DEBUG = OFF; Disable Debug Mode CONFIG LVP = OFF; Low-Voltage programming disabled CONFIG FOSC = INTOSCIO_EC;Internal oscillator, port function on RA6 CONFIG PBADEN = OFF seg7_0 EQU 0x20 seg7_1 EQU 0x21 seg7_2 EQU 0x22 seg7_3 EQU 0x23 tablepos EQU 0x24 ORG 0x00 GOTO main ORG 0x0008 BRA Intrpt Intrpt BCF INTCON,TMR0IF CLRF TMR0L CLRF TMR0H MOVLW 0x0A INCF seg7_0 CPFSEQ seg7_0 RETFIE CLRF seg7_0 RETFIE ;----------------------- main MOVLW 0xB2 ;500kHz clock MOVWF OSCCON CLRF seg7_0 CLRF seg7_1 CLRF seg7_2 CLRF seg7_3 ;Init Ports CLRF UCON CLRF LATB CLRF TRISB SETF LATB CLRF LATA MOVLW 0xF0 ;RA0-RA3 Output, RA4-RA7 Input MOVWF TRISA SETF LATA ;Init Timer 0 CLRF TMR0L CLRF TMR0H BCF T0CON,T08BIT BCF T0CON,T0CS BSF T0CON,PSA ;Init Timer 0 Interrupt BCF RCON,IPEN BSF INTCON,TMR0IE BCF INTCON,TMR0IF BSF INTCON, GIE BSF INTCON, PEIE BSF T0CON,TMR0ON ;Init Timer 2 ("Refresh Timer") MOVLW 0x06 MOVWF T2CON BCF PIR1, TMR2IF MOVLW 0xFF MOVWF PR2 ausgabe ;----------------------- warte0 BTFSS PIR1, TMR2IF BRA warte0 BCF PIR1, TMR2IF MOVF LATC, w MOVWF tablepos SETF LATA CALL ausgabePB MOVWF LATA ;RA0 low BRA ausgabe ;---Ausgabe der Zahk in tablepos auf 7Seg ausgabePB BCF INTCON,TMR0IE MOVLW LOW seg7 ADDWF tablepos, w MOVWF TBLPTRL, 0 MOVLW HIGH seg7 MOVWF TBLPTRH, 0 BTFSC STATUS, C INCF TBLPTRH MOVLW UPPER seg7 MOVWF TBLPTRU, 0 BTFSC STATUS, C INCF TBLPTRU TBLRD* MOVFF TABLAT, LATB BSF INTCON,TMR0IE RETURN ;Tabelle mit 7Segmentcodes Low-Aktiv ORG 0x90 seg7 DB 0x11, 0x9F DB 0x32, 0x16 DB 0x9C, 0x54 DB 0x50, 0x1F DB 0x10, 0x14 END
Sorry, der folgende Abschnitt enthält ein temporärer Test von mir, bei dem ich LATC als Variablenregister missbraucht habe. Soll natürlich so lauten: ;----------------------- warte0 BTFSS PIR1, TMR2IF BRA warte0 BCF PIR1, TMR2IF MOVF LATC, w MOVWF tablepos SETF LATA CALL ausgabePB MOVWF LATA ;RA0 low BRA ausgabe ;---Ausgabe der Zahk in tablepos auf 7Seg ----->>>> ;----------------------- warte0 BTFSS PIR1, TMR2IF BRA warte0 BCF PIR1, TMR2IF MOVF seg7_0, w MOVWF tablepos SETF LATA CALL ausgabePB MOVLW 0x0E MOVWF LATA ;RA0 low BRA ausgabe ;---Ausgabe der Zahk in tablepos auf 7Seg
JAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!! Der Brown Out Reset hatte eingesetzt, weil die Anzeige kurzzeitig zu viel Saft gezogen hatte. Meine Güte, ich dachte ich werd verrückt. Danke an alle, die noch vielleicht vor hatten mir zu helfen. ;) Grüße
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.