Hallo, ich habe ein mehr oder weniger großes Problem.
Ich bin dabei ein GLCD (mit T6963C) anzusteuern. Dazu verwende ich den oben genannten PIC, da es ein CAN Teilnehmer sein soll. Die Steuerleitungen sind an Port C angeschlossen und die Datenleitungen (D0...D7) sind nun RD0...RD7
um etwas zum display zu senden muss ich vorher den status abfragen. nun schon mein problem. hier mal alle benötigten auszüge aus meinem Quelltext:
Frage 1: ist das mit den Variablendeklarationen so richtig? (RES1)Code:LIST P=18F4685 ;directive to define processor #include <P18F4685.INC> ;processor specific variable definitions ;****************************************************************************** ;Configuration bits ; Oscillator Selection: CONFIG OSC=IRCIO7 ;intern CONFIG WDT=OFF ;no Watchdog CONFIG CP0=OFF ;code protect off CONFIG PBADEN=OFF ;Port A as I/O CONFIG LVP=OFF ;low voltage programming ;****************************************************************************** ;Variable definitions CBLOCK 0x080 WREG_TEMP ;variable used for context saving STATUS_TEMP ;variable used for context saving BSR_TEMP ;variable used for context saving ENDC CBLOCK 0x000 EXAMPLE ;example of a variable in access RAM ENDC UDATA_ACS r24 RES 1 ;8bit zwischenspeicher r25 RES 1 ;8bit zwischenspeicher r20 RES 1 ;8bit zwischenspeicher r21 RES 1 ;8bit zwischenspeicher r30 RES 1 ;8bit zwischenspeicher r31 RES 1 ;8bit zwischenspeicher
Hier die eigentlich wichtige Funktion, sie wird von Set_Display aufgerufen:Code:Init: bsf RCON, IPEN bsf INTCON, GIEH bsf INTCON, GIEL movlw 0x70 ; maximale interne Frequenz 8MHz setzen movwf OSCCON clrf WREG ; Akkumulator loeschen movwf TRISD ; PortD als Ausgang definieren movwf TRISC ; PortC als Ausgang definieren movwf TRISB ; PortB als Ausgang definieren rcall Set_Display rcall Clear_Text Main: ; *** main code goes here *** ORG 0x0100 rcall Init ;Initialisieren ................................
in dem Teil zwischen den "+++" geht es um das eigentliche Problem. Ich messe an RD0 und RD1 5V, aber an RB0 liegt keine Spannung an. Demzufolge hat auch "r25" den Inhalt 0x00 und die Statusabfrage läuft immer in Endlosschleife. Obwohl die richtigen Signale anliegen, es muss an der Pinabfrage liegen. Ich bin der Meinung ich habe an alles gedacht (TRISD auf FF, PORTD in WREG). Aber irgendwo muss ja ein fehler sein. Kann mir jemand helfen?Code:Gstatus_check: bsf PORTC,4 ; command movlw 0xFF ; make port an input movwf TRISD Gstatus_check1: bcf PORTC,2 ; RD low ;*#IF _XTAL>12000000 nop nop ;*#ENDIF bcf PORTC,3 ; Enable Chip nop nop nop ;*#IF _XTAL>12000000 nop nop nop ;*#ENDIF +++++++++++++++++++++++++++++++++++++ movf PORTD,0 ; get status movwf PORTB movwf r25 +++++++++++++++++++++++++++++++++++++ ;*#IF _XTAL>12000000 nop nop ;*#ENDIF bsf PORTC,2 ; end RD ;*#IF _XTAL>12000000 nop nop ;*#ENDIF bsf PORTC,3 ; disable chip movlw 0x03 andwf r25,1 ; Mask Bits CPFSEQ r25 ;*#IF _SIM=0 bra Gstatus_check1 ; not ready ;*#ENDIF clrf WREG ; Akkumulator loeschen clrf TRISD ; make output port return







Zitieren


Lesezeichen