mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC 16F877a - RS232


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

bin ein pic neuling und versuche gerade mit einem 16f877a über die rs232 
einen Text (beliebig lange) im Hyperterminal auszugeben. wie schicke ich 
den text über die rs232 ans Hyperterminal? geht das mit dem TXREG?

falls jemand von euch einen programmcode hat wär das super!

bedanke mich im voraus für eure Hilfe!

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>bin ein pic neuling

Dann ab zu Sprut...
http://www.sprut.de/electronic/pic/grund/rs232.htm

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dann ab zu Sprut...
http://www.sprut.de/electronic/pic/grund/rs232.htm


das hab ich mir schon alles durchgelesen, jedoch weiß ich nicht wie ich 
das ans Hyperterminal schicke! hm

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das hab ich mir schon alles durchgelesen, jedoch weiß ich nicht wie ich
> das ans Hyperterminal schicke! *hm*

Ich versteh jetzt dein Problem nicht.

> falls jemand von euch einen programmcode hat wär das super!

Auf der Sprut-Seite ist das doch genau erklärt - mit Beispielprogramm - 
und 'ne Schaltung ist auch angegeben. Du must nur darauf achten, die 
Register/Bänke an den von dir verwendeten PIC anzugleichen.

Also einfach Verbinden, Hyperterminal starten, richtiges Protokoll 
einstellen und dann Daten über den PIC-UART senden.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;*********************************************************************** 
*****
; Includedatei für den 16F877a einbinden
;*********************************************************************** 
*****
  include  "p16F877a.inc"

;*********************************************************************** 
*****
; Konstanten-Deklaration
;*********************************************************************** 
*****
DatenSindDa   equ   0x24
Zeichen       equ   0x22


  org  0x00          ;Reset-Adresse fuer PIC16F877A
RESET               ;Initialisierung für den Bootloader
  clrf  STATUS
  movlw  0x00
  movwf  PCLATH
  goto  main        ;Springe zum Label "main"

  org 0x04          ;Interrupt-Adresse fuer PIC16F877A
  goto  Timer0_ISR      ;springe zum Label "Timer0_ISR"

;*********************************************************************** 
*****
; Timer0 Interrupt Service Routine
;*********************************************************************** 
*****

Timer0_ISR
  bcf    INTCON,GIE      ;Alle INT verhindern

  retfie            ;Ende der TMR0-ISR


;*********************************************************************** 
*****
; Initialisierung
;*********************************************************************** 
*****
init
  clrf     DatenSindDa

    bsf      STATUS, RP0   ; auf Bank 1 umschalten
    movlw    B'00000000'   ; PortB alle output
    movwf    TRISB
    bcf      STATUS, RP0   ; auf Bank 0 zurückschalten
    clrf     PORTB         ; alle LEDs ausschalten

; 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    6                ; Set Baud rate 9600 BPS bei 4 MHz
    MOVWF    SPBRG
    BCF      TXSTA, BRGH       ; BRGH=0
    BCF      STATUS,RP0        ; Bank 0

  RETURN

;*********************************************************************** 
*****
; Hauptprogramm
;*********************************************************************** 
*****
main
  CALL init
  CALL autor_senden
  movwf Zeichen
  CALL RS232out
  goto $

;*********************************************************************** 
*****
; Autor senden
;*********************************************************************** 
*****
autor_senden
  ;CLRW
  addwf  Zeichen
  dt  "autor",0

RETURN

RS232out
    btfss   PIR1,TXIF        ; ist Sender leer ?
    goto    RS232out         ; nein, noch nicht leer
  banksel  TXREG
    movwf   TXREG            ; und in den RS232-Sender schreiben

RETURN



;*********************************************************************** 
*****
;Ende des Programms
;*********************************************************************** 
*****

  END


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

Wiso schickt er mir anstatt des Zeichen a ein ß?

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>; USART Baudrate einstellen
>    BSF      STATUS,RP0        ; Bank1
>    MOVLW    6                ; Set Baud rate 9600 BPS bei 4 MHz
>    MOVWF    SPBRG
>    BCF      TXSTA, BRGH       ; BRGH=0
>    BCF      STATUS,RP0        ; Bank 0


Laut Datenblatt (S. 114, Tabelle 10-3) gibt's bei BGRH=0 und SPBGR=6 bei 
9600 Baud einen Fehler von 6,99%

Du solltest besser BGRH=1 und SPBGR=25 nehmen (0.16% bei 9600 Baud@4MHz, 
S. 114, Tabelle 10-4):



>Timer0_ISR
>  bcf    INTCON,GIE      ;Alle INT verhindern
>
>  retfie            ;Ende der TMR0-ISR

Und was soll das?

1. Bei Auslösen eines Interrupts wird INTCON,GIE automatisch auf '0' 
gesetzt

2. setzt 'refie' INTCON,GIE wieder auf '1' (siehe DS S. 153)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.