nao consigo acionar chave
2 participantes
Página 1 de 1
nao consigo acionar chave
- Código:
while (1)
{
Delay10KTCYx(500);
LED_AMARELO=! (LED_AMARELO);
Delay10KTCYx(500);
LED_VERMELHO=! (LED_VERMELHO);
if (BOTAO_1)
{
LED_VERDE=1;
}
}//end while
Essa lógica está errada?
Ou falta alguma coisa para conseguir acionar o LED depois de pressionar a chave?
ja defini todas as portas
theus_mecatronica- Mensagens : 9
Data de inscrição : 29/04/2010
Re: nao consigo acionar chave
Olá theus_mecatronica,
A lógica não está errada.
Do jeito que está ao apertar o botão o LED verde acenderá e ficará acesso para sempre enquanto os outros ficarão piscando.
Se não está acontecendo isto eu recomendo a você verificar se a configuração do botão, feita antes do while(1), está como entrada digital e que os LEDs estão configurados como saídas digitais.
Provavlemente você terá que colocar
ADCON1 |=0x0F;
na parte de configuração, uma vez que RE1 e RE0 também são portas analógicas.
Vê aí se dá certo!
Espero ter ajudado,
Bruno S. Avelar
A lógica não está errada.
Do jeito que está ao apertar o botão o LED verde acenderá e ficará acesso para sempre enquanto os outros ficarão piscando.
Se não está acontecendo isto eu recomendo a você verificar se a configuração do botão, feita antes do while(1), está como entrada digital e que os LEDs estão configurados como saídas digitais.
Provavlemente você terá que colocar
ADCON1 |=0x0F;
na parte de configuração, uma vez que RE1 e RE0 também são portas analógicas.
Vê aí se dá certo!
Espero ter ajudado,
Bruno S. Avelar
Re: nao consigo acionar chave
Mais uma vez obrigado pela atenção Bruno, eu configurei as portas sim e creio que estejam certas. So troquei o LED pela BUZINA
- Código:
#include <p18cxxx.h> // Necessário para que o compilador adicione a biblioteca
// com as definições do PIC selecionado no projeto, neste
// caso, o modelo 18F4550.
#include <delays.h> // Biblioteca padrão de rotinas de atraso do C18 Microchip
// mais informações nos arquivos de ajuda da biblioteca C18
// presentes na propria pasta de instalação, por exemplo,
// C:\MCC18\doc\hlpC18Lib.chm
// Procure pelo item: "Delay Functions"
/** D E F I N E S ************************************************************/
// LED's do Kit PICMINAS: saida digital
//atribuição: 0 = LED desligado
// 1 = LED ligado
#define BUZINA PORTCbits.RC1
#define BOTAO_1 PORTEbits.RE1
/** V A R I A V E I S G L O B A I S ****************************************/
/** P R O T O T I P O S P R I V A D O S ***********************************/
void ConfiguraSistema (void);
void Delay (void);
void Delay_precisao (void);
/** F U N C O E S ************************************************************/
/******************************************************************************
* Funcao: void main(void)
* Entrada: Nenhuma (void)
* Saída: Nenhuma (void)
* Descrição: Função principal do programa. O termo "main" significa principal,
* pois esta é a primeira a ser chamada após o reset do
* microcontrolador.
* Todas as outras funções sao chamadas a partir da "main".
*****************************************************************************/
void main(void)
{
ConfiguraSistema();
BUZINA=0;
{
if (BOTAO_1)
{
BUZINA = !(BUZINA); //Inverte o nivel logico do LED vermelho
}
}//end while
}//end main
void ConfiguraSistema (void)
{
// Configura LED's do Kit PICMINAS: saida digital
TRISCbits.TRISC1=0;
TRISEbits.TRISE1=1; // RD1: saida digital - LED_VERMELHO
}//end ConfiguraSistema
void Delay (void)
{
Delay10KTCYx(240); //delay de 200ms
Delay10KTCYx(60); //delay de 50ms
}//end Delay
void Delay_precisao (void)
{
Delay10KTCYx(240); //delay de 200ms
Delay10KTCYx(59);
Delay1KTCYx(9);
Delay100TCYx(9);
Delay10TCYx(9);
Delay1TCY();
Delay1TCY();
Delay1TCY();
Delay1TCY();
Delay1TCY();
Delay1TCY();
}
extern void _startup (void); // See c018i.c in your C18 compiler dir
// Alocação da função de tratamento do "reset" da aplicação principal
// no endereço 0x800 da memória de programa
#pragma code REMAPPED_RESET_VECTOR = 0x000800
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code
theus_mecatronica- Mensagens : 9
Data de inscrição : 29/04/2010
DESCULPAS
Mil desculpas Bruno, mas nao sabia deste detalhe do forum. Mas a partir de hoje seguirei na risca. Obrigado pela dica.
theus_mecatronica- Mensagens : 9
Data de inscrição : 29/04/2010
Re: nao consigo acionar chave
Olá theus_mecatronica,
Compilei o código que você colocou no post acima. Para ele funcionar você deve colocar na parte de configuração do sistema a linha:
Se seu projeto for apenas digital basta incluir esta linha de código antes da configuração das portas.
Espero ter ajudado,
Bruno S. Avelar.
Compilei o código que você colocou no post acima. Para ele funcionar você deve colocar na parte de configuração do sistema a linha:
- Código:
ADCON1 |=0x0F;
Se seu projeto for apenas digital basta incluir esta linha de código antes da configuração das portas.
Espero ter ajudado,
Bruno S. Avelar.
Re: nao consigo acionar chave
Mais uma vez problema resolvido muito obrigado Bruno.
theus_mecatronica- Mensagens : 9
Data de inscrição : 29/04/2010
Re: nao consigo acionar chave
- Código:
if (BOTAO_1)
{
while(1)
{
BUZINA =! (BUZINA);
LED_VERDE =! (LED_VERDE);
Delay10KTCYx (200);
Delay10KTCYx (200);
Delay10KTCYx (200);
Delay10TCYx (2);
Delay1TCY();
Delay1TCY();
Delay1TCY();
Delay1TCY();
BUZINA =! (BUZINA);
LED_VERDE =! (LED_VERDE);
Delay10KTCYx (200);
Delay10KTCYx (200);
Delay10KTCYx (200);
Delay10TCYx (2);
Delay1TCY();
Delay1TCY();
Delay1TCY();
Delay1TCY();
Juro que tentei Bruno, mas nao consegui colocar como codigo, caso consiga responder minha pergunta poderia ensinar-me tambem a colocar como "codigo"? Queria saber como faço para interromper o comando while apertando o botao RE2 por exemplo. Obrigado e desulpe-me.
theus_mecatronica- Mensagens : 9
Data de inscrição : 29/04/2010
Re: nao consigo acionar chave
Olá
Como colocar o texto na janela de código: Basta escrever o código normalmente como você tem feito, no final do código voce deve escrever [/code] e no início do código voce deve escrever [code]. Para o seu ficar certo faltou só a barra no final. Eu arrumei para você.
Sobre sua dúvida:
É possível sair de um while(1) usando o comando go to. Porém hoje em dia consideramos hediondo um código em C com esta sintaxe (eu nem tanto, mas é o que dizem). Se você puder, use um pino do PORTB que possua interrupção e trate o código na interrupção, se você precisar mesmo do RE2 recomendo que pense em outra lógica para resolver este problema sem ter que sair do loop infinito.
Espero ter ajudado,
Bruno S. Avelar
Como colocar o texto na janela de código: Basta escrever o código normalmente como você tem feito, no final do código voce deve escrever [/code] e no início do código voce deve escrever [code]. Para o seu ficar certo faltou só a barra no final. Eu arrumei para você.
Sobre sua dúvida:
É possível sair de um while(1) usando o comando go to. Porém hoje em dia consideramos hediondo um código em C com esta sintaxe (eu nem tanto, mas é o que dizem). Se você puder, use um pino do PORTB que possua interrupção e trate o código na interrupção, se você precisar mesmo do RE2 recomendo que pense em outra lógica para resolver este problema sem ter que sair do loop infinito.
Espero ter ajudado,
Bruno S. Avelar
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|