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!
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
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
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.