K
kotsam
Guest
Hi All,
Ich habe worte Code unten gezeigt, ist dieser Code comapring zwischen den zu den Registern, RAM0 und ADC1 wie in den Code unten, das Problem ist in diesem Code, wenn
ich schreiben Wert dieser Register, ohne mit RCREG, nur bewegen varibales zu sie vergleichen die Funktion funktioniert gut, aber wenn
ich versuche, RS232 zu Wirte in den RAM-Standort (RAM0 zum Beispiel) die comapring ist nicht wie erwartet funktioniert, bedeutet dies,
dass das Problem der RAM0 hat den eingegebenen Wert, dh, was ich habe ich übertragen Sie den Wert auf die TXREG, um zu sehen, wenn
ich richtig schreiben, und was ich feststellen, dass ich merkwürdige Signale (zum Beispiel, wenn
ich zu schreiben ram0 5 i wieder (!@#$%), sondern auf der andere hatte, wenn ich die Schleife Transfer Betrieb bekomme ich den korrekten Wert,
kann jemand bitte helfen Sie mir ich habe mehr als eine Woche versucht, um herauszufinden, wo ist das Problem, und ich konnte es;Code:
# include <p18F4550.inc>CONFIG WDT = OFF; deaktivieren Watchdog-Timer
CONFIG MCLRE = ON; keine MCLR
CONFIG DEBUG = ON; Debug-Modus deaktivieren
CONFIG LVP = OFF; Low-Voltage Programmierung deaktiviert (notwendig für die Fehlersuche)
CONFIG FOSC = HS; für 20MHzDelay1 res 1; Reserve 1 Byte für die Variable Delay1
Delay2 res 1; Reserve 1 Byte für die Variable Delay2
;************************************************* *********
; Start der ausführbaren Codeorg 0x000; Reset Vektor
nop
goto Main;************************************************* *********
, Interrupt-Vektororg 0x008; Interrupt-Vektor
goto IntService;************************************************* *********
; HauptprogrammHauptsächlich
Erste Aufforderung; Initialisieren allesMainLoop
goto MainLoop; Endlosschleife;************************************************* *********
; Erste RoutineErste
CLRF RAM0
Movl W 0x0F
MOVWF ADCON1; alle digitalen I / O
MOVLW 0x07
MOVWF CMCON; alle digitalen I / OCLRF LATB
CLRF TRISB; alle PORTB Ausgang 0
CLRF LATD
CLRF TRISD; alle PORTB Ausgang 0movlw ,129;
movwf SPBRGBSF BAUDCON, BRG16
bcf TXSTA, SYNCBSF TXSTA, TXEN; Aktivieren Sie übermitteln
bcf TXSTA, BRGH; Wählen Sie hohe BaudrateBSF RCSTA, SPEN; Enable Serial Port
BSF RCSTA, CREN; Aktivieren kontinuierlichen Empfangbcf PIR1, RCIF; Frei RCIF Interrupt Flag
BSF PIE1, RCIE; Set RCIE Interrupt Enable
BSF INTCON, PEIE; Aktivieren peripheren Interrupts
BSF INTCON, GIE; Aktivieren globalen Interrupts; BSF TRISC, 7; Set RC7/RX als Eingangspin
movlw b'10101111 "
movwf TRISC
CALL CompareFuncionLOOP
zurück;************************************************* *********
, Interrupt Service Routine
; Diese Routine wird aufgerufen, wenn wir einen Interrupt.IntService
btfsc PIR1, RCIF; Check für eine serielle Schnittstelle Empfang Interrupt
Anruf empfangen
retfie;************************************************* *********
; Empfangen Routine
; Diese Routine wird whenver wir eine serielle Schnittstelle Empfang unterbrechen.
Erhalten:
; diese indirekte Adressierung
; Prozess Daten wollte RAM Lage, durch Schreiben an die Daten und die Adresse
movf RCREG, W;
movwf FSR0L, hier ist die Auswahl der Adresse,, Ich weiß, es sollte aber seine FSR0H nicht erforderlich, für diesen Test
movf RCREG, W;
movwf INDF0; Schreiben in der ausgewählten Adresse
RETURNCompareFuncion:CALL SAVEINTORAM; die Ram-Wert ist hier das Problem, dass die RAM-Wert der recvied hier nicht als der eingegebene Wert
MOVLW D'51 ', aber in der anderen Hand, wenn ich nicht zu schreiben RAM0 wie ich für ADC1 es funktioniert gut, nur wenn ich den Wert durch RCREG macht Probleme
MOVWF ADC1; setzen d'51 'in adc1
; MOVF ADC1, W;
SUBWF RAM0; ADC1-RAM0 = 0
BTFSC STATUS, Z
GOTO CompareFuncion; ja wiederholen
GOTO CHECKNEG, keineCHECKNEG
CLRF ADC1
MOVF ADC1, W
SUBWF RAM0; ADC1-RAM0 = negative
BTFSC Status, N
GOTO PoTDownAN0
GOTO PotUPAN0PoTDownAN0:; MOVE POT Festlegung
BSF PORTB, 5; / CS
NOP
BSF PORTB, 4; / UD
NOP
bcf PORTB, 5; / CS
NOP
bcf PORTB, 4; / UD
NOP
BSF PORTB, 4; / UD
BSF PORTB, 5; / CS
GOTO CompareFuncion
PotUPAN0:; MOVE POT bis
BSF PORTB, 5; / CS
NOP
bcf PORTB, 4; / UD
NOP
bcf PORTB, 5; / CS
NOP
BSF PORTB, 4; / UD
NOP
bcf PORTB, 4; / UD
BSF PORTB, 5; / CS
GOTO CompareFuncion
SAVEINTORAM:
MOVF RAM0, W
MOVWF TXREG, ich bin Lesen Sie den Wert, um sicherzustellen, dass die ich geschrieben habe, in die sie correclty aber, bekomme ich komische Signal (wenn ich schreibe, zum Beispiel 5,
, i get (! @ haohuege (Geräusche)), aber ich loop; GOTO SAVEINTORAM wie ich den korrekten Wert, aber die Endlosschleife;RETURN
Ende
Ich habe worte Code unten gezeigt, ist dieser Code comapring zwischen den zu den Registern, RAM0 und ADC1 wie in den Code unten, das Problem ist in diesem Code, wenn
ich schreiben Wert dieser Register, ohne mit RCREG, nur bewegen varibales zu sie vergleichen die Funktion funktioniert gut, aber wenn
ich versuche, RS232 zu Wirte in den RAM-Standort (RAM0 zum Beispiel) die comapring ist nicht wie erwartet funktioniert, bedeutet dies,
dass das Problem der RAM0 hat den eingegebenen Wert, dh, was ich habe ich übertragen Sie den Wert auf die TXREG, um zu sehen, wenn
ich richtig schreiben, und was ich feststellen, dass ich merkwürdige Signale (zum Beispiel, wenn
ich zu schreiben ram0 5 i wieder (!@#$%), sondern auf der andere hatte, wenn ich die Schleife Transfer Betrieb bekomme ich den korrekten Wert,
kann jemand bitte helfen Sie mir ich habe mehr als eine Woche versucht, um herauszufinden, wo ist das Problem, und ich konnte es;Code:
# include <p18F4550.inc>CONFIG WDT = OFF; deaktivieren Watchdog-Timer
CONFIG MCLRE = ON; keine MCLR
CONFIG DEBUG = ON; Debug-Modus deaktivieren
CONFIG LVP = OFF; Low-Voltage Programmierung deaktiviert (notwendig für die Fehlersuche)
CONFIG FOSC = HS; für 20MHzDelay1 res 1; Reserve 1 Byte für die Variable Delay1
Delay2 res 1; Reserve 1 Byte für die Variable Delay2
;************************************************* *********
; Start der ausführbaren Codeorg 0x000; Reset Vektor
nop
goto Main;************************************************* *********
, Interrupt-Vektororg 0x008; Interrupt-Vektor
goto IntService;************************************************* *********
; HauptprogrammHauptsächlich
Erste Aufforderung; Initialisieren allesMainLoop
goto MainLoop; Endlosschleife;************************************************* *********
; Erste RoutineErste
CLRF RAM0
Movl W 0x0F
MOVWF ADCON1; alle digitalen I / O
MOVLW 0x07
MOVWF CMCON; alle digitalen I / OCLRF LATB
CLRF TRISB; alle PORTB Ausgang 0
CLRF LATD
CLRF TRISD; alle PORTB Ausgang 0movlw ,129;
movwf SPBRGBSF BAUDCON, BRG16
bcf TXSTA, SYNCBSF TXSTA, TXEN; Aktivieren Sie übermitteln
bcf TXSTA, BRGH; Wählen Sie hohe BaudrateBSF RCSTA, SPEN; Enable Serial Port
BSF RCSTA, CREN; Aktivieren kontinuierlichen Empfangbcf PIR1, RCIF; Frei RCIF Interrupt Flag
BSF PIE1, RCIE; Set RCIE Interrupt Enable
BSF INTCON, PEIE; Aktivieren peripheren Interrupts
BSF INTCON, GIE; Aktivieren globalen Interrupts; BSF TRISC, 7; Set RC7/RX als Eingangspin
movlw b'10101111 "
movwf TRISC
CALL CompareFuncionLOOP
zurück;************************************************* *********
, Interrupt Service Routine
; Diese Routine wird aufgerufen, wenn wir einen Interrupt.IntService
btfsc PIR1, RCIF; Check für eine serielle Schnittstelle Empfang Interrupt
Anruf empfangen
retfie;************************************************* *********
; Empfangen Routine
; Diese Routine wird whenver wir eine serielle Schnittstelle Empfang unterbrechen.
Erhalten:
; diese indirekte Adressierung
; Prozess Daten wollte RAM Lage, durch Schreiben an die Daten und die Adresse
movf RCREG, W;
movwf FSR0L, hier ist die Auswahl der Adresse,, Ich weiß, es sollte aber seine FSR0H nicht erforderlich, für diesen Test
movf RCREG, W;
movwf INDF0; Schreiben in der ausgewählten Adresse
RETURNCompareFuncion:CALL SAVEINTORAM; die Ram-Wert ist hier das Problem, dass die RAM-Wert der recvied hier nicht als der eingegebene Wert
MOVLW D'51 ', aber in der anderen Hand, wenn ich nicht zu schreiben RAM0 wie ich für ADC1 es funktioniert gut, nur wenn ich den Wert durch RCREG macht Probleme
MOVWF ADC1; setzen d'51 'in adc1
; MOVF ADC1, W;
SUBWF RAM0; ADC1-RAM0 = 0
BTFSC STATUS, Z
GOTO CompareFuncion; ja wiederholen
GOTO CHECKNEG, keineCHECKNEG
CLRF ADC1
MOVF ADC1, W
SUBWF RAM0; ADC1-RAM0 = negative
BTFSC Status, N
GOTO PoTDownAN0
GOTO PotUPAN0PoTDownAN0:; MOVE POT Festlegung
BSF PORTB, 5; / CS
NOP
BSF PORTB, 4; / UD
NOP
bcf PORTB, 5; / CS
NOP
bcf PORTB, 4; / UD
NOP
BSF PORTB, 4; / UD
BSF PORTB, 5; / CS
GOTO CompareFuncion
PotUPAN0:; MOVE POT bis
BSF PORTB, 5; / CS
NOP
bcf PORTB, 4; / UD
NOP
bcf PORTB, 5; / CS
NOP
BSF PORTB, 4; / UD
NOP
bcf PORTB, 4; / UD
BSF PORTB, 5; / CS
GOTO CompareFuncion
SAVEINTORAM:
MOVF RAM0, W
MOVWF TXREG, ich bin Lesen Sie den Wert, um sicherzustellen, dass die ich geschrieben habe, in die sie correclty aber, bekomme ich komische Signal (wenn ich schreibe, zum Beispiel 5,
, i get (! @ haohuege (Geräusche)), aber ich loop; GOTO SAVEINTORAM wie ich den korrekten Wert, aber die Endlosschleife;RETURN
Ende