Página 1 de 1
Unir TH0, TL0 com uma variável inteira

Enviado:
06 Mai 2007 20:36
por henriquethiesen
Olá amigos,
Gostaria de escrever nos registradores TH0 e TL0 fazendo uma atribuição a uma variável do tipo int, por exemplo:
Timer0 = 0x1234;
iria fazer
TH0 = 0x12;
TL0 = 0x34;
Tem como?
Obrigado
Henrique Thiesen

Enviado:
06 Mai 2007 22:33
por Maurício
Pode haver uma forma, mas, inicialmente não é possível.
No Keil, pra que isso fosse possível, TH0 deveria suceder TL0 imediatamente, como acontece com os registradores do TIMER2 (TL2,TH2). TIMER2 vc pode endereçar como se fosse uma variável inteiro.
No 8051 não é possível porque os registradores de TIMER0 estão separados por TL1.
Acho que nesse caso, a forma mais fácil é endereçar por 8 bits, mesmo.
[]'s
RETI.

Enviado:
07 Mai 2007 16:37
por henriquethiesen
Ok Maurício
Achei que fosse algo fácil de fazer. Vou continuar fazendo com byte mesmo.
Até mais, obrigado pela atenção

Enviado:
08 Mai 2007 21:19
por barboza
Pode tentar com macros
#define lo(numero) (uint8_t) (numero)
#define hi(numero) (uint8_t) (((uint16_t) (numero)) >>
#define TIMER0(valor) \
TH0 = hi(valor); \
TL0 = lo(valor)
ai usa assim
TIMER0(0x1234);

Enviado:
10 Mai 2007 15:27
por henriquethiesen
Obrigado barboza, funcionou muito bem. Isso mesmo que eu precisava.
Eu ainda não conhecia as function-like macros. O legal que isso é feito em tempo de compilação e não ocupa memória do microcontrolador.
Valeu, até mais

Enviado:
31 Ago 2007 18:42
por rebelk
Barboza vc poderia me explicar melhor , pois eu não entendi
Pode tentar com macros
#define lo(numero) (uint8_t) (numero)
#define hi(numero) (uint8_t) (((uint16_t) (numero)) >>
#define TIMER0(valor) \
TH0 = hi(valor); \
TL0 = lo(valor)
ai usa assim
TIMER0(0x1234);
me mostra um exemplo .

Enviado:
31 Ago 2007 23:10
por barboza
Sim, é isso ai.
Você acabou de fazer o proprio exemplo.