E sad radi samo slanje a prijem ne mogu da isprobam posto ne znam kako da u hyperterminalu otkucam nesto
pa vam saljem kod da pogledate da li je ok ono sto sam pisao i da li bi mogao da bude optimizovaniji.
void salji(char poruka[])
{
char pom;
unsigned short i,br;
for(i=0;i<strlen(poruka);i++)
{
RB5_bit=0; //start bit
Delay_us(104);
pom=poruka[i];
br=0;
while(br<8)
{
RB5_bit=pom;
Delay_us(101); //101us zbog pomeranja koje traje 1us, inkrementacije 0.5us i povratka na pocetak 1us.
pom>>=1;
br++;
}
RB5_bit=1; //stop bit
Delay_us(104);
}
}
void main() {
char poruka[]="Unesi broj ";
char prijem[7];
// char pom;
unsigned short i;//,br;
TRISA=0x00;
PORTA=0x00;
TRISB=0x04; //Drugi pin PORTB je ulazni(RX)
PORTB=0x24; //Pinovi 2 i 5 su postavljeni na visok nivo(stop bit za TX i RX)
//Slanje podataka(na 5. pin PORTB)
salji(poruka);
//Prijem podataka(na 2. pin PORTB)
while(1)
{
if(RB2_bit==0) //Da li je stigao START bit na pin 2?
{
Delay_us(52); //Jeste, saceka 52us da bit dodje do pola
if(RB2_bit==0) //Proveri jos jednom da li je u pitanju START bit
{
for(i=0;i<strlen(prijem);i++)
{
Delay_us(104); //Jeste, saceka 104us da dodje na pola I bita
prijem[i]=RB2_bit; //i smesti ga u niz, ponovi ovo za ostale bitove
}
}
salji("Posalo si broj ");
salji(prijem);
}
}
}