Hallo!
Mein Name ist Daniel. Ich habe folgendes Problem: Wenn ich den ADC des PIC verwende springt der Timer0 nicht in die ISR.
Wenn ich den ADC nicht verwende funktioniert der Timerinterrupt.
Ich bin sehr unerfahren auf dem Gebiet und der Fehler könnte sehr einfach sein. Ich hoffe Ihr könnt mir helfen.
Schon mal im Voraus besten Dank
Daniel
Hier mein Code:
#include <16F877A.h>
#use delay(clock=8000000)
#fuses HS,NOWDT,PUT,NOLVP
#include"lcd_4b.c"
#define COL1 pin_b4
#define tecla pin_b0
#bit AD_GO = 0x1F.2
#bit ADW = 0x1F.0
//int16 ad_wert;
//#byte ADCON0=0x1F
void init()
{
setup_timer_0 (RTCC_DIV_128 | RTCC_INTERNAL);//2MHZ/126 = 15625 Hz.
set_timer0 (131);//12625/(256-131)=125
enable_interrupts (global | int_timer0);
setup_adc_ports(RA0_ANALOG);
setup_adc( ADC_CLOCK_INTERNAL );
portd = 0;
porta = 0;
porte = 0;
set_tris_d(0b00001111);
set_tris_e(0b11111100);
set_tris_a(0b00000001);
port_b_pullups(True);
output_low(COL1);
inicializa_lcd();
delay_ms(200);
}
void relogio()
{
static int i=0,flag=0;
i++;
while ((i==3) && (flag==0))
{
flag=1;
disable_interrupts(int_timer0);
limpa_lcd();
printf(escreve_lcd,"MANUTENCAO");
if (!input(tecla))
{
set_timer0 (131);//12625/(256-131)=125
enable_interrupts (int_timer0);
i=0;
break;
}
}
}
#int_timer0//Wenn interrupt ausgelöst wird springe in die folgende Funktion
void timer0_interrupt()
{
static int contador,i=0;
set_timer0 (131 + get_timer0());
disable_interrupts(INT_AD);
contador++;
if(contador == 125)
{
contador = 0;
relogio();
}
}
void main()
{
long adc1;
init();
while (true)
{
set_adc_channel(0);
delay_us(500);
adc1 = read_adc();
delay_us(50);
lcd_pos_xy(1,1);
printf(escreve_lcd,"ADWert: %lu", adc1);
}
}