Forum: Mikrocontroller und Digitale Elektronik Pic 16f88 RS232 initialisieren


von lass (Gast)


Lesenswert?

Hallo,
ich möchte mit dem Pic 16f88 analoge Spannungen einlesen und per USART
auslesen. Ich habe das PC-Programm in VB geschrieben und es
funktioniert mit anderen Pic´s zusammen wunderbar. Der "Fehler" macht
sich so bemerkbar, dass das Funkmodul die Daten empfängt und direkt an
Pin 8 des Pic´s 16f88 (RX)weitergibt, es da aber stark gedämpft wird
und nur ca. 0,7 Volt erreicht. Ist die initialisierung des Pic´s
eventl. fehlerhaft ??

;Usart init aus Datenblatt
BSF  STATUS,PRO
MOVLW  D'64' ; für 19200 Baud
MOVWF  SPBRG
MOVLW  0x20
MOVWF  TXSTA
BSF  PIE1,TXIE
BSF  PIE1,RCIE
BCF  STATUS,PRO
MOVLW  0x90
MOVWF  RCSTA

auf versucht :

; USART initialisieren
   ; BSF      STATUS,RP0    ; Bank1
   ; MOVLW    0x20          ; Sender: RS232
   ; MOVWF    TXSTA         ;
   ; BCF      STATUS,RP0    ; Bank 0
   ; MOVLW    0x90          ; Empfänger: RS232
   ; MOVWF    RCSTA         ;

; USART Baudrate einstellen
   ; BSF      STATUS,RP0    ; Bank1
   ; MOVLW    D'64'         ; Set Baud rate  kBPS bei 20 MHz
   ; MOVWF    SPBRG
   ; BsF      TXSTA, BRGH   ; BRGH=1
   ; BCF      STATUS,RP0    ; Bank 0
wer kann mit helfen ??

von Steffen (Gast)


Lesenswert?

Hast du RB2 als Eingang definiert?

von lass (Gast)


Lesenswert?

.... ja hab ich auch versucht, aber so weit ich weiss ist das nicht
nötig, weil durch die Initialisierung der Schnittstelle das sowieso
passiert

von Steffen (Gast)


Lesenswert?

Nein, das TRIS-Register wird defintiv nicht von der
Schnittstellenkonfiguration geändert!

von lass (Gast)


Lesenswert?

Ich habe den Gesamten Aufbau mit dem 16f876 getestet und es läuft
fehlerfrei ?? Ich hab´s auf den f88 umgeschrieben, wobei die Register
genutzen Reg. alle gleich sind. Die Uart-initialisierung die mit dem
876 klappt sieht so aus :
init
; PortB vorbereiten
  clrf     DatenSindDa
    bsf  STATUS, RP0  ; auf Bank 1 umschalten
  movlw  B'11111111'  ; PortB alle input
  movwf  TRISB
  bcf  STATUS, RP0  ; auf Bank 0 zurückschalten
    ;clrf  PORTB    ; alle LEDs ausschalten

; ADC einschalten
  BSF  ADCON0, 0  ; ADON=1

; ADC-Eingang AN0 auswählen
  ;call ADXEinschalten

; ADC speed für 20 MHz einstellen
  BSF  ADCON0, 7  ; ADCS1=1
  BCF  ADCON0, 6  ; ADCS0=0

; Daten linksbündig
  BSF  STATUS,RP0  ; Bank1
  BCF  ADCON1, 7  ; ADFM=0
  BCF  STATUS,RP0  ; Bank0
; USART initialisieren
    BSF      STATUS,RP0    ; Bank1
    MOVLW    0x24          ; Sender: RS232
    MOVWF    TXSTA         ;
    BCF      STATUS,RP0    ; Bank 0
    MOVLW    0x90          ; Empfänger: RS232
    MOVWF    RCSTA         ;

; USART Baudrate einstellen
    BSF      STATUS,RP0    ; Bank1
    MOVLW    D'64'         ; Set Baud rate  kBPS bei 20 MHz
    MOVWF    SPBRG
    BsF      TXSTA, BRGH   ; BRGH=1
    BCF      STATUS,RP0    ; Bank 0

von Steffen (Gast)


Lesenswert?

Die UART liegt beim 16F876 schon mal auf PortC und nicht auf PortB.

Wie sieht genau der Code für den 16F88 aus? Wenn du den oben geposteten
kopiert und nicht abgeschrieben hast, lässt der sich mit Sicherheit
schon mal nicht assemblieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.