PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auf Ereignisse warten



Import-Script
11.05.2002, 17:40
Hallo, ich h&auml;tte mal eine Frage <BR> <BR>Wie warte ich am besten auf Ereignisse in Form von Signalen an Eing&auml;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&auml;ndig alle Eing&auml;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&szlig;t dein &micro;C macht nichts au&szlig;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&uuml;nschten Pins einmal abfragst, so kannst dein &micro;C nebenbei noch was andres machen au&szlig;er nur warten. <BR>Viel Erfolg

Import-Script
11.05.2002, 19:43
Hi, ich hab es bei der Abfrage eines Codierschalters folgend gel&ouml;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&szlig;, 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&auml;ngt ganz davon ab, wie schnell man auf ein Ereignis reagieren mu&szlig;. <BR>Sind es z.B. mechanische Kontakte mu&szlig; 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&auml;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 &#39;51 Familie.Meine Programme sind alle relativ simpel dh. main loop &amp; 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 &#40;breakpoints&#41;. <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 &amp; gepopt werden? <BR> <BR>Zur Tastenabfrage mit dem 10ms Timerinterrupt moechte ich gerne wissen,ob dieser Interrupt immer aktiv gehalten wird &#40;innerhalb eines groesseren Programmes&#41;? <BR>Letzter Punkt: Ein Programm ohne Interrupt ist unkritisch;..mit timerinterrupt etwas komplizierter;...mit timer- und serialinterrupt <BR>kritisch:genuegt da &#39;&#39;immer&#39;&#39;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 &#40;zum Tasten entprellen&#41; und 1s-Takt &#40;zum Uhrzeit z&auml;hlen&#41; zu erzeugen. 5 min geht aber auch, einfach den Timer im Interrupt mit 1 oder 2 Bytes erweitern. <BR> <BR>Das mit der Priorit&auml;t ist meistens unkritisch. Beim Timer wei&szlig; man ja, wieviel Takte bis zum n&auml;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&auml;chste Interrupt zuschlagen kann. <BR> <BR>Die hohe Priorit&auml;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