Hejsa
Jeg er ved at forsøge mig med PIC18 i forbindelse med et projekt. Jeg har besluttet først at wrappe et minimum af forbindelser op, så jeg blot ved at der er hul igennem.
til dette formål har jeg lavet diagrammet:
Dette er wrappet op, og RS232 forbindelsen testet, ved at kortslutte de to ben der går til CPU Jeg har undladet at implementere reset knappen endnu, og blot hevet ben
1 høj, vha en 1kohm modstand.Min kildekode til PIC'en ser således ud:
----------------------------------------------------------------------------------------- list p=PIC18F458 ; set processor type list n=0 ; supress page breaks in list file include
CONFIG OSC = EC CONFIG PWRT = ON ; Extern OSC og Power up timer CONFIG WDT = OFF ; ;************************************************************ ; Reset and Interrupt Vectors
org 00000h ; Reset Vector goto Start
org 00008h ; Interrupt vector goto IntVector
;************************************************************ ; Program begins here
org 00020h ; Beginning of program EPROM Start clrf LATB ; Clear PORTB output latches clrf TRISB ; Config PORTB as all outputs bcf TRISC,6 ; Make RC6 an output
movlw 81h ; 19200 baud @ 10MHz movwf SPBRG ; Flyt X til Baud Rate Generator Register bsf TXSTA,SYNC ; Synkron overførsel bsf TXSTA,CSRC ; bsf TXSTA,TXEN ; Enable transmit bcf TXSTA,BRGH ; Select low baud rate bsf RCSTA,SPEN ; Enable Serial Port bsf RCSTA,CREN ; Enable continuous reception
bcf PIR1,RCIF ; Clear RCIF Interrupt Flag bsf PIE1,RCIE ; Set RCIE Interrupt Enable bsf INTCON,PEIE ; Enable peripheral interrupts bsf INTCON,GIE ; Enable global interrupts
;************************************************************ ; Main loop
Main movlw 48h ; H call Transmit ; movlw 45h ; E call Transmit ; movlw 4ch ; L call Transmit ; movlw 4ch ; L call Transmit ; movlw 4fh ; O call Transmit ; movlw 20h ; call Transmit ; movlw 57h ; W call Transmit ; movlw 4fh ; O call Transmit ; movlw 52h ; R call Transmit ; movlw 4ch ; L call Transmit ; movlw 44h ; D call Transmit ;
Loop goto Loop ; loop to self doing nothing
;************************************************************ ; Transmit Character routine Transmit btfss TXSTA,TRMT ; Er Transmit buffer fuld ? goto Transmit ; Hvis fuld, test igen
goto Sendchar ; Hvis tom, hop til næste rutine Sendchar movwf TXREG ; Flyt fra WREG register til transmit register
return ;************************************************************ ; Interrupt Service Routine
IntVector ; save context (WREG and STATUS registers) if needed.
btfss PIR1,RCIF ; Did USART cause interrupt? goto OtherInt ; No, some other interrupt
movlw 06h ; Mask out unwanted bits andwf RCSTA,W ; Check for errors btfss STATUS,Z ; Was either error status bit set? goto RcvError ; Found error, flag it
movf RCREG,W ; Get input data call Transmit ; goto ISREnd ; go to end of ISR, restore context, return RcvError bcf RCSTA,CREN ; Clear receiver status bsf RCSTA,CREN movlw 0FFh ; Light all LEDs movwf PORTB goto ISREnd ; go to end of ISR, restore context, return
OtherInt goto $ ; Find cause of interrupt and service it before returning from ; interrupt. If not, the same interrupt will re-occur as soon ; as execution returns to interrupted program.
ISREnd ; Restore context if needed. retfie
end
--------------------------------------------------------------------------------------------
Jeg kan dog ikke rigtigt få hul igennem. Da jeg ikke har mulighed for at lege med ombrænding af PIC'en pt (brænder står på uni), vil jeg høre om der er noget i vejen for at undlade at forbinde de resterende ben, da disse ikke benyttes (det burde jo være ligemeget om der er noget på benene, når der ikke læses fra dem, og INT benene er jo sat til output (PORTB).)
Er interesseret i om ideen bag designet, og koden er helt hen i vejret, eller om det burde fungere (jeg vil som sagt ikke udeluykke at PIC'en er brændt forkert)
MVH Jakob Fromm