Ich bin relativ neu in der Welt der PICs und experimentiere mit dem PICkit 2 mit Low Pin Count Demo Board mit einem PIC16F690. Bei meinen Versuchen, über RS-232 Daten zu senden, komme ich seit Tagen nicht mehr weiter und bin schon sehr verzweifelt. Das Datenblatt des PIC, unzählige Web-Sites und auch dieses Forum habe ich schon mehrfach erfolglos nach einer Erklärung durchsucht.
Hier ist mein Problemkind:
#include <p16F690.inc>
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
org 0
Start:
bsf STATUS, RP0 ; select Register Page 1
bcf TRISC, 0 ; make IO Pin C0 an output for LED
movlw D'12' ; Configure baud rate:
movwf SPBRG ; 19200 Baud @ 4MHz
bsf TXSTA, BRGH ; divisor 12, BRGH 1
; Asynchronous serial port:
bcf TXSTA, SYNC ; no Sync
bsf RCSTA, SPEN ; enable serial operation
bsf TXSTA, TXEN ; enable transmission
bcf STATUS, RP0 ; back to Register Page 0
bsf PORTC, 0 ; turn on LED to indicate 'before send'
movlw 'A'
Loop:
btfss PIR1, TXIF ; Transmit buffer empty?
goto Loop ; 0 = full => back
bcf PORTC, 0 ; turn off LED to indicate 'writing to TXREG'
movwf TXREG ; Write W to serial port
goto $
end
Bei der Initialisierung der Schnittstelle habe ich versucht mich genau an die Vorgaben aus dem Datenblatt zu halten.
Über eine LED an RC0 kann ich beobachten, wo das Programm steht: Starte ich den PIC, so wird die LED wird zwar ein, nicht aber wieder ausgeschaltet. D.h. das Programm hängt in einer Endlosschleife bei "Loop", der Transmit buffer wird als nie "empty".
Habt Ihr einen Hinweis für mich, woran das liegen könnte?