Omarro Inserito: 15 gennaio 2005 Segnala Share Inserito: 15 gennaio 2005 Ciao,nell'usare gl'interrupt riscontro il seguente problema....quando si scatena l'interrupt al cambiamanto logico di Rb0 esegue la subroutine d'interrupt e quando deve ritornare al programma principale ci mette due minuti ed è molto strano.come mai mi fa questo scherzo?questo è il codice...char BYTEORE,BYTEMINUTI,BYTEGIORNI,BYTEMESE,BYTEANNO;char NCARATTERI,CURSORE,DECINE,UNITA,DECINELCD,UNITALCD;char ORE,MINUTI,GIORNO,MESE,ANNI,AM,GIORNI_IND,MESI_I,MONTH;char STEP,i,NUM_MENU,N_GIORNO,BINARY,NUMERO_BCD,setting,provetta;/* Dichiarazione delle etichette */bit LED_DISPLAY [at] PORTA.5;bit TMENU [at] PORTB.0;bit TDOWN [at] PORTB.1;bit TUP [at] PORTB.2;bit TOK [at] PORTB.3;bit RBPU [at] OPTION.7;bit RS [at] PORTC.5;bit RW [at] PORTC.6;bit E [at] PORTC.7;void INVIA_COMANDO (char COMANDO, char CURSORE);void INVIA_CARATTERE (char CARATTERE);void EEPROM_TO_LCD (char INDIRIZZO, char NCARATTERI);void CONVERSIONE_BCD (char NUMERO);void INVIA_NUM_BCD (void);void MENU (void);void ORARIO (void);void delay_ms (uns16 millisec);void CONTROLLO_TOK(void);void VISUALIZZA_VOCE_MENU(void);void INIT_LCD (void);void prova (char a);void DATARIO (void);void GIORNO_S (char DAY);void MESE_S (char MONTH);void ERROR_MSG(void);#include <int16cxx.h>#pragma origin 4interrupt menu (void) { int_save_registers GIE = 0;/*disabilito gl'interrupt in modo da utilizzare i pulsanti normalmente*/ /*gestische l'illuminazione del display*/if (LED_DISPLAY == 0) { LED_DISPLAY = 1; } else { LED_DISPLAY = 0;} STEP = 0;for (i=0; i < 4; i++) { if(TMENU == 0) { delay_ms(250); STEP++; } else { i = 5; }}if (STEP == 4) { LED_DISPLAY = 1; INVIA_COMANDO(0x01,0); EEPROM_TO_LCD(0x70,5); MENU(); INVIA_COMANDO(0x01,0); EEPROM_TO_LCD(0xE0,32);} INTCON.1 = 0; int_restore_registers }#pragma origin 950#pragma sharedAllocation#include <delay.c>#include <menu.c>//#include <orario.c>#include <routine_bcd.c>#include <routine_varie.c>#include <display.c>void main (void) {//#define MESE_S(char MONTH);//inizializzazione del PIC e del displaydelay_ms(500); //Ritardo per la stabilizzazione della tensione del display//ADCON0 = 0; //ferma il convertitore A/DADCON1 = 0x06; // tutti dati digitaliINTCON = 0x90; //abilitazione interrupt RB0TRISA = 0x00; // Impostazione del PORTATRISB = 0x0F; // Impostazione del PORTBTRISC = 0x18; // Impostazione del PORTCRBPU = 0; // PULL-UP interno attivo su RBO RB1 RB2 RB3 ingressi//setting = 0; // Variabile di controllo del menuINIT_LCD(); //funzionamento per il setting del displaywhile (1){EEPROM_TO_LCD(provetta,3);provetta++;}/*CODICE*/} 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