Hey @ all ich bin neu in der Microcontollertechnik und habe ein Problem mit dem Programmieren. Zum Programmieren benutze ich Parsic. Ich wollte zum Test eine Wendeschütz-schaltung auf meinen PIC ziehen um erst mal zu testen wie das ganze läuft. Doch nachdem ich das Prog auf meinen PIC geladen habe und dies testen wollte lief nichts. Ich habe auf die Eingänge RA0,RA1 und RA2 5V angelegt und an die Ausgänge RB0 und RB1 lötete ich LED´s, doch nichts lief. Ich habe erst gedacht das es ein hardware fehler war und ladete ein fertiges prog von sprut auf meinen PIC und es stellte sich heraus das alles stimmt. Nun denke ich das es ein software fehler ist. Hier ist das Programm: ; Source created with Parsic Version 3.x ; at : 28.03.2010 16:47:49 ; Project File : C:\Dokumente und Einstellungen\wende\wende.pic ; Project Version : 1.0.5 ; Created : 07.07.2000 04:14:00 ; Last change : 28.03.2010 16:47:44 PROCESSOR 16F84A INCLUDE P16F84A.INC RADIX DEC __IDLOCS H'0100' __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ; Diverses ZERO EQU Z ; ZERO-Flag CARRY EQU C ; CARRY-Flag ; Variable S0 = 12 ; located in Bank 0, 1 RAM = 13 ; located in Bank 0, 1 ERRORLEVEL -302 ; disable warning (Bankswitching) ERRORLEVEL -306 ; disable warning (Pageswitching) ;**************************************** ;Programmanfang ;**************************************** ORG 0 CLRF STATUS ; switch to RAM-Bank 0 GOTO SYS_INIT NOP NOP RETURN ;**************************************** ; Subroutines ;**************************************** ;**************************************** ;Initialisierung ;**************************************** SYS_INIT MOVLW B'00000000' MOVWF INTCON ; Set output before direction BSF STATUS,RP0 ; Bank 1 MOVLW B'00000000' MOVWF PORTA MOVLW B'00000000' MOVWF PORTB MOVLW 143 BSF STATUS,RP0 ; Bank 1 MOVWF OPTION_REG ; Richtung setzen MOVLW B'11111111' MOVWF TRISA MOVLW B'11111100' MOVWF TRISB ; init vars ; Clear RAM MOVLW 12 MOVWF FSR CR1 CLRF INDF INCF FSR,F MOVFW FSR SUBLW 80 BTFSS STATUS,ZERO GOTO CR1 ;********************************** ;******* Haupt-Programm *********** ;********************************** MAIN ;*************************************************** ; UND - Gatter -> LG1 ;*************************************************** LABEL_LG1_1 BTFSS S0,0 GOTO LABEL_LG1_FALSE LABEL_LG1_2 BSF STATUS,RP0 ; Bank 1 BTFSC PORTB,1 GOTO LABEL_LG1_FALSE LABEL_LG1_TRUE BSF STATUS,RP0 ; Bank 1 BSF PORTB,0 GOTO LABEL_LG1_ENDE LABEL_LG1_FALSE BSF STATUS,RP0 ; Bank 1 BCF PORTB,0 LABEL_LG1_ENDE ;*************************************************** ; UND - Gatter -> LG2 ;*************************************************** LABEL_LG2_1 BSF STATUS,RP0 ; Bank 1 BTFSC PORTB,0 GOTO LABEL_LG2_FALSE LABEL_LG2_2 BTFSS S0,1 GOTO LABEL_LG2_FALSE LABEL_LG2_TRUE BSF STATUS,RP0 ; Bank 1 BSF PORTB,1 GOTO LABEL_LG2_ENDE LABEL_LG2_FALSE BSF STATUS,RP0 ; Bank 1 BCF PORTB,1 LABEL_LG2_ENDE ;*************************************************** ; RS-FLIP-FLOP -> RS1 ;*************************************************** BSF STATUS,RP0 ; Bank 1 BTFSC PORTA,0 GOTO LABEL_RS1_RESET BSF STATUS,RP0 ; Bank 1 BTFSS PORTA,1 GOTO LABEL_RS1_ENDE BSF S0,0 ; Ausgang setzen GOTO LABEL_RS1_ENDE LABEL_RS1_RESET BCF S0,0 ; Ausgang zurücksetzen LABEL_RS1_ENDE ;*************************************************** ; RS-FLIP-FLOP -> RS2 ;*************************************************** BSF STATUS,RP0 ; Bank 1 BTFSC PORTA,0 GOTO LABEL_RS2_RESET BSF STATUS,RP0 ; Bank 1 BTFSS PORTA,2 GOTO LABEL_RS2_ENDE BSF S0,1 ; Ausgang setzen GOTO LABEL_RS2_ENDE LABEL_RS2_RESET BCF S0,1 ; Ausgang zurücksetzen LABEL_RS2_ENDE ;**************************************** GOTO MAIN END Ich hoffe Ihr könntet mir helfen den Fehler zu suchen. Vieleich kennt sich jemand mit Parsic gut aus und könnte mir sagen was ich falsch gemacht habe. Vielen Dank im Vorraus Mfg Veterano
Bei mir ist das Assembler und nicht Parsic... Du schaltest immer auf Bank1 und sprichst dann die PORT-Register an. Die liegen aber in Bank0. Weiter habe ich erst mal nicht gelesen... Gruß Sven
Danke erstmal das du dir mein Assembler duchgelesen hast, dies ist der Assembler der mir Parsic generiert hat. In meinen beigefügten Bildern ist mein Programm von Parsic dabei. Mfg Veterano
Es wird nirgendwo auf Bank 0 geswitcht, mit Ausnahme des Programmanfangs, wo das STATUS_Register gecleared wird (was eine sehr ungewöhnlich Massnahme zum Bank-Switching ist, es muss nämlich nur 1 Bit geswitcht werden). Also gibt es nirgendwo Zugriffe auf die Ports. Da macht Parsic wohl Mist.
Ok, kennt sich jemand vill mit Parsic aus und kann mir sagen wie ich es richtig programmieren kann oder ob ich irgendeine einstellung falsch getroffen habe. Mfg Veterano
Alle Stellen mit BSF STATUS,RP0 im Hauptprogramm auskommentieren und dafür BCF STATUS,RP0 in Main einfügen und es sollte funktioneren. ;********************************** ;******* Haupt-Programm *********** ;********************************** MAIN BCF STATUS,RP0 ;*************************************************** ; UND - Gatter -> LG1 ;*************************************************** LABEL_LG1_1 BTFSS S0,0 GOTO LABEL_LG1_FALSE LABEL_LG1_2 ;BSF STATUS,RP0 ; Bank 1 BTFSC PORTB,1 GOTO LABEL_LG1_FALSE LABEL_LG1_TRUE ; BSF STATUS,RP0 ; Bank 1 BSF PORTB,0 GOTO LABEL_LG1_ENDE LABEL_LG1_FALSE ; BSF STATUS,RP0 ; Bank 1 BCF PORTB,0 LABEL_LG1_ENDE ;*************************************************** ; UND - Gatter -> LG2 ;*************************************************** LABEL_LG2_1 ; BSF STATUS,RP0 ; Bank 1 BTFSC PORTB,0 GOTO LABEL_LG2_FALSE LABEL_LG2_2 BTFSS S0,1 GOTO LABEL_LG2_FALSE LABEL_LG2_TRUE ;BSF STATUS,RP0 ; Bank 1 BSF PORTB,1 GOTO LABEL_LG2_ENDE LABEL_LG2_FALSE ;BSF STATUS,RP0 ; Bank 1 BCF PORTB,1 LABEL_LG2_ENDE ;*************************************************** ; RS-FLIP-FLOP -> RS1 ;*************************************************** ;BSF STATUS,RP0 ; Bank 1 BTFSC PORTA,0 GOTO LABEL_RS1_RESET ;BSF STATUS,RP0 ; Bank 1 BTFSS PORTA,1 GOTO LABEL_RS1_ENDE BSF S0,0 ; Ausgang setzen GOTO LABEL_RS1_ENDE LABEL_RS1_RESET BCF S0,0 ; Ausgang zurücksetzen LABEL_RS1_ENDE ;*************************************************** ; RS-FLIP-FLOP -> RS2 ;*************************************************** ;BSF STATUS,RP0 ; Bank 1 BTFSC PORTA,0 GOTO LABEL_RS2_RESET ; BSF STATUS,RP0 ; Bank 1 BTFSS PORTA,2 GOTO LABEL_RS2_ENDE BSF S0,1 ; Ausgang setzen GOTO LABEL_RS2_ENDE LABEL_RS2_RESET BCF S0,1 ; Ausgang zurücksetzen LABEL_RS2_ENDE ;**************************************** GOTO MAIN END
Veterano S. schrieb:
> Hat sonst keiner Erfahrung mit diesem Programm?
Ich habe damit vor einigen Jahren auch gearbeitet.
Hast Du in Parsic die Eingänge bzw. Ausgänge auch definiert?
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.