softwarový sér. port u AT89C51ED2

Takže abych vše upřesnil. Zapojení vypadá takto:

mám tam připojený krystal 12MHz. Ale popravdě moc nevím jak to zapracovat do toho čítače časovače.Něco jsem napsal,ale jestli je to ok to nevím,zkusím to vyzkoušet.[code]
/* ========================================================================== /
/
ser data cteni /
/
========================================================================== /
void cteni ()
{
mikros=0;
while(mikros==39){ //dokud neubehne 1,5 bitu vrat (39 mikrosekund)
//nop(); // nic nedelej
}
for(ii=0;ii<8;ii++)
{
mikros=0;
if(P3==0x40)
{
data_in |= maska2;
}
else
{
data_in &=0xff;
}
while(mikros==26){ //dokud neubehne 1 bit vrat (26 mikrosekund)
//nop();
}
maska2 << 1;
}
while(mikros==13){ //dokud neubehne 0,5 bitu vrat (13 mikrosekund)
//nop(); // nic nedelej
}
}
/
========================================================================== /
/
ser data zapis /
/
========================================================================== /
void zapis ()
{
maska=0x80;
P3&=0xDF; // START bit =0
mikros=0;
while(mikros==26){ //dokud neubehne 1 bit vrat (26 mikrosekund)
//nop(); // nic nedelej
}
for (ii=0;ii<9;ii++)
{
if (maska & data_out)
{
P3|=0x20; // vystup log 1
}
else
{
P3&=0xDF; // vystup log 0
}
data_out = data_out << 1;
while(mikros==26){ //dokud neubehne 1 bit vrat (26 mikrosekund)
//nop(); // nic nedelej
}
mikros=0;
}
P3|=0x20; // vystup log 1 → stop bit = 1
while(mikros==26){ //dokud neubehne 1 bit vrat (26 mikrosekund)
//nop(); // nic nedelej
}
}
/
========================================================================== /
/
funkce preruseni /
/
========================================================================== */
void timer0(void) interrupt 1
{
static int i;
if(i<1000){ //casova smycka 1ms
i++;
}
else
{
ms++;
i=0;
}
mikros++; // pocita mikro sekundy >> jeden krok citace/casovace
ser_data_cteni:
maska2=0x01; // 0000 0001
P3|=0x00;
if(P3==0x40)
{
cteni();
}
ser_data_zapis:
if(data_out!=0){
zapis();
}
return;
}

/* ========================================================================== /
/
HLAVNI FUNKCE /
/
========================================================================== /
void main()
{
/
========================================================================== /
/
nastaveni citace /
/
========================================================================== */

TMOD = 0x02;
TH0 = 256-1;
TR0 = 1;
ET0 = 1;
EA = 1;

while(1)
{

}[/code]

:arrow_right: administrator: příspěvek byl upraven
Externí soubor byl uploadnut na server.