Página 1 de 1

DUVIDA

MensagemEnviado: 24 Nov 2006 15:45
por rebelk
COMO FAÇO PARA ESCREVER O VALOR DE UMA VARIAVEL DE 10 BITS NA PORTA DO AT89S8252 SENDO QUE A PARTE MENOS SIGNIFICATIVA VAI SER A P1 E OS DOIS BITS MAIS SIGNIFICATIVO
BIT 8 É O P3_0 BIT 9 É O P3_1 , ALGUEM PODE ME AJUDAR,
ESTOU PROGAMANDO EM C COM O KEIL.

Re: DUVIDA

MensagemEnviado: 24 Nov 2006 16:03
por andre_luis
P1 = (char)VARIAVEL ;
P3 = (char)( (int)VARIAVEL >> 8 );

Talvez haja alguma redundancia no casting, mas acho que funciona.

+++

AGORA VAI FUNCIONAR : P3 |= (char)( (int)VARIAVEL >> 8 );

Pois utilizando a operacao lógica OR e, graças ao casting, os bits nao usados serao transformados em 'zero-a-esquerda'.

MensagemEnviado: 24 Nov 2006 17:16
por rebelk
VOU TENTAR , VALEU !

MensagemEnviado: 24 Nov 2006 17:50
por rebelk
ANDRE DESTE MODO NÃO DA , POIS EU ESTOU ULTILIZANDO OS OUTROS BITS DA PORTA P3 PARA OUTRA FINALIDADE !

MensagemEnviado: 24 Nov 2006 20:13
por Renie
Olá Rebek!

Não sei se resolve mas, pode tentar:

P3 = P3 | ( (char)( (int)VARIAVEL >> 8 ) & 3);

MensagemEnviado: 24 Nov 2006 20:18
por rebelk
valeu renie !!!! vou tentar !!

MensagemEnviado: 24 Nov 2006 20:21
por Maurício
experimenta isto:

cpp code
#define BIT8     P3_x
#define BIT9 P3_x

int var; // variável 10 bits

P1 = var;
BIT8 = var && 0x0100;
BIT9 = var && 0x0200;


[]'s

RETI.

MensagemEnviado: 25 Nov 2006 19:52
por rebelk
consegui assim , o que vcs acham ?

Código: Selecionar todos
         #include <at898252.h>
         #include <binario.h>
           #include <delay_ms.h>
    #include <delay_us.h>
   //    #include <make16.h>

         #define  SAIDA     P1   
         #define  D8        P3_0
         #define  D9        P3_1
 
         #define  TENCAO    P3_2
   
         unsigned int     VALOR=0;

//*********************************************************************************************
//*********************************************************************************************

 ENVIA_SAIDA( unsigned  int DADO )
  {
       
      union
          {
             unsigned int bit16;
             unsigned char matriz_bit8[2];
          }  dado_valor;


        dado_valor.bit16=DADO;                                                                 
       switch(dado_valor.matriz_bit8[0]) // atualiza  o bayt + significativo
            {
                  case 0:   
                 {
                      D8=0;
                     D9=0;
                        break;
                }
               case 1:   
                 {
                      D8=1;
                     D9=0;
                        break;
                }
               case 2:   
                 {
                      D8=0;
                     D9=1;
                        break;
                }
               case 3:   
                 {
                      D8=1;
                     D9=1;
                        break;
                }
          }
 
        SAIDA= dado_valor.matriz_bit8[1];  // atualiza o bayt - significativo;
  }
/***********************************************************************/
/***********************************************************************/
      main()
       {   
                     TMOD=0X11;                                                         
                   
                     D9=0;
                 D8=0;
                 SAIDA=0;
                   
                    while(1)
                    {                                 
                       
                       VALOR++;                  
                   ENVIA_SAIDA( VALOR );
                  if( VALOR == 1025 ){ VALOR=0;  TENCAO=!TENCAO; }
                     delay_ms(50);
                    }
           
       }

MensagemEnviado: 25 Nov 2006 21:07
por Renie
Olá Rebelk!

Posso ser honesto?

Se resolve o seu problema, ok, mas, pelo pouco que sei, acho muito tempo perdido! (quanto mais comando, mais tempo perdido!)!

Se dar a volta no quarteirão e chegar no ponto desejado que poderia
ser acessado por uma vila com muito menos tempo resolve é escolha
sua!

MensagemEnviado: 27 Nov 2006 07:57
por andre_luis
Pessoal, já corrigi minha sugestao.
Deem um'olhada lá acima....

MensagemEnviado: 27 Nov 2006 12:57
por rebelk
OBRIGADO PELA DICA RENIE !