já to naprogramoval takhle, ale zatím netuším jestli to vůbec bude fungovat. Potřeboval jsem komunikaci oběma směry.
/* ========================================================================== */
/* ser data cteni */
/* ========================================================================== */
ser_data_cteni:
maska2=0x01; // 0000 0001
P3|=0x00;
if(P3==0x40)
{
cteni=1;
}
if(cteni==1)
{
cekej(1,5bitu) //cekej 1,5 bitu
for(ii=0;ii<8;ii++)
{
if(P3==0x40)
{
data_in |= maska2;
cekej(1bit); // 1bit
}
else
{
data_in &=0xff;
}
}
maska2 << 1;
cteni=0;
cekej(0,5bitu)
}
/* ========================================================================== */
/* ser data zapis */
/* ========================================================================== */
ser_data_zapis:
int data_out;
int maska=0x80;
int ii;
P3&=0xDF; // START bit =0
cekej(1bit); //cekej 1bit
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;
cekej(1bit); //cekej 1bit
}
P3|=0x20; // vystup log 1 -> stop bit = 1
cekej(1bit); //cekej 1bit
s tím že fce cekej(cislo) je dána přesně přerušením od čítače/časovače a zbejvá nastavit na nejmenší krok a pak přesně dopočítat časy aby to komunikovalo 38400 bit/s.
P.S.: to nahoře anonimní je můj dotaz