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!
> 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
> 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.
;*********************************************************************** ***** ; 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 ß?
>; 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)
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.