DUVIDA

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

DUVIDA

Mensagempor rebelk » 24 Nov 2006 15:45

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.
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Re: DUVIDA

Mensagempor andre_luis » 24 Nov 2006 16:03

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'.
Editado pela última vez por andre_luis em 27 Nov 2006 07:55, em um total de 5 vezes.
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor rebelk » 24 Nov 2006 17:16

VOU TENTAR , VALEU !
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor rebelk » 24 Nov 2006 17:50

ANDRE DESTE MODO NÃO DA , POIS EU ESTOU ULTILIZANDO OS OUTROS BITS DA PORTA P3 PARA OUTRA FINALIDADE !
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Renie » 24 Nov 2006 20:13

Olá Rebek!

Não sei se resolve mas, pode tentar:

P3 = P3 | ( (char)( (int)VARIAVEL >> 8 ) & 3);
[]'s
Renie
-------------------------------------------------------------------------------------------------------------
Meu velho site com eletrônica praticamente parado http://www.reniemarquet.com
Nosso Blog http://artemadeiraevida.blogspot.com.br
Renie
Word
 
Mensagens: 732
Registrado em: 11 Out 2006 22:35
Localização: RJ - Niterói - Brasil

Mensagempor rebelk » 24 Nov 2006 20:18

valeu renie !!!! vou tentar !!
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Maurício » 24 Nov 2006 20:21

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.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor rebelk » 25 Nov 2006 19:52

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);
                    }
           
       }
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Renie » 25 Nov 2006 21:07

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!
[]'s
Renie
-------------------------------------------------------------------------------------------------------------
Meu velho site com eletrônica praticamente parado http://www.reniemarquet.com
Nosso Blog http://artemadeiraevida.blogspot.com.br
Renie
Word
 
Mensagens: 732
Registrado em: 11 Out 2006 22:35
Localização: RJ - Niterói - Brasil

Mensagempor andre_luis » 27 Nov 2006 07:57

Pessoal, já corrigi minha sugestao.
Deem um'olhada lá acima....
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor rebelk » 27 Nov 2006 12:57

OBRIGADO PELA DICA RENIE !
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x