Archiv verlassen und diese Seite im Standarddesign anzeigen : Auf Ereignisse warten
Import-Script
11.05.2002, 17:40
Hallo, ich hätte mal eine Frage <BR> <BR>Wie warte ich am besten auf Ereignisse in Form von Signalen an Eingängen eines 892051? Das mit dem Interrupt habe ich schon gesehen, aber ich habe mehrere Signale, nicht nur eines. Ist es angebracht, eine Warteschleife dauernd zu durchlaufen, die ständig alle Eingänge der Reihe nach checkt, oder gibt es da was eleganteres?
Import-Script
11.05.2002, 19:26
also m.M. nahc hast du die zwei Methioden schon richtig erkannt: <BR>entweder du nutzt die zwei externen Interruppts, oder du pollst das heißt dein µC macht nichts außer <BR>JB Pin , irgendwo <BR>JB Pin , irgendwo <BR>... <BR>oder wenns nicht ganz so zeitkritisch ist: <BR>nutz du nen Timer in dessen Interrupopt du dann alle gewünschten Pins einmal abfragst, so kannst dein µC nebenbei noch was andres machen außer nur warten. <BR>Viel Erfolg
Import-Script
11.05.2002, 19:43
Hi, ich hab es bei der Abfrage eines Codierschalters folgend gelöst: <BR> <BR>;Initialisierung <BR>MOV R0, 90h ;Port 1 wird ausgelesen <BR> <BR>Warten: <BR> MOV A, 90h ;Port 1 wird in den Akku geladen <BR> CJNE A, 00, Verarbeitung <BR>SJMP Warten <BR> <BR>Verarbeitung: <BR>mov R0, A ;neuen Portstatus sichern <BR> ;hier werden die neuen Daten des Port 1, die <BR> ;im Akku abgelegt sind, verarbeitet <BR>LJMP Warten <BR> <BR>Ich bin mir sicher, es geht bequemer, aber ich kann es im Moment nur so. <BR> <BR>Gruß, Marek
Import-Script
11.05.2002, 21:22
mit einem externen 8 x odergatter kannst du erkennen,ob sich etwas am port 1 aendert...falls ja,dann triggert der ausgang einen interrupt eingang. : p1 wird eigelesen und p1.x erfasst
Import-Script
11.05.2002, 22:06
Es hängt ganz davon ab, wie schnell man auf ein Ereignis reagieren muß. <BR>Sind es z.B. mechanische Kontakte muß man diese sowieso entprellen und da bietet sich ein Timerinterrupt geradezu an, um z.B. alle 10ms die Tasten abzufragen und nur dann zu akzeptieren, wenn 2-mal der gleiche Tastenzustand erkannt wurde. <BR>Alle mechanischen Kontakte prellen innerhalb etwas 10ms nach Betätigung. <BR> <BR> <BR>Peter
Import-Script
12.05.2002, 10:51
Hallo Peter, <BR>habe Dich schon oefters im 8052.com Forum gelesen und Deine Inputs interessant gefunden.Ich spiele aus Spass mit der '51 Familie.Meine Programme sind alle relativ simpel dh. main loop & polling. <BR>Obwohl ich einige Versuche mit Interrupts gemacht habe fehlt mir noch das feeling fuer diese Technik. Alle Operationen lasse ich sequenziell ausfuehren,was sehr einfach zu verfolgen ist (breakpoints). <BR>Kannst Du mir erklaeren, wie ich im Hintergrund einen Timer fuer zB 5 Minuten organisieren muss/kann ? <BR>Genuegt es einen 16 bit timer overflow auszuzaehlen und mit einem Sollwert zu vergleichen? Die im Hauptprogamm benuetzten Register muessen alle gepusht & gepopt werden? <BR> <BR>Zur Tastenabfrage mit dem 10ms Timerinterrupt moechte ich gerne wissen,ob dieser Interrupt immer aktiv gehalten wird (innerhalb eines groesseren Programmes)? <BR>Letzter Punkt: Ein Programm ohne Interrupt ist unkritisch;..mit timerinterrupt etwas komplizierter;...mit timer- und serialinterrupt <BR>kritisch:genuegt da ''immer''die Prioritaet festzulegen um sicher zu gehen dass zB keine Daten verloren gehen? <BR>Vielen Dank Peter <BR>Paul
Import-Script
13.05.2002, 20:21
refresh
Import-Script
13.05.2002, 22:31
Hallo Paul, <BR> <BR>auf meiner Webseite sind verschiedene Timerroutinen. Meistens nehme ich den Timerinterrupt, um 1/64s (zum Tasten entprellen) und 1s-Takt (zum Uhrzeit zählen) zu erzeugen. 5 min geht aber auch, einfach den Timer im Interrupt mit 1 oder 2 Bytes erweitern. <BR> <BR>Das mit der Priorität ist meistens unkritisch. Beim Timer weiß man ja, wieviel Takte bis zum nächsten Interrupt sind und bei der Uart ist das ja durch die Baudrate vorgegeben. D.h. man kann leicht ausrechnen, ob man alles abgearbeitet hat, bevor der nächste Interrupt zuschlagen kann. <BR> <BR>Die hohe Priorität nehme ich nur, um z.B. den Timer 0 als 2 8-Bit-Timer zu verwenden, da dann ja nur 256 Zyklen zwischen 2 Interrupts sind. <BR> <BR>Sieh Dir mal die Beispiele an: <BR> <BR>www.specs.de/~danni <BR> <BR> <BR>Peter
Powered by vBulletin® Version 4.1.12 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.