Forum: Mikrocontroller und Digitale Elektronik Wie seriellen Eingang (RX) am PIC programmieren.


von Mario G. (rodenberger)


Lesenswert?

Hallo,

ich möchte mit einem PIC 16F627 serielle Daten am RX Port (RB1) 
einlesen.
Bisher habe ich das immer "zu Fuß" gelöst, möchte aber die Funktion auch 
nutzen wenn sie schon da ist.
Ein Bsp. / LINK  mit Beschreibung der Einstellungen wäre mir sehr 
Hilfreich.

DANKE!


von SChoasch (Gast)


Lesenswert?

Hi

Naja... eigentlich ist das ganze ja nicht wirklich kompliziert.

Zuerst einmal den Pin als Eingang definieren. Danach das UART-Modul 
konifgurieren und das wars :-)

Da ich nicht weis, in welcher Sprache du programmierst, noch welche 
Einstellungen du haben willst, kann ich dir leider keine konkrettere 
antwort dazu geben.
Schau dir einfach einmal das Kapitel USART im Datenblatt an. Es gibt 
eigentlich eh nur 3 Register die du setzen musst(TXSTAT,RCSTAT,SPBRG).
Aber vergiss nicht aufs TRIS-Register!

mfg Schoasch

von Mario G. (rodenberger)


Lesenswert?

Hallo Schoasch,

ich programmiere in Assembler (in MPLAP).
Die Baudrate soll 9600 sein und die Taktfrequenz vermutlich 12 Mhz.
Mal schauen ob ich mit dem Datenblatt zurecht komme.

Gruß MArio

von Franko P. (sgssn)


Lesenswert?

Das sollte vorkommen:

Quarz: 3.6964MHz

; Macros:
BANK1  macro
  bsf  STATUS, RP0
  endm
BANK0  macro
  bcf  STATUS, RP0
  endm

SetupRS232:      ;9600 Baud
  movlw  0x90
  movwf  RCSTA
  BANK1
  movlw  0x24
  movwf  TXSTA
  movlw  .23
  movwf  SPBRG
  BANK0
  return


Gerhard

von Mario G. (rodenberger)


Lesenswert?

Hallo Gerhard,

bin kein Profi, also wäre eine kurze Doku schön gewesen.

Was ich nun zusammengestellt habe.

Takt 12 Mhz, Baudrate 9600, BANK hier nicht berücksichtigt

 MOVLW  B'00000011'
 MOVWF  TRISB       ;RB1 auf EINGANG

 BSF TXSTA, BRGH ; Bit BRGH auf 1 setzen, da ich mit FOSC/16 gerechnet 
habe

 MOVLW .77
 MOVWF SPBRG ; Baudrate festlegen X = 77



FLAG RXIF zeigt an wenn ich ein Byte empfangen habe
In RXREG liegt das empfangene Byte.

Was ist mit RCSTA und Interrupt? Noch was vergessen?

von Franko P. (sgssn)


Lesenswert?

Ja, sorry, im Code hatte ich damals wenig dokumentiert, und mit 
Assembler und PIC16 hab ich mich auch schon lange nicht mehr 
beschäftigt. Ich kann dir nur noch ein bisschen Code anbieten, falls du 
per ISR empfangen willst:

  ORG     0x000             ; processor reset vector
  goto    main              ; go to beginning of program

;----------------------------------------------------------------------
;Interupt:
  ORG     0x004             ; interrupt vector location
  movwf   w_temp            ; save off current W register contents
  movf  STATUS,w          ; move status register into W register
  movwf  status_temp       ; save off contents of STATUS register

; ISR code can go here or be located as a call subroutine elsewhere
  btfsc  PIR1, RCIF      ;Receive int
  call  Receive
  ;btfsc  PIR1, TMR1IF    ;Timer Überlauf
  ;call  T1ISR

  movf    status_temp,w     ; retrieve copy of STATUS register
  movwf  STATUS            ; restore pre-isr STATUS register contents
  swapf   w_temp,f
  swapf   w_temp,w          ; restore pre-isr W register contents
  retfie                    ; return from interrupt

-------------

SetupInt:
  clrf  PIR1
  movfw  RCREG
  BANK1
  movlw  b'00100001'
  movwf  PIE1
  BANK0
  movlw  b'11000000'
  movwf  INTCON    ;enable ints
  return
--------------
Receive:
  movfw  RCREG
  movwf  cmd
;        ...
;        ...
  return

RCSTA ist schon programmiert in meiner SetupRS232
Gerhard

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.