/* biosdem.h Fichier en-tête pour le bios de la carte PICDEM * /* A utiliser avec la librairie biosdem.lib * /* Auteur : Arlotto Date : 17/02/03 Création * /* Auteur : Arlotto Date : 15/06/03 lcd_printf1() * /* Auteur : Arlotto Date : 26/08/03 Fonctions adc * ***************************************************************/ #ifndef _BIOSDEM_H #define _BIOSDEM_H #define _BIOSDEM_VERSION "1.0" /* Version du bios */ #include #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Fréquence du quartz par défaut de la carte PICDEM */ #endif /* Partie dépendant du type de pic installé sur la carte */ #if defined(_16F873) || defined(_16F874) ||\ defined(_16F876) || defined(_16F877) ||\ defined(_16F872) || defined(_16F871) ||\ defined(_16F870) /* compléter si nécessaire */ #endif /* define 16F87x */ /***********************************************************************/ /* Driver pour le lcd modifié pour la carte picdem2*/ /* RD0 à RD3 sont câblés sur les bits D4-D7 du module LCD * LCD interface header file */ #define LCD_LINE_ONE 0x00 #define LCD_LINE_TWO 0x40 static bit LCD_RS @ ((unsigned)&PORTA*8+3); // Register select RA3 static bit LCD_RW @ ((unsigned)&PORTA*8+2); // RW RA2 Non utilisée présentement (là dis donc!) static bit LCD_EN @ ((unsigned)&PORTA*8+1); // Enable RA1 /*PORTA tout digital sauf RA0 analogique */ #define LCD_DIR_INIT ( TRISD &= 0xF0 , ADCON1 = 0x0E , TRISA &= 0xF1 ) #define LCD_STROBE ((LCD_EN = 1),(LCD_EN=0)) /* write a byte to the LCD in 4 bit mode */ extern void lcd_write(unsigned char); /* Clear and home the LCD */ extern void lcd_clear(void); /* write a string of characters to the LCD */ extern void lcd_puts(const char * s); /* Go to the specified position */ extern void lcd_goto(unsigned char pos); /* intialize the LCD - call before anything else */ extern void lcd_init(void); extern void lcd_putchar(char); /* Set the cursor position */ #define lcd_cursor(x) lcd_write(((x)&0x7F)|0x80) /* Ces fonctions s'utilisent commme printf mais affiche sur le LCD */ /* Les formats disponibles sont : %d %u %x %X %o %s %c et %% */ /* Pour la fonction printf1 l'utilisateur doit fournir une chaine */ /* de taille suffisante pour accueillir le résultat de l'affichage */ /* Pour la fonction printf 17 octets (16+1) sont utilisés par la fonction */ /* obligatoirement dans la banque 0 (variable auto) */ /* L'intérêt de printf1 est de pouvoir réduire la place RAM au mini nécessaire */ /* mais toujours en banque 0 */ /* pour l'utiliser il faut déclarer une variable globale */ /* far char printf1_buffer[N] ; */ /* où N est la place nécessaire */ unsigned char #ifdef _PIC16 lcd_printf1( const char * f, ...); #else lcd_printf1( const char * f, ...); #endif unsigned char #ifdef _PIC16 lcd_printf(const char * f, ...); #else lcd_printf(const char * f, ...); #endif /* Fin driver lcd */ /**********************************************************************************/ /* Fonction d'attente */ /* Delay functions for HI-TECH C on the PIC !! Adaptée pour bios DEM pour le rendre idempotent avec delay.h * * Functions available: * DelayUs(x) Delay specified number of microseconds * DelayMs(x) Delay specified number of milliseconds * * Note that there are range limits: x must not exceed 255 - for xtal * frequencies > 12MHz the range for DelayUs is even smaller. * To use DelayUs it is only necessary to include this file; to use * DelayMs you must include delay.c in your project. * */ /* Set the crystal frequency in the CPP predefined symbols list in HPDPIC, or on the PICC commmand line, e.g. picc -DXTAL_FREQ=4MHZ or picc -DXTAL_FREQ=100KHZ Note that this is the crystal frequency, the CPU clock is divided by 4. * MAKE SURE this code is compiled with full optimization!!! */ #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */ #endif #ifndef MHZ #define MHZ *1000L /* number of kHz in a MHz */ #endif #ifndef KHZ #define KHZ *1 /* number of kHz in a kHz */ #endif #ifndef DelayUs(x) #if XTAL_FREQ >= 12MHZ #define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \ while(--_dcnt != 0) \ continue; } #else #define DelayUs(x) { unsigned char _dcnt; \ _dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \ while(--_dcnt != 0) \ continue; } #endif #endif /* DelayUs(x)*/ extern void DelayMs(unsigned char); /* Fin fonctions d'attente */ /* Fonction sur l'adc */ /* Turn on ADC */ void adc_on(void); /* Start convert channel ch */ /*and read 8 most significant bits when complete */ unsigned char adc_read_8b(unsigned char ch); /* Fin fonctions sur l'adc */ #endif /* _BIOSDEM_H */