Frage

Die Verbindung wird als ein Infrarot-Sensor-Schaltung folgt, die 0 oder 5 V ergibt sich in Abhängigkeit von geschlossenen oder offenen Stromkreis-Ausgangsleitung an Port 2_0 Pin des Mikrocontrollers 8051 philips.Problem ist, wenn i tun dies die Schaltungswert durch den aktuellen Wert überschrieben werden auf 2_0 Hafen führte immer geht on.Here mein Code (in keil c) ich glaube, ich habe nicht richtig P 2_0 als Eingang konfiguriert

void MSDelay(unsigned int);

sbit led=P1^0;

void main()
{
    unsigned int var;
    P2=0xFF;
    TMOD=0x20;
    TH1=0xFD;
    SCON =0x50;
    TR1=1;

    while(1)
    {
        var=P2^0;
        if(var==0)
        {  
             led=1;
             SBUF='0';
             while(TI==0);
             TI=0;
             MSDelay(250);
        } 
        else
        {   
            led=0;
            SBUF='9';
            while(TI==0);
            TI=0;
            MSDelay(100);
        }
    }       
}
War es hilfreich?

Lösung

jschmier einen guten Punkt hat. Auch der Anschluss möglicherweise nicht richtig konfiguriert werden, oder ist es etwas in der Schaltung, die die LED verursacht zu wechseln ab und zu sehr schnell, so dass es aussieht wie es die ganze Zeit ist.

Andere Tipps

Sie verwenden in der Regel die sbit Datentyp für P2_0 ein Bit innerhalb eines speziellen Funktionsregisters (SFR).

C51: READING von einem Eingangsport (modifiziert)

sfr P2 = 0xA0;
sbit P2_0 = P2^0;
...
P2_0 = 1;    /* set port for input */
var = P2_0;  /* read P2_0 into var */

Es ist wichtig zu beachten, dass sbit Variablen nicht innerhalb einer Funktion deklariert werden. Sie müssen außerhalb des Funktionskörpers deklariert werden.


Eine andere Möglichkeit ist, alle 8 Pins von P2 zu lesen und dann die unerwünschten Bits maskieren.

char var;     /* define 8 bit variable */
P2 = 0xFF;    /* set P2 for input */
var = P2;     /* read P2 into var */
var &= 0x01;  /* mask off unwanted bits */

Anstatt lesen P2 oder den P2_0 Stift in eine unsigned int (16 Bit), könnten Sie eine char (8 Bit) oder Einzel Bit auf Speicher zu speichern.

char var;
...
var = P2;

oder

bit var;
...
var = P2_0;

Eine weitere Option kann das char bitadressierbaren .

char bdata var;      /* bit-addressable char */
sbit var_0 = var^0;  /* bit 0 of var */
...
var = P2;       /* read P2 into var */
if(var_0 == 0)  /* test var_0 (bit 0 of var char) */
{
    ...
}

Hier finden Sie weitere nützliche Informationen in dem Keil Cx51 Compiler-Benutzerhandbuch RELATED_LINKS.

Hinweis: Die meisten meiner Erfahrung ist 8051 in der Montage. Die C obigen Beispiele können nicht zu 100% korrekt sein.

Vielen Dank ... meine Codierung Werke

Und ich lernen, wie Eingangs-Port zu definieren und die Daten lesen

#include<reg51.h>     
#define opp P1
#define ipp P0
sbit op =P1^0;
sbit ip =P0^0;

main()
{

    unsigned int value;
    P0=0xFF;
    value=P0;
    value &=0x01;
    if(value==0)
    {
        P1=0x01;
    }
    else
    {
        P1=0x00;
    }  
}    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top