Página 1 de 1

usart por soft com interrupçao MIKROC

MensagemEnviado: 11 Mar 2010 22:18
por cristian
me ajudei ai por favoz fiz o codigo pra receber os caracteres pela serial via soft ( 2 seriais ) colocquei o interrpçao externa para saber exatamente o inicio do start bit ai espero o tempo de 1,1/2 bit para para testar a porta ....mas sempre da 11111110 testei com frequenccimetro os tempos estao certos ára transmititr dar certo agora receber

o que sera q esta havendo

baixei o baudrate para 2400 era 9600 mas mesmo assim

Código: Selecionar todos

if(PIR2.TMR3IF)
{
tmr3h=254;         //255
tmr3l=190;         //174=56us
L=~L ;
LED=L;
nbit++;
if(nbit<=8)//8bit sem o stop bit
{
if(rxpin)//testa porta rb0
{
//setbit(usart2rx,0);

usart2rx=usart2rx<<1;
usart2rx=usart2rx|1;
}else{
      usart2rx=usart2rx<<1;
      }
}else{
      if(rxpin)
      {
      usart2_rec=1;//byte recebido
      esclcd=1;
       T3CON.TMR3ON=0;//desliga timer3
        PIE2.TMR3IE=0;//INT TIMER3
        INTCON.INT0IF=0;
      INTCON.INT0IE=1; //habilita int ext
       erro_usart2=0;
       led=0;
       nbit=0;
        fim=1;

     
      }

//--------------------------- int ext,

//-------------------------------------- int ext
 if(INTCON.INT0IF)                        //INT EXT 0
{
led=1;
EXT=1;
usart2rx=0;
tmr3h=252;
 tmr3l=52;  //625,92us                    //CARREGA O VALOR DO TIME  156,8uS 1BIT 1/2
T3CON.TMR3ON=1;                           //LIGA TIMER3
PIE2.TMR3IE=1;//INT TIMER3
INTCON.INT0IE=0;                           //DESATIVA INT EXT
INTCON.INT0IF=0;                           //LIMPA FLAG
}//INT EXT 0


MensagemEnviado: 11 Mar 2010 22:49
por Sergio38br
Cristian , o LSB vem primeiro ( rotaciona para a direita...)..

[ ]`s
Sergio

MensagemEnviado: 12 Mar 2010 14:11
por cristian
ja fiz isso esta na outra parte do codigo

MensagemEnviado: 15 Mar 2010 19:07
por cristian
ninguem no forum fez um comunicaçao usart por soft?com interrupçao?


estou testando bem no meio de cada bit e mesmo assim so da erro

MensagemEnviado: 15 Mar 2010 19:19
por vtrx
Tem muita coisa a respeito disso,mas em ASM...

MensagemEnviado: 15 Mar 2010 19:57
por cristian
onde eu poderia tentar converter

MensagemEnviado: 16 Mar 2010 22:14
por cristian
o calculo q usei ´eo seguinte

1/9600 = Tbit (104us)

ajustei o tempo para no frequencimetro ler 208us esta correto quando gera a int do timer inverte o estado do led entao tenho q ler no frequencimetro 208us que dar uma frequcnia de 4807hz


na metde do bit 52us lei o estado da porta ...e assim vai ...nao teria erro