Re: Auslesen porterweiterung Kategorie: Programmierung (von Werner - 27.07.2008 19:51) | ||
Als Antwort auf Auslesen porterweiterung von Jens - 27.07.2008 13:25 | ||
| ||
Hallo Jens, ich frage mit dem MAX7311 die Zustände von Tastern ab und habe sinngemä� folgende Routine bei mit eingebaut: int In; if ports.getcount(0) != 0 // Testen ob Interrupt erfolgt ist { sleep 50; // 50ms zum Tastenentprellen In = not (max7311.getw(MAX)); if (In & 0x0001) { // Taste 1 gedrückt } if (In & 0x0002) { // Taste 2 gedrückt } if (In & 0x0004) { // Taste 3 gedrückt } if (In & 0x0008) { // Taste 4 gedrückt } } Erklärung: Der Interrupt vom MAX7311 habe ich auf P 0 gelegt, welcher nicht als Interrupt, sondern als Counter genutzt wird. Durch das Abfragen mittels getcount() wird der Zähler zurück geliefert und intern wieder bei null begonnen. Diese Routine läuft bei mir in einer Hauptschleife. Zum Tastenabfragen habe ich einen sleep von 50ms eingebaut um die Tasten zu entprellen. Dann werden die Daten Invertiert um einen Taster, der gegen Masse schaltet als 1 zu erhalten. (geht aber auch mit einem einmaligen invertieren im Baustein siehe Hilfe zu max7311.setPIw() war bei mit aber aus anderen Gründen nicht sinnvoll.) Dann prüfe ich ob die einzelnen Bits gesetzt sind. Im Beispiel nur bis Taster 4. Die folgenden Werte für die Taster 5-16 sind dann: 0x0010, 0x0020, 0x0040. 0x0080, 0x0100, 0x0200, 0x0400. 0x0800, 0x1000, 0x2000, 0x4000. 0x8000 Das sollte dein Problem wohl lösen. Mfg Werner | ||
Antwort schreiben Antworten: |