Jen
03.12.2004, 10:13
Hallo,
ich versuche schon einige Tage lang, meinem PIC das Senden von Daten beizubringen. Aber irgendwie stellt er sich stur.
Hier mein Initialisierungscode:
Ini_start
; Setzen der Ein- und Ausgänge
BANK_1 ; alle Pins, die nicht belegt sind, werden als
; Eingänge initialisiert, um Kurzschlüsse zu
; vermeiden
movlw b'11111011' ; Pin-Belegung
movwf TRISA ; in TRIS-Register schreiben (konfiguriert PORT)
movlw b'11100011'
movwf TRISB
movlw b'00001000' ; TMR0: 1/4 Pic-Takt, RB0-I:
movwf OPTION_REG ; fallende Flanke
movlw b'11000000' ; Interrupts konfigurieren (RB0,
movwf INTCON ; PORTB, generell=1)
BANK_0
; Pegel der Ein- und Ausgänge initialisieren
movlw b'00000100' ; initialisieren der Pegel
movwf PORTA ; in PORT-Register schreiben
movlw b'00111001' movwf PORTB
; initialisieren von TMR1
movlw b'00000111'
movwf T1CON
; alle Comparatoreingänge auf Digital umschalten
bsf CMCON, CM0
bsf CMCON, CM1
bsf CMCON, CM2
clrf adresse
call LED_B ; hier blinkt eine LED
; BIS HIER HIN FUNKTIONIERT´S!!!!
; USART initialisieren
BANK_1
movlw b'01000000'
movwf SPBRG ; Baudrate 19200
bcf TXSTA, TXEN
movlw b'00000100'
movwf TXSTA ; Sender
call LED_B
BANK_0
bcf RCSTA, CREN
movlw b'10000000'
movwf RCSTA ; Empfänger
call LED_B
clrf PIR1 ; alle Interrupt-Flags löschen
BANK_1
bsf TXSTA, TXEN
bsf PIE1, TXIE ; Sender-Interrupt zulassen
return
Das Main ruft nach Ini_start dann nochmal LED_B auf. Wird aber nicht gemacht. Wegen irgendwas kommt der PIC nicht aus Ini_start raus.
Sieht einer den Fehler? Welche Fehler könnten denn in der Hardware sein?
Die Pins für RX und TX gehen auf ein MAX232, aber nicht während des Programmierens oder ausführen des Programms, es wird erst zu geschaltet, wenn ausgelesen werden soll.
Hier noch einige Daten: PIC16F628, programmiert wird in Assembler, JDM Programmer.
Bitte helft mir, ich verzweifle sonst noch [-o<
LG
Jen
ich versuche schon einige Tage lang, meinem PIC das Senden von Daten beizubringen. Aber irgendwie stellt er sich stur.
Hier mein Initialisierungscode:
Ini_start
; Setzen der Ein- und Ausgänge
BANK_1 ; alle Pins, die nicht belegt sind, werden als
; Eingänge initialisiert, um Kurzschlüsse zu
; vermeiden
movlw b'11111011' ; Pin-Belegung
movwf TRISA ; in TRIS-Register schreiben (konfiguriert PORT)
movlw b'11100011'
movwf TRISB
movlw b'00001000' ; TMR0: 1/4 Pic-Takt, RB0-I:
movwf OPTION_REG ; fallende Flanke
movlw b'11000000' ; Interrupts konfigurieren (RB0,
movwf INTCON ; PORTB, generell=1)
BANK_0
; Pegel der Ein- und Ausgänge initialisieren
movlw b'00000100' ; initialisieren der Pegel
movwf PORTA ; in PORT-Register schreiben
movlw b'00111001' movwf PORTB
; initialisieren von TMR1
movlw b'00000111'
movwf T1CON
; alle Comparatoreingänge auf Digital umschalten
bsf CMCON, CM0
bsf CMCON, CM1
bsf CMCON, CM2
clrf adresse
call LED_B ; hier blinkt eine LED
; BIS HIER HIN FUNKTIONIERT´S!!!!
; USART initialisieren
BANK_1
movlw b'01000000'
movwf SPBRG ; Baudrate 19200
bcf TXSTA, TXEN
movlw b'00000100'
movwf TXSTA ; Sender
call LED_B
BANK_0
bcf RCSTA, CREN
movlw b'10000000'
movwf RCSTA ; Empfänger
call LED_B
clrf PIR1 ; alle Interrupt-Flags löschen
BANK_1
bsf TXSTA, TXEN
bsf PIE1, TXIE ; Sender-Interrupt zulassen
return
Das Main ruft nach Ini_start dann nochmal LED_B auf. Wird aber nicht gemacht. Wegen irgendwas kommt der PIC nicht aus Ini_start raus.
Sieht einer den Fehler? Welche Fehler könnten denn in der Hardware sein?
Die Pins für RX und TX gehen auf ein MAX232, aber nicht während des Programmierens oder ausführen des Programms, es wird erst zu geschaltet, wenn ausgelesen werden soll.
Hier noch einige Daten: PIC16F628, programmiert wird in Assembler, JDM Programmer.
Bitte helft mir, ich verzweifle sonst noch [-o<
LG
Jen