Har precis fått kommunikationen mellan min PIC18LF1320 och dator att fungera. Testprogrammet skickar ett "A" samtidigt som en lysdiod lyser i 500ms, sedan skickar det ett mellanslag och lysdioden är släckt i 500ms.
Det är tänkt att det ska fungera så iallafall. Programmet skickar lite annorlunda tecken (ett x och ett norskt ö, istället för "A"...) Eftersom närmsta baudrate jag räknat fram är 9615 och datorn är inställd på 9600, så tänkte jag köra med "Auto Baudrate detection".
Men, det vill inte fungera riktigt. Lysdioden lyser hela tiden och det skickas inget. (Det gjorde det innan jag körde med "Auto Baudrate" Vad har jag missat?
Gissar att det har med interrupt att göra, men har inte riktigt fått kläm på det.
Här är koden:
Kod: Markera allt
program RS232_3
TRISA = $0 ' Utgångar
SetBit(TRISB,4) ' RB4 - IN
SetBit(TRISB,1) ' RB1 - IN
ClearBit(TRISB,2) 'RB2 - UT
PORTA = $0 ' Inget här
PORTB = $0 ' Inte här heller
SetBit(ADCON1,5) ' PCFG5 Digital
SetBit(ADCON1,6) ' PCFG6 Digital
TXSTA = %00100010 '8bit transmitt, asyncron, low speed, ingen parietetsbit
RCSTA = %10011000 'continious receive, ingen framing error, ingen overrun error, ingen parietetsbit
BAUDCTL = %01000011 '8bit baudrate register,
' dvs 8bit Asynchronous. BaudRateFormula = Fosc/(64*(n+1))
SPBRG = $40 ' 64 decimalt, innebär 9615 baud
'automatisk bauddetection: operate in PRI_RUN eller PRI_IDLE
'enable RXIF interrupts. Set RCIE, PEIE, GIE.
' När nästa RCIF interrupt händer så har baudrate blivit mätt.
' Läs RCREG för att rensa RCIF och discard. Kolla SPBRG och SPBRGH för valid value.
' EUSART är redo for normal communications. Return from the interrupt.
' Allow the primary clock to run (PRI_RUN or PRI_IDLE).
' Process subsequent RCIF interrupt normally as in asyncron repetition.
' Remain in PRI_RUN or PRI_IDLE until communications are complete.
' Så:
SetBit (PIE1,RCIE) ' Enable EUSART recieve interrupt
SetBit (INTCON,PEIE)
SetBit (INTCON,GIE)
do
TXREG = $41 ' A
SetBit(PORTB,2)
delay_ms(500)
TXREG = $20 ' Mellanslag
ClearBit(PORTB,2) delay_ms(500)
loop until 0 = 1
end.
edit: Justerade rubriken.
