Página 1 de 1
DUVIDA

Enviado:
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

Enviado:
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'.

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

Enviado:
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 !

Enviado:
24 Nov 2006 20:13
por Renie
Olá Rebek!
Não sei se resolve mas, pode tentar:
P3 = P3 | ( (char)( (int)VARIAVEL >> 8 ) & 3);

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

Enviado:
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.

Enviado:
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);
}
}

Enviado:
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!

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

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