Página 1 de 1
Alterando registradores em linguagem C.

Enviado:
01 Mai 2009 09:41
por fabio_pic
Senhores,
Estou precisando mexer no registrador SPBRG para alterar o baud rate da USART (dentro do main) mas ocorre erro na compilação.
Tentei colocar o registrador e seu valor como é feito no MikroC, colocar o mesmo comando dentro das diretivas #asm e #endasm mas nada funcionou.
Como é que se faz isso? Alguém sabe?
Abraços,
Fábio.
Re: Alterando registradores em linguagem C.

Enviado:
01 Mai 2009 10:09
por fabim
fabio_pic escreveu:Senhores,
Estou precisando mexer no registrador SPBRG para alterar o baud rate da USART (dentro do main) mas ocorre erro na compilação.
Tentei colocar o registrador e seu valor como é feito no MikroC, colocar o mesmo comando dentro das diretivas #asm e #endasm mas nada funcionou.
Como é que se faz isso? Alguém sabe?
Abraços,
Fábio.
torão, olha lá no include desse uC, veja se o SPBRG esta definido para um endereço.
Se não estiver, pegue o dataSHIT dele, vai lá na tabela de SFR´s e olhe o nome dele e o endereço.
Só acrescentar no include e ja éra.
Isso acontece muito comigo..
Fabim

Enviado:
01 Mai 2009 10:16
por fabio_pic
Fabim,
Se eu colocar no include, o pic só fará isso uma vez não é mesmo?
A idéia é alterar esse registrador (e outros) após os primeiros settings e dependendo do estado de um botão, a configuração dos mesmo será alterada. Mais ou menos assim:
main
{
if (input(botao))
{
spbrg=x; // seta a usart para Xbps.
}
if (!input(botao))
{
spbrg=y; // seta a usart para Ybps.
}
}
Será que ficou um pouco mais claro?
Obrigado,
Fábio.

Enviado:
01 Mai 2009 12:34
por fabim
sim primo, eu ja tinha entendido, é você que não entendeu.
EX,.
short SPBRG absolute 0x00yy;
main.(){
spbrg = 100;
spbrg = 80;
spbrg = 20;
e daí cabecinha, mais que preguiça de ler o datashit eim ?
Esqueceu que esse fulano aí é um endereço ram ? Pode ser setado uma makro, um nome conform defini À cima.
Tendeu agóra ??
MEsma coisa em um PIC18.
LOOK.
vocÊ sabe que o LATA = 0x0008 certo ?
Agóra,
short PEGATIU absolute 0x0008;
ja se fosse definir uma PORT, que é volatil.
volatile short PEGATIU absolute 0x0008;
LATA = 10; é o mesmo que PEGATIU = 10;

Enviado:
01 Mai 2009 12:59
por fabio_pic
fabim,
Eu li o datasheet algumas vezes. As minhas dificuldades estão no fato de que comecei a programação em uC em C e não faz muito tempo. Por isso quando aparecem as questões de endereçamento eu "como um pouco de capim".
Por exemplo, nunca tinha usado a expressão "short SPBRG absolute 0x00yy;".... mas vou testar.
Obrigado,
Fábio.

Enviado:
01 Mai 2009 17:03
por Maia
Olá Fabio,
Geralmente vc não precisa se preocupar com endereço dos registradores, o #include do MCU que vc está usando já faz isso. Qual compilador e MCU vc está usando?

Enviado:
01 Mai 2009 18:06
por fabim
Xaréx..
Qual o erro que esta sendo informado pelo compilador.
De um CTRL+C & V aqui pra eu dar uma zoiada, e qual compilador você esta brincando, que esta dando este problema ?
Fabim

Enviado:
06 Mai 2009 08:47
por fabio_pic
Pessoal,
Estou usando 16F877A escrito em C.
Agradeço a ajuda de todos.
Fábio.

Enviado:
06 Mai 2009 14:51
por Sergio38br
Parece que é CCS, pelo codigo postado acima.
[ ]'s
Sergio