Unir TH0, TL0 com uma variável inteira

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Unir TH0, TL0 com uma variável inteira

Mensagempor henriquethiesen » 06 Mai 2007 20:36

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
henriquethiesen
Nibble
 
Mensagens: 50
Registrado em: 12 Out 2006 14:10

Mensagempor Maurício » 06 Mai 2007 22:33

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.
"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 henriquethiesen » 07 Mai 2007 16:37

Ok Maurício

Achei que fosse algo fácil de fazer. Vou continuar fazendo com byte mesmo.

Até mais, obrigado pela atenção
henriquethiesen
Nibble
 
Mensagens: 50
Registrado em: 12 Out 2006 14:10

Mensagempor barboza » 08 Mai 2007 21:19

Pode tentar com macros

#define lo(numero) (uint8_t) (numero)
#define hi(numero) (uint8_t) (((uint16_t) (numero)) >> 8)

#define TIMER0(valor) \
TH0 = hi(valor); \
TL0 = lo(valor)


ai usa assim

TIMER0(0x1234);
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor henriquethiesen » 10 Mai 2007 15:27

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
henriquethiesen
Nibble
 
Mensagens: 50
Registrado em: 12 Out 2006 14:10

Mensagempor rebelk » 31 Ago 2007 18:42

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

Mensagempor barboza » 31 Ago 2007 23:10

Sim, é isso ai.
Você acabou de fazer o proprio exemplo.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar


Voltar para 8051

Quem está online

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

cron

x