aduri Inserito: 2 aprile 2005 Segnala Share Inserito: 2 aprile 2005 Salve a tutti.Ho travato parecchi siti che parlano della gestione degli interrupt e dei timer del pic.Pero' tutti hanno degli esempi in assembler.Qualcuno mi sa indicare qualche sito che parli di questo argomento in c Hi-tech picclite oppure se qualcuno di voi ha un programmino anche molto sintetico su cui farmi le ossa?Ciao e grazieAduri Link al commento Condividi su altri siti More sharing options...
aduri Inserita: 3 aprile 2005 Autore Segnala Share Inserita: 3 aprile 2005 CiaoMi sono letto i data sheets chiaramente e' tutto riferito all'assembler ma piu' o meno credo di averci capito.Ho provato a tirare giu' questo semplice listato con un primo led che lampeggia ma non riesco ad attivare l'interrupt per fare attivare il secondo led.Eppure ho attivato il registro generale degli interrupt INTCONmettendo tutto a zero al di fuori del flag GIE di abilitazione.Faccio poi un controllo sul flag del RB0 (INTF) e dovrebbe partire la procedura di lampeggio del secondo led (ma niente da fare).Riabilito poi INTCON per altri interrupt.Per favore mi potete dare una mano cosi' passo ai timer.Uso come compilatore C Picclite v8.01.Probabilmente e' qualche errore di sintassi ma non riesco a trovarlo.GrazieAllego listato:// led lampeggiante su RA0// interrupt su RB0 che fa lampeggiare altro led su RA1// Pic16f84A// Compilatore Picclite v 8.01 Hitech-c#include<pic.h> // compila per il PIC generico#include"delay.c" void interrupt isr(void){ TRISA = 0; // setta le porte A del PIC come usciteTRISB = 255; // setta le porte B del PIC come ingressoGIE=0; // disabilito INTCON cosi' non ci sono altri interruptif(INTF==1){ //graffa di apertura ifPORTA = 0b00000010;DelayMs(150); //sequenza lamp PORTA = 0b00000000;DelayMs(150);PORTA = 0b00000010;DelayMs(150); //sequenza lamp PORTA = 0b00000000;DelayMs(150);PORTA = 0b00000010;DelayMs(150); //sequenza lamp PORTA = 0b00000000;DelayMs(150);PORTA = 0b00000010;DelayMs(150); //sequenza lamp PORTA = 0b00000000;DelayMs(150);PORTA = 0b00000010;DelayMs(150); //sequenza lamp PORTA = 0b00000000;DelayMs(150);PORTA = 0b00000010;DelayMs(150); //sequenza 5 lamp PORTA = 0b00000000;DelayMs(150);} //graffa di chiusura sequenzeINTCON=0b10000000; // riabilito INTCON} main(void) //l'inizio del programma{ unsigned short i; // def variabileTRISA = 0; // setta le porte A del PIC come usciteTRISB = 255; // setta le porte B del PIC come ingressoi=0; INTCON = 0b10000000; // sul registro INTCON abilito GIE e stato RB0 (INTF=0)while(1) //ripete il ciclo all'infinito{ //graffa di apertura di whilePORTA = 0b00000001; //sequenza lampfor(i=0;i<3500;i++){ //intervallo} PORTA = 0b00000000; //sequenza 5 lampfor(i=0;i<3500;i++){ //intervallo} } //graffa di chiusura di whileINTCON = 0b10000000; // sul registro INTCON riabilito GIE e stato RB0 (INTF=0)//che era stato azzerato durante l'interrupt} //graffa di chiusura main (void) Link al commento Condividi su altri siti More sharing options...
aduri Inserita: 3 aprile 2005 Autore Segnala Share Inserita: 3 aprile 2005 Scusate mi sono accorto di un errore ma non funziona ugualmenteMi ero dimenticato di mettere a 1 INTE. Link al commento Condividi su altri siti More sharing options...
aduri Inserita: 4 aprile 2005 Autore Segnala Share Inserita: 4 aprile 2005 Sono riuscito a risolvereA risentirci Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora