Input Abfrage

OP #2880477
Lesenswert?

Hallo

ich hab da nen Problem bei einem Programm,
wäre super wenn mir dabei jemand helfen könnte.

Ich verwende den MPLAP C18 kompiler und den PIC18F26K20

Bei PORTB sollen die unteren 4 bit Eingänge sein und die oberen 
Ausgänge, welche auf High geschalten werden.
Das Problem liegt daran dass ich die unternen 4bits (Input) abfragen 
möchte ob irgentwo High anliegt aber die Prüfung mit der if Anweisung 
funktioniert nicht da der µC sie als immer erfüllt sieht trotz dass an 
allen Eingängen Low ist.

Die Eingänge sind mit Pulldown Widerständen auf Masse geschlten.

Die Platine, µC funktioniernen und die Oberen 4 bits gehen auch auf High 
nur




das Programm Lautet

1
C-Code
1
void PORT_Init(void);
2

3
void main (void)
4
{
5
PORT_Init();
6

7
  while (1)
8
  {
9
    if(PORTB!=0xf0)       
10
    {
11
    LATA=0x1;
12
    }
13
    Delay1KTCYx(50);
14
  }            
15

16
while(1);
17
}
18

19

20
void PORT_Init(void)
21
{  
22
  LATA=0x00;
23
  TRISA=0x00;
24
  LATA=0x00;
25
  
26
  LATB=0x00;
27
  TRISB=0x0f;
28
  LATB=0xf0;
29
}



Hätte jemand nen Vorschlag wie ich das prüfen bzw. abfragen soll,

danke für jede Hilfe

mgf
alex
#2880493
Lesenswert?

Wenn du eine UND Operation auf deinen Port anwendest, invertierst du 
alle anderen Pins bis auf das, das du abfragen willst. Konkret meine ich 
etwas wie:
1
if ( PINA & ( 1 << MEINBIT0 ) ) {
2
  // Bla;
3
}

Ich kenne mich in PIC nicht aus, aber geht sowas hier nicht in die 
richtige Richtung?
Gast #2880494
Lesenswert?

alex le. schrieb:
> > Das Problem liegt daran dass ich die unternen 4bits (Input) abfragen
> möchte ob irgentwo High anliegt aber die Prüfung mit der if Anweisung
> funktioniert nicht da der µC sie als immer erfüllt sieht trotz dass an
> allen Eingängen Low ist.
Suchst du vielleicht Bitmaskierung?

if(PORTB&0x0f)
...

Bitmanipulation speziell 
http://www.mikrocontroller.net/articles/Bitmanipulation#Bits_pr.C3.BCfen
#2880501
Lesenswert?

Verwendet man zur Pinabfrage nicht PINB anstelle von PORTB? Wenn der Pin 
als Eingang definiert ist, gibt PORTB doch lediglich über die Pull-Up 
Widerstände Informationen. Ob am Pin nun tatsächlich ein high oder low 
ist, wird doch über PINB in Erfahrung gebracht, oder täusche ich mich 
da?


Gruß
OP #2880558
Lesenswert?

Danke für die Hilfe, ich kenne Maskierung aber ich brauch das nicht da 
ich ja nur wissen will ob bei den Eingängen irgentwas sich verändert, 
ganz egal was.

ich will nur wissen ob PORTB nicht mehr 0xf0 ist, z.B: wenn ich irgent 
eine Eingang auf high lege

Eigentlich sollte es ja mit der

if(PORTB!=0xf0) gehen aber er sieht diese Bedingug immer als wahr obwohl 
alle Eingänge Low sind.

Das muss man andes machen glaub ich weil die PORT anfrage funktioniert 
ja nur wenn sie auf input sind oder?

danke für jede Hlfe

mgf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren