Hallo zusammen, Ich habe ein (kleines) Problem mit dem einlesen eines Tasterwertes. Meine Schaltung ist so aufgebaut, dass ich am Pin P3.0 einen Taster angehängt habe, der beim drücken 200ms auf 0 geht und dann wieder 1 ist. Mit dem nachfolgenden Code frage ich den Wert von P3.0 ab: if (eingang1 == 0) x = 1; else x = 0; if (x == 1) { P2 = 0x00FF; } Meine Frage wäre, wie ich eingang1 deklarieren muss, dass diese Variable direkt auf den Eingangspin zugreift - mir gehts nur um das Einlesen des Tastendrucks. Im main- teil habe ich noch die Richtung für P3 bestimmt: DP3 = 0x0000; Hier der ganze Code: #include <reg167.h> int wert = 63; int save; int wert_2; int wert_1, eingang1; int i, x; void t1_isr (void) interrupt 0x21 {//von 77 bis 0 oktal runterzaehlen if (eingang1 == 0) x = 1; else x = 0; if (x == 1) { P2 = 0x00FF; } wert_1 = wert % 8; save = wert / 8; wert_2 = save % 8; P2 = P2 & 0x0038; //0000000000111000 wert_1 = ( wert_1 << 0); //um 0 stellen auf P0-P2 verschieben P2 = P2 | wert_1; //bits auf wert_1 setzen P2 = P2 & 0x0007;//drei bits maskieren-> 0000 0000 0000 0111 wert_2 = (wert_2 << 3); P2 = P2 | wert_2; //bits setzen --wert; if (wert == -1) //auf oktal 77 zurücksetzen wert = 63; } void main (void) { DP2 = 0x003F; // unteren 6 bits auf output setzen P2 = 0x0000; //an der ersten stelle anfangen T01CON = 0x4400; //Timer 1 auf 210ms T1REL= 0x0000; //reloadwert für den Timer 1, 61A8 T1IC = 0x0050; //T0IE auf eins und, ILVL auf 4 DP3 = 0x0000; //das Portregister 3 auf input setzen, um den Eingangstaster abzufragen, siehe 6-15 IEN = 1; //globaler interruptenable -> immer setzen while(1){ } }
Hallo, schreib eingang1 = P3 & 0x0001; vor die if-Abfrage im Interrupt. Dann ist eingang1 0x0001, wenn P3.0 high ist, ansonsten 0x0000; Gruß, Axel
Hi Alex, Das hab ich schon gemacht aber es will nicht so recht funktionieren. Ist es eigendlich so, dass die Pins (Eingänge) auf High sind und man muss sie runterziehen oder sind sie auf Low? Und noch eine Frage hätte ich: wenn ich schreibe (wie du oben geschrieben hast (eingang1 = P3 & 0x0001;) ist das dann der P3.0- Eingang oder der P3.1- Eingang. lg und vielen Dank für deine Tipps Eder
Hallo, also das unterste Bit ist schon P3.0, wie solltest du das sonst ansprechen können? Steht aber auch im Handbuch (Kapitel 7-7). Die Pins haben aber keinen internen Pullup Widerstand, haben als Eingänge im unbeschalteten Zustand keinen definierten Pegel. Du solltest sie also extern entsprechend beschalten. Gruß, Axel
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.