som hittar fel

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

 
Den 18F inte behöver banksel kommandot
har du bara flyttat dina 16F nummer till 18F, det 18F har en ESUART och fungerar lite annorlunda den 16F USART

 
Hallå,
Jag vet att det är skillnad mellan USART 18F och 16F, jag har märkt det och koden som jag postat är 18F, jag har raderat banksel även jag tycker att det brukar göra skillnad om den inte behöver det kommandot, men fortfarande inte fungerar

 

Welcome to EDABoard.com

Sponsor

Back
Top