Gast
#301175
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){
}
}