Hallo Zusammen! Habe ein Problem beim Empfangen der Daten! Empfänger PIC 16f88 Sender PIC 16f887. Programmiert wird mit MPLAB in Assembler Programm sieht wie folgt aus fürs Empfangen: receive_data nop btfss PIR1,RCIF goto $-1 movf RCREG,w return So zu meinem Problem: Ich sende die Daten (z.B.: d'200') vom PIC16f887 zum PIC 16f88. Der 16f88 erkennt dass er Daten bekommt und springt vom Befehl btfss PIR1,RCIF zum Befehl movf RCREG,w. Nur im RCREG steht dann nicht dezimal 200 sondern 0 drinnen. Warum steht jetzt aber nicht 200 drinnen wenn er denn Befehl btfss übersprungen hat! PS:Die Daten d'200' vom PIC16f887 gelangen mit Sicherheit auf die TX Leitung werden also gesendet. Hat jemand eine Idee? LG
Was ich noch hinzufügen muss! Die Daten werden gesendet wenn ein Taster gedrückt wird! Jedoch werden die Daten nicht immer geschickt wenn der Taster gedrückt wird. Mal geht es, mal geht es nicht!
Wenn du ein Oszi hast, kannst du verfolgen, ob die Signale sicher gesendet werden. Fehlerquellen sehe ich: - falsche Baudrate eingestellt(also verschiedene) - keinen sauberen Takt.(interner RC-Osz. statt Baudratenquarz) wird receive Data zur richtigen Zeit ausgeführt? Ich würde den seriellen Empfang als Interrupt laufen lassen. Ist sicher in ASM auch möglich. Somit ist sichergestellt, dass du auf jedes Zeichen reagieren kannst. Evtl. hast du einen kompl. 8-Bit-Port frei? Dann könntest du die Daten parallel auf den Ausgangsport schicken zur Kontrolle. Wenn ich mich recht entsinne gibt es eine gute Seite für PICs, sprut.de heißt sie....
Ja Oszi hab ich gerade nciht bei der Hand! Aber Baudrate ist mit Sicherheit die Richtige eingestellt. Das habe ich schon einmal mit dem Oszi überprüft. Beim Takt wird der interne RC osz verwendet, aber das ist ja egal da Baudraten aufeinander abgeglichen worden sind mit dem OSCTUNE. Ja das mit dem Interrupt hab ich mir auch schon einmal überlegt! Jedoch besteht noch immer die Frage warum der Empfänger manchmal Daten bekommt und manchmal nicht und wenn er sie bekommt dann sind es die falschen Daten.
er bekommt nicht immer daten, weil du nicht ständig hörst. Wenn du selbst Ohrenstöpsel nutzt, und diese immer kurz rausholst, aber sofort wieder reinsteckst, hörst du nicht, was andere Leute flüstern. Du hörst nur Wortfetzen! du musst die Ohrenstöpsel rauslassen und ständig hören! Dann bekommst du alles mit! Also Interrupt zum Empfang! Dann in einen Buffer schreiben.
Naja..ich versteh was du meinst. Aber ich höre immer! Also ich habs im Debug Modus rennen und befinde mich dann dauernd zwischen btfss PIR1, RCIF und goto $-1 .. und dann drück ich den Taster. Und manchmal überspringt er das goto $-1 also wenn er die Daten bekommt und manchmal nicht!
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.