Interrupção 18F4550 com Mikroc

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Interrupção 18F4550 com Mikroc

Mensagempor dremel » 27 Ago 2010 23:02

Alguem sabe como usar interrupção no mikroc, preciso usar para gerar um evento mas não consigo nem no simulador nem no debuger.
Os registros TMR0L e TMR0H não são acrescentados, estão sempre em zero.
Postei parte do código para análise para ver onde pode estar o erro.

int cont;

// inicializa interrupcoes
void TMR0_init(){
TMR0L = 0; //limpa TMR0L
INTCON = 0xA0; //habilita TMRO
T0CON = 0x80;
}

// leitura AD
void _ad(){ //rotina AD
CMCON=7; //comparadores desligados
ADCON1=7; //canal A analogico
TRISA=1; //AN0 entrada e restante saida
_ad0=ADC_Read(0); //le e guarda valor
_ad0=(_ad0/2); //converte 1024 para 255
byteToStr(_ad0,num1); //converte numero para string
}

// controle Backlight
void _back(){ //rotina backlight
PWM1_Init(2000); //configura PWM com 10Khz
PWM1_Start(); //start do PWM
PWM1_Set_Duty(_ad0); //coloca valor lido pelo AD para setar PWM
}


// interrupcao
void interrupt(){
cont++; // Increment value of interval on every interrupt
INTCON = 0x20;
}

// escrita GLCD
void _lcd(){ //rotina lcd
//Glcd_Fill(0); // limpa GLCD
Glcd_Write_Text("vaz ele", 22, 0, 1);
Glcd_Write_Text("tronics", 64, 0, 1);
Glcd_Write_Text("eixo X:", 0, 2, 1);
Glcd_Write_Text(num1, 46, 2, 1);
Glcd_Write_Text("eixo Y:", 0, 3, 1);
Glcd_Write_Text(num1, 46, 3, 1);
Glcd_Write_Text("eixo Z:", 0, 4, 1);
Glcd_Write_Text(num1, 46, 4, 1);
delay_ms(100);
}

// rotina MAIN
void main(){ //rotina main
Glcd_Init(); // initializa GLCD
Glcd_Set_Font(font5x7, 5, 7, 32); // define fonte
Glcd_Image( vaz_bmp );
delay_ms(6000);
Glcd_Fill(0); //limpa GLCD
TMR0_init(); //inicializa Tmr0
while(1){
_lcd();
//_back();
}
}
dremel
Bit
 
Mensagens: 42
Registrado em: 02 Dez 2006 23:11
Localização: Porto Alegre

Mensagempor Cleber » 03 Set 2010 18:17

Pelo que via aqui vc esta desligando a interrupção dentro do seu void interrupt, tenta assim.

void interrupt(){
if (INTCON.TM0IF){
cont++; // Increment value of interval on every interrupt
INTCON.TM0IF = 0;
}
}

outra coisa se for usar mais de uma interrpção pergunta antes que interrupção aconteceu.

Espero ter ajudado, e se funfar avisa.
Cleber
Bit
 
Mensagens: 10
Registrado em: 16 Jun 2008 11:06

Mensagempor dremel » 04 Set 2010 14:49

Valeu Cleber,
valeu a dica, realmente funcionou.
vaz_eletronics LTDA
dremel
Bit
 
Mensagens: 42
Registrado em: 02 Dez 2006 23:11
Localização: Porto Alegre


Voltar para PIC

Quem está online

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

x