Hallo zusammen Hat jemand den C-Code mitdem man auf einen Interrupt am UART1 RX Eingang reagieren kann? So wie bei Timer1 geht es so: void __attribute__((_interrupt_, _shadow_)) _T1Interrupt(void) { /* Interrupt Service Routine code goes here */ IFS0bits.T1IF = 0; //Reset Timer1 interrupt flag WATER_PULSE=!WATER_PULSE; // pulse water high/low generator (2.5kHz) (MOD 0030) if(++prescaler_1ms_timer > 4) // prescaler for 1ms Timer (MOD 0030) { prescaler_1ms_timer = 0; mSecDelayCounter--; if(elapsedCounter)elapsedCounter--; // decrement mSec delay count usw. Vielen Dank
Also ich such dir das jetzt mal nicht raus - ein gewisser Lerneffekt soll ja auch dabei sein. Grundsätzlich: -Interrupts konfigurieren -Interrupts anschalten - in den C Compilern gibt es Funktionen für Low und High Interrupt. Wie genau die heißen kannst du dem Helpfile deines Compilers entnehemen (welchen verwendest du ?) - in diesen Funktionen (für Low-Interrupt und High-Interrupt) musst du nun verifizieren welche Quelle den Interrupt ausgelöst hat. Dazu überprüfst du die Interrupt-Flags aller relevanten Quellen (kann auch nur eine sein) - (Interrupts ausschalten) das evtl. auch schon früher in den Funktionen für Low-Interrupt und High-Interrupt. Man beachte das dies entfallen kann (Low-Interrupt) - ISR (Interrupt Service Routine) also was passieren soll wenn der Interrupt ausgelöst wird. In deinem Fall Daten vom UART abholen. Wie das geht steht im Datenblatt oder du verwendest eine vorgefertigte Library. - Interrupt-Flag wieder löschen ! - (Interrupts wieder freigeben) So jetzt habe ich dir eine Anleitung hingeschmissen =) und du musst / willst daraus etwas sinnvolles produzieren. Ich weiss nicht wie fitt du bist und ob du nicht PIC Anfäger bist. Was ich dir sicherlich nicht sagen muss ist, dass du das Datenblatt studieren musst. Ich kann dir auch nur ans Herz legen, nicht irgendwo Script-Kiddy zu spielen und dir einen Code klauen. So lernt man's nie richtig und das rächt sich später bzw. gleich bei der Fehlersuche. Lerne es richtig! Bei allem nötigen Respekt, nichts für Ungut und nichts gegen deine Person: Ich glaube nicht, dass du den geposteten Code auch nur verstanden hast. Sei mir bitte nicht böse - ich weiß das nagt an einem aber man muss sich das eingestehen. Ich hab auch so angefangen aber ich habe die Kurve gekriegt und hab mich dann zwar zeitintensiv aber dennoch erfolgreich mit dem Thema beschäftigt. Und so rate ich dir auch mit deinem Kenntnisstand zu handeln. Ich wünsche dir viel Erfolg und wenn du Fragen hast kannst du dich auch gerne per Persönlicher Nachricht (musst angemeldet sein) oder an "kruszi[at]web.de" melden. Ich helfe dir gerne aber nur wenn du dich auch weiterbildest. Gruß Michael PS: wenn du vor deinen C-Code "C" ohne Anführungszeichen dafür mit eckiger Klammer auf C und dann eckiger Klammer zu schreibst UND nach dem C-Code "/C" auch jeweils in eckigen Klammern dann wird dein Code nicht derart massakriert (unterstrichen, etc.)
Hallo Ja selber raussuchen kann ich auch, aber danke für die ausführliche Info, wollte eigentlich ein Application Note von microchip und hoffte da hat es jemand schon und kann es nur schnell posten... Wie wärs damit? void __attribute__((_interrupt_, _shadow_)) _U1RXInterrupt(void) { /* Interrupt Service Routine code goes here */ IFS0bits.U1RXIF = 0; } Sollte funzen denke ich. Ich bin dir auch nicht böse, wie könnte ich nur... :-) Zum Code der da steht, den habe ich geschrieben plus die Elektronik Schema-Layout usw. habe ich auch gezeichnet, gerechnet usw... Der Timer Interrupt wird nämlich zur Wasserstandsüberwachung benutzt, denn 2.5kHz auf einem Stahldraht gegen einen Stahldraht der auf GND ist mit der entsprechenden Elektronik dazu (einige Dioden, Transi und R sowie C) kann man sehr einfach und vor allem günstig über einen ADC das Level detektieren, wobei es nur darum geht ob Wasser vorhanden ist oder nicht, damit der Boiler nicht abfackelt... So wie du siehst war ich einfach zu faul um mir die Application Note zu suchen... Trotzdem danke & schönen Tag noch
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.