Supernino82
30-08-2007, 09:58
Salve a tutti. Da qualche giorno mi sono messo a smanettare sui pic usando un compilatore C (PIC C compiler). Bene, facendo delle prove con l'interrupt esterno mi sono imbattuto su un problema la cui causa a mio parere è da attribuirsi alla mia scarsa conoscenza del C o ad un bug del compilatore. Spero che voi mi sappiate aiutare. Il PIC in questione è il 12F615 e come programmatore uso quello della microchip. Il programma che volevo fare consiste nel commutare il valore del pinA1. Col codice seguente funziona tutto a dovere:
#include "C:\Documents and Settings\Antonio\Documenti\Lavoro\PIC\Programmi di prova\12F615\Accendi LED con interrup\main.h"
#int_EXT
void EXT_isr(void)
{
output_toggle(PIN_A1);
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
}
mentre con quest'altro non funziona:
#include "C:\Documents and Settings\Antonio\Documenti\Lavoro\PIC\Programmi di prova\12F615\Cani da caccia\Versione 1\main.h"
#int_EXT
static short m=FALSE;
void ext_isr(void)
{
m=TRUE;
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while(true){
if(m) {
output_toggle(PIN_A1);
m=FALSE;
}
}
}
i 2 programmi non dovrebbero essere del tutto equivalenti? Dove sta il problema?:mc: :mc: :mc: :mc: :mc:
Grazie anticipatamente per la risposta.
#include "C:\Documents and Settings\Antonio\Documenti\Lavoro\PIC\Programmi di prova\12F615\Accendi LED con interrup\main.h"
#int_EXT
void EXT_isr(void)
{
output_toggle(PIN_A1);
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
}
mentre con quest'altro non funziona:
#include "C:\Documents and Settings\Antonio\Documenti\Lavoro\PIC\Programmi di prova\12F615\Cani da caccia\Versione 1\main.h"
#int_EXT
static short m=FALSE;
void ext_isr(void)
{
m=TRUE;
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while(true){
if(m) {
output_toggle(PIN_A1);
m=FALSE;
}
}
}
i 2 programmi non dovrebbero essere del tutto equivalenti? Dove sta il problema?:mc: :mc: :mc: :mc: :mc:
Grazie anticipatamente per la risposta.