Jak ustawić port P1 89c2051?

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
2xP
-
Posty: 3
Rejestracja: 21 gru 2005, 16:30

Jak ustawić port P1 89c2051?

Post autor: 2xP » 25 maja 2006, 18:34

Witam

Chciałem zrobić układ z edw 1/2005 str. 56 – radiowe zdalne sterowanie na pasmo 433 mhz, ale mam problem z zaprogramowaniem mikrokontrolerów. Programy, które pobrałem z sieci z działu dawnload nie chcą działać, więc postanowiłem napisać własny w c.
Poniżej jest zamieszczony program, który ma działać na 89c2051, program został napisany kompilatorem ride-51 (wzorowałem się na programie z książki: Programowanie mikrokontrolerów 8051 w języku c). Mikroprocesor ma za zadanie odczytać stan wejść portu P3(P3.0, P3.1, P3.4, P3.5), przy czym tutaj ważne są zera, następnie powinien odpowiednio wystawić na wyjściu P1(P1.7, P1.6, P1.5, P1.4) jedynki.
Mój problem polega na tym, że o ile mikrokontroler odczyta stan wejścia P3 to w żaden sposób nie mogę zmusić go do tego aby wystawił na wyjście to co ja chce. Możliwe jest kilka kombinacji np. 0111 -> 1000, 1011 -> 0100, 0101 -> 1010 itd. Najlepiej jakby były ustawiane na raz wszystkie bity portu P1.
Jeżeli ktoś mi będzie w stanie pomóc to będę wdzięczny.


2xP


#include<reg51.h>
#include<stdio.h>


unsigned char buf;

void Delay(unsigned int time)
{
unsigned int j;
while (time>=1)
{
for(j=0;j<65;j++);
time--;
}
}

char KbdRead() // odczyt stanu bitów portu P3
{
unsigned char b;

b = PortKey;

return (b);
}


void main(void)
{

P1=0x00;
P3=0x00;

while(1)
{
buf = KbdRead();
if(buf)
{
Delay(20);
if (buf == KbdRead())
{

tutaj trzeba wpisać coś co spowoduje ustawienie bitów portu P1 (P1.7, P1.6, P1.5, P1.4) . Ja próbowałem następująco:


Delay(20);
if(P3 == 0xFE) // P3.0 -> 1111 1110
{
P1 = 0x80; //P1.7 -> 1
}


Delay(20);
if(P3 == 0xFF)
{
P1 =0x00;
}

//itd. Ale mi nie wychodzi (w symulatorze jeszcze by działało a po zaprogramowaniu 89c2051 nie chce)

}
}

}
}

ODPOWIEDZ