Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <xc.h>
- __PROG_CONFIG(1,0x3FE4); // config. uC (WDT=dis|OSC=int)
- __PROG_CONFIG(2,0x1EFF); // config. uC (PLL (OSC*4)=off) pag. 130 pdf. PIC16LF1937
- unsigned char a,j, b=0;
- unsigned char v[10] = { 0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09};
- /* vector "de cifre" = cifra0 cifra1 cifra2 cifra3 cifra4 cifra5 ... */
- void init (void);
- void interrupt ia2(void); // functie de intreruperi globala ptr. TOATE intreruperile
- void main(void)
- {
- init();
- int i;
- while (1) // bucla infinita
- {
- for( i=12;i<=68;i++){
- PORTD = v[i/10];
- PORTC=v[i%10];
- while(RB6!=0 && i==12){
- }
- j=0;
- while(j<20); // conditia se indeplineste la: 20*12.5ms=0.25sec.
- }
- for( i=67;i>=12;i--){
- PORTD = v[i/10];
- PORTC=v[i%10];
- j=0;
- while(j<20); // conditia se indeplineste la: 20*12.5ms=0.25sec.
- }
- }
- }
- void init (void)
- {
- OSCCON=0x73; // REGLEAZA OSCILATORUL PE 8 MHz (PLL dezactivat)
- ANSELB=0x00;
- TRISB=0xFF;
- ANSELD = 0x00; // pinii portului B sa fie digitali
- TRISC=0x00;
- TRISD= 0x00; // tot portul B este de iesire
- PORTD = 0xFF; // am digit Anod Comun, vreau ca segmentele sa fie stinse
- PORTC=0xFF;
- T1CON = 0x11; // initializarea Timer T1
- // (Fosc/4); prescaler 1:2 => Fosc_timer1=1MHz(T=1us)
- TMR1IE = 1; // activez intreruperea ptr. T1
- PEIE = 1; // intreruperea T1 face parte din "extra intreruperi"
- GIE = 1; // activez Global intreruperile
- }
- void interrupt ia2(void) // every 12.5ms !!!
- { //
- if(TMR1IF) // timerul T1 a generat intreruperea ?
- {
- TMR1IF = 0; // obligatoriu - sterg flagul Timerului care a generat intreruperea
- TMR1H = 0xCF; // 65535us-12500us=>53035=CF2B (in hexa) [incarc octetul superior]
- TMR1L = 0x2B; // (12500us=12.5ms) [incarc octetul inferior al timerului T1]
- j++; // la fiecare 12.5 ms se incrementeaza variabila j
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement