Hallo! Es soll ein byte bei "Senderpic" nach einem Tasterdruck ins TXREG geladen werden. Beim "Empfängerpic" sollte dieses byte aus dem RCREG gelesen und in eine Variable geladen werden, und weiters eine LED einschalten, wenn das nullte Bit gesetzt ist. Nun zum Problem: Wenn ich im Debugmodus beim "Senderpic" das TXREG anschaue, wird das Byte in dieses geladen. Jedoch erhält der "Empfängerpic" kein Signal!! Beide PICs wurden programmiert. Verwendete PICs: 16f88 Michrochip Im Anhang sind die asm files! Bitte helft mir! Mit freundlichen Grüßen Mario
Hallo Mario, ich hab den Code zwar nicht ganz durchgesehen - ABER: Die Empfangsroutine für RCREG sollte in einer Interruptsequenz ausgewertet werden. Das label test_store existiert nicht. Die Baudrate ist nicht definiert. Kurz um - schau mal im Handbuch nach dem Kapitel UART. Da sind auch Beispiele für die richtige Deklaration der UART zum Senden / Empfangen von Bytes. Ach so: Mit welchem Oscillator arbeitest Du? Intern oder Extern Ich vermute mal Intern - wegen dem OSCCAL-Register. Das sollte übrigens nicht manuell mit einem Wert belegt werden, sondern den Fabrikwert übernommen werden. (s. Handbuch) Gruß TK
Hallo! Also, die Baudrate ist meines Wissens schon definiert ("SPBRG")!! Und auch "store" ist auf einer eigenen Ramzelle ("equ 0x20")!! Schulkollegen meinten, dass der Code so stimmen sollte (sie haben auch keine Interrupts verwendet und es funktioniert!) LG Mario
Das mit der Baudrate hab ich übersehen. Die muss aber auch zum Oszillator passen. Besser gesagt zur Frequenz. Und dann auch noch zum BRGH-Bit im TXSTA-Register. Dann noch ein Tipp zum Programmaufbau: Nach einem Power-On reicht es, wenn die Initialisierungsroutine EINMALIG angesprungen wird. Von da aus kann dann die MAIN aufgerufen werden. Die MAIN kann dann eine Dauerloop sein. Also nicht nochmal nach INIT springen. Klar geht die Abfrage auf Empfang eines Bytes auch im Polling-Mode. Wenn der PIC sonst nichts zu tun hat, ist das auch OK - aber halt nicht die Regel, daher hab ich auch geschrieben, dass am Besten die Interruptroutine für den Empfang von Daten angesprungen wird. Wie sind deine Einsprungadressen definiert? Resetadresse ist ORG 0x00 Interruptadresse ist ORG 0x04 Die sind nicht vorhanden. z.B: ORG 0x00 goto init ORG 0x04 retfie init (hier alles initialisieren) main (hier Senden oder Empfangen) goto main In deiner Empfangsroutine muss auch noch das Register TXSTA belegt werden, sonst wird der Port nicht auf UART Mode umgeschaltet. Und dann ist das BRGH-Bit auf 0 gesetzt - in deiner Senderoutine jedoch auf 1 -> falsche Baudrate. Gruß TK
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.