Moderadores: andre_luis, 51, guest2003, Renie
gilliard escreveu:Então.... Testei os esquema do FOR e do WHILE(1), funcionou direitinho, mas tem um problema, e é o problema que estou tentando solucionar com vocês.
Quando a subrotina lcd() é chamada por outra subrotina(), a subrotina lcd() trava, e não respeita os 500 ms de exibição, e não volta ao void main !!!! Eu preciso chamar essa subrotina, e preciso que ela termine e volte a executar oque esta dentro do void main ();
gilliard escreveu: ... a subrotina lcd() trava, e não respeita os 500 ms de exibição, e não volta ao void main !!!! ....
//********** Inicio da configuraçao da contagem do TIMER 1 **********//
unsigned contagem;
void interrupt() {
contagem++; // incrementa variável de contagem
PIR1.TMR1IF = 0; // clear TMR1IF
}
//********** Fim da configuraçao da contagem do TIMER 1 **********//
#include "lcd.c"
#include "teclado.c"
#include "interrupcao.c"
void lcd( ){
Lcd_custom_cmd(LCD_CLEAR);
Lcd_custom_cmd(LCD_CURSOR_OFF);
Lcd_Custom_out(1,2,"Seja Bem Vindo");
Delay_ms(10);
}
//********** Inicio da configuração do menu **********//
void chamada(){
unsigned char tecla;
//-------------------------------
Lcd_custom_Cmd(Lcd_Clear); // Limpa o LCD 16x2 //
Lcd_custom_out(1,1,"1 - teste");
Delay_ms(20);
//-------------------------------
do {
tecla=0;// limpa o valor atual do teclado
while (tecla==0) tecla=teclado(); // Aguarda algo ser digitado
if(tecla=='1'){ // Se for digitado 1
lcd();
}
} while(1); // Faz isso eternamente
}
//********** Fim da configuração do menu **********//
//********** Inicio do programa principal **********//
void main() {
unsigned char tecla,
adcon1 = 0x06; // define pinos AD como I/O de uso geral
config_lcd(); // Inicia a configuração do LCD
trisa = 0;
trisb = 0; //configura portb como saida
trisb.f4 = 0;
trisb.f7 = 0;
trisc = 0;
trisd = 0x0F; //configura portd como entrada(teclado) e saida(LCD)
trisd = 0; // Define portd como saida
trise = 0; // Define porte como saida
portb= 255; //portb em FF
portd= 255; //portd em FF
T1CON = 1;
PIR1.TMR1IF = 0; // clear TMR1IF
PIE1 = 1; // enable interrupts
INTCON = 0xC0;
lcd();
tecla = teclado();
while(1) {
if (contagem == 1) {
portb.rb4 = ~ portb.rb4;
}
if (contagem == 4) {
if (tecla==0) tecla=teclado();
if (tecla=='1') { //Se for digitado um 1
chamada();// chama subrotina chamada()
}
portb.rb7 = ~ portb.rb7;
contagem = 0; // Zera contagem.
}
}
}
//********** Fim da programa principal **********//
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante