E
engineer123
Guest
Tjena grabbar,
Jag försöker enkelt program som visas nedan: men det fungerar inte för andra styrekonomer det fungerar bra (t.ex. [IC16F87X familj) Jag skulle vilja veta var finns problemet där är fel, jag gjorde som det faktablad exakt men det verkar som om jag missat något, då är det fel
#
include <p18F4550.inc>
CONFIG WDT = OFF, inaktivera watchdog timer
CONFIG MCLRE = ON; MCLEAR Pin på
CONFIG RÄTTA = ON Enable Debug Mode
CONFIG LVP = OFF; lågspänningssystem programmering funktionshindrade (nödvändigt för felsökning)
CONFIG FOSC = INTOSCIO_EC, inre oscillator, port funktionen RA6
;************************************************* *********
; Start av körbar kod
org 0x000; Återställ vektor
NOP
goto Main
;************************************************* *********
; Interrupt vector
org 0x008; avbryta vektor
goto IntService
;************************************************* *********
; Main program
Huvudsaklig
samtal Initial; Initialisera allt
MainLoop
goto MainLoop, Infinite loop
;************************************************* *********
; Initial rutinanrop
Initial
movlw D'64 '; Detta sätter baudtalet till 19200
banksel SPBRG, förutsatt BRGH = 1 och Fosc = 20 MHz
movwf SPBRG
banksel RCSTA; Aktivera serieporten
bSF RCSTA, SPENbanksel TXSTA
BCF TXSTA, SYNC, Ställ in port för asynkron drift
bSF TXSTA, BRGH; High baudtal
banksel BAUDCON
BCF BAUDCON, BRG16
banksel PIE1; Aktivera serieporten Reception Interrupt
bSF PIE1, RCIE
banksel INTCON; Aktivera globala och perifera avbryter
bSF INTCON, GIE
bSF INTCON, PEIE
banksel RCSTA; Aktivera serieporten mottagning
bSF RCSTA, CREN
banksel TRISC; Ställ PortC bitar 0, 1 och 2 som resultat
bSF TRISC, 7, Set RC7/RX som input pin
banksel TRISD; Ställ PortC bitar 0, 1 och 2 som resultat
BCF TRISD, 0
BCF TRISD, 1
BCF TRISD, 2banksel PORTD, Clear PortC bitar 0, 1 och 2
BCF PORTD, 0
BCF PORTD, 1
BCF PORTD, 2
återgå
;************************************************* *********
; Interrupt Service Routine
; Denna rutin kallas när vi får ett avbrott.
IntService
push
btfsc PIR1, RCIF; Kontrollera om en seriell port Reception avbryta
samtal Ta emot
pop
retfie
;************************************************* *********
; Få rutinanrop
; Denna rutin kallas whenver vi får en serieport Reception avbryta.
Ta emot
movf RCREG, W
sublw D'79 '; Kontrollera om en "0" mottogs
btfsc STATUS, Z
goto LED0
movf RCREG, W
sublw D'87 '; Kontrollera om en "1" mottogs
btfsc STATUS, Z
goto LED1
movf RCREG, W
sublw D'82 '; Kontrollera om en "2" mottogs
btfsc STATUS, Z
goto LED2
movf RCREG, W
sublw D'88 '; Kontrollera om ett "X" mottogs
btfsc STATUS, Z
goto LEDOff
återgå
LED0; Sätt på RC0
bSF PORTD, 0
BCF PORTD, 1
BCF PORTD, 2
återgå
LED1; Sätt på RC1
BCF PORTD, 0
bSF PORTD, 1
BCF PORTD, 2
återgå
LED2; Sätt på RC2
BCF PORTD, 0
BCF PORTD, 1
bSF PORTD, 2
återgå
LEDOff; Stäng RC0, RC1 och RC2
BCF PORTD, 0
BCF PORTD, 1
BCF PORTD, 2
återgå
slut
Jag försöker enkelt program som visas nedan: men det fungerar inte för andra styrekonomer det fungerar bra (t.ex. [IC16F87X familj) Jag skulle vilja veta var finns problemet där är fel, jag gjorde som det faktablad exakt men det verkar som om jag missat något, då är det fel
#
include <p18F4550.inc>
CONFIG WDT = OFF, inaktivera watchdog timer
CONFIG MCLRE = ON; MCLEAR Pin på
CONFIG RÄTTA = ON Enable Debug Mode
CONFIG LVP = OFF; lågspänningssystem programmering funktionshindrade (nödvändigt för felsökning)
CONFIG FOSC = INTOSCIO_EC, inre oscillator, port funktionen RA6
;************************************************* *********
; Start av körbar kod
org 0x000; Återställ vektor
NOP
goto Main
;************************************************* *********
; Interrupt vector
org 0x008; avbryta vektor
goto IntService
;************************************************* *********
; Main program
Huvudsaklig
samtal Initial; Initialisera allt
MainLoop
goto MainLoop, Infinite loop
;************************************************* *********
; Initial rutinanrop
Initial
movlw D'64 '; Detta sätter baudtalet till 19200
banksel SPBRG, förutsatt BRGH = 1 och Fosc = 20 MHz
movwf SPBRG
banksel RCSTA; Aktivera serieporten
bSF RCSTA, SPENbanksel TXSTA
BCF TXSTA, SYNC, Ställ in port för asynkron drift
bSF TXSTA, BRGH; High baudtal
banksel BAUDCON
BCF BAUDCON, BRG16
banksel PIE1; Aktivera serieporten Reception Interrupt
bSF PIE1, RCIE
banksel INTCON; Aktivera globala och perifera avbryter
bSF INTCON, GIE
bSF INTCON, PEIE
banksel RCSTA; Aktivera serieporten mottagning
bSF RCSTA, CREN
banksel TRISC; Ställ PortC bitar 0, 1 och 2 som resultat
bSF TRISC, 7, Set RC7/RX som input pin
banksel TRISD; Ställ PortC bitar 0, 1 och 2 som resultat
BCF TRISD, 0
BCF TRISD, 1
BCF TRISD, 2banksel PORTD, Clear PortC bitar 0, 1 och 2
BCF PORTD, 0
BCF PORTD, 1
BCF PORTD, 2
återgå
;************************************************* *********
; Interrupt Service Routine
; Denna rutin kallas när vi får ett avbrott.
IntService
push
btfsc PIR1, RCIF; Kontrollera om en seriell port Reception avbryta
samtal Ta emot
pop
retfie
;************************************************* *********
; Få rutinanrop
; Denna rutin kallas whenver vi får en serieport Reception avbryta.
Ta emot
movf RCREG, W
sublw D'79 '; Kontrollera om en "0" mottogs
btfsc STATUS, Z
goto LED0
movf RCREG, W
sublw D'87 '; Kontrollera om en "1" mottogs
btfsc STATUS, Z
goto LED1
movf RCREG, W
sublw D'82 '; Kontrollera om en "2" mottogs
btfsc STATUS, Z
goto LED2
movf RCREG, W
sublw D'88 '; Kontrollera om ett "X" mottogs
btfsc STATUS, Z
goto LEDOff
återgå
LED0; Sätt på RC0
bSF PORTD, 0
BCF PORTD, 1
BCF PORTD, 2
återgå
LED1; Sätt på RC1
BCF PORTD, 0
bSF PORTD, 1
BCF PORTD, 2
återgå
LED2; Sätt på RC2
BCF PORTD, 0
BCF PORTD, 1
bSF PORTD, 2
återgå
LEDOff; Stäng RC0, RC1 och RC2
BCF PORTD, 0
BCF PORTD, 1
BCF PORTD, 2
återgå
slut