PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Habe Probs mit Serieller schnittstelle



m0
27.03.2005, 03:30
Hi!
Also ich bin grad schon seit ewigkeiten dran zu testen wie es funtzt den PIC16f877 dazu zu bringen seriell mit dem PC zu kommunizieren also ich habs ja jetzt schonmal geschafft dasser sendet s problem dabei is nur wenn ich den serial port am PC abfrag (9600 baud 8 data 1 stopbit keine parity) dann krieg ich zwar werte rein aber das sind nich die die ich gesendet habe und auch nicht immer die selben die ändern sich nach ner zeit immer was mache ich falsch?? und empfangen geht noch garnet aber senden wär ja schomml was wenns ging kann sich villt ma jemand den code hier anschaun (assembler)


#include <P16f877.INC>
__CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC

w_copy EQU 0x20
s_copy EQU 0x21
send EQU 0x22

org 0
goto init


init
bsf STATUS, RP0
movlw B'00000000' ; PortA halb outputs
movwf TRISA
movlw B'00000000' ; PortB alle outputs
movwf TRISB
movlw B'00000000' ; PortB alle outputs
movwf TRISD
movlw b'00100100'
movwf TXSTA
movlw d'25'
movwf SPBRG

bcf STATUS, RP0
movlw b'10010000'
movwf RCSTA
bsf INTCON, GIE
bsf INTCON, PEIE
bsf PIE1, RCIE
clrf PORTD
goto go

go
movlw d'251'
movwf TXREG
nop
nop
nop
nop
movwf PORTD
goto go


end



vielleicht hat mir ja sogar jemand nen kleinen beispielcode da für diesen PIC wäre echt spize hab nämlich erst vor ner woche mit assembler angefangen und bin für jeden beispielcode froh (hab auch auf www.sprut.de schon durchgeschaut aba da gibts nur n bsp. für die softwareseitige communication leider)

also danke schonmal

m0

29.03.2005, 08:16
kannst du dein problem mal konkret formulieren?
kannst du deinen code mal vernünftig darstellen?

m0
30.03.2005, 13:34
Hi!
sorry aber ich bin jetzt grad doch noch selbst auf den fehler gekommen trozdem vielen dank!!

MfG
m0

m0
09.04.2005, 16:36
Hi!
also soweit funktioniert meine anwendung jetzt wunderbar jetzt würde mich nurnoch interressieren wie ihr das so löst wenn ihr mehr als einen 1-byte wert senden/ empfangen wollt?
ich habe das bei mir so gelöst dass ich "0" quasi als start der 2 folgenden datenbytes sende. dann wie gesagt die 3 daten und dann wenn ich wieder sende wieder mit der "0" am anfang aber was mich stöhrt ist dass ich die "0" dann nicht in meinen datenpaketen verwenden kann wie sagt ihr dem PIC welcher wert wohin gehört?

Danke schonmal
m0

12.04.2005, 07:30
Was du gemacht hast nennt man Protokoll. Es beschreibt die Art und Weise eines Datenpaketes. Hier kocht bekanntlich jeder Hersteller sein eigenes Süppchen. Du must dir eigentlich nur im klaren werden, was du übertragen willst. Wenn du alle zeichen (0..FFh) verwenden willst, kommst du nicht umhin, einen etwas grösseren Aufwand zu betreiben. Es läuft darauf hinaus, das du mehr Zeichen übertragen musst, als du eigentlich brauchst.
Lege also ein oder mehrere Start- und Stopzeichen fest, welche dein Daten umrahmen. Das ganze nennt man dann auch Frame.