Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.75 KB | None | 0 0
  1. #include <xc.h>
  2. __PROG_CONFIG(1,0x3FE4); // config. uC (WDT=dis|OSC=int)
  3. __PROG_CONFIG(2,0x1EFF); // config. uC (PLL (OSC*4)=off) pag. 130 pdf. PIC16LF1937
  4. unsigned char a,j, b=0;
  5. unsigned char v[10] = { 0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09};
  6. /* vector "de cifre" = cifra0 cifra1 cifra2 cifra3 cifra4 cifra5 ... */
  7. void init (void);
  8. void interrupt ia2(void); // functie de intreruperi globala ptr. TOATE intreruperile
  9. void main(void)
  10. {
  11. init();
  12.     int i;
  13. while (1) // bucla infinita
  14. {
  15.  
  16. for( i=12;i<=68;i++){
  17.     PORTD = v[i/10];
  18.     PORTC=v[i%10]; 
  19.     while(RB6!=0 && i==12){
  20.     }
  21.     j=0;
  22.     while(j<20); // conditia se indeplineste la: 20*12.5ms=0.25sec.
  23. }
  24. for( i=67;i>=12;i--){
  25.     PORTD = v[i/10];
  26.     PORTC=v[i%10]; 
  27.     j=0;
  28.     while(j<20); // conditia se indeplineste la: 20*12.5ms=0.25sec.
  29. }
  30. }
  31. }
  32. void init (void)
  33. {
  34. OSCCON=0x73; // REGLEAZA OSCILATORUL PE 8 MHz (PLL dezactivat)
  35. ANSELB=0x00;
  36. TRISB=0xFF;
  37. ANSELD = 0x00; // pinii portului B sa fie digitali
  38. TRISC=0x00;
  39. TRISD= 0x00; // tot portul B este de iesire
  40. PORTD = 0xFF; // am digit Anod Comun, vreau ca segmentele sa fie stinse
  41. PORTC=0xFF;
  42. T1CON = 0x11; // initializarea Timer T1
  43. // (Fosc/4); prescaler 1:2 => Fosc_timer1=1MHz(T=1us)
  44. TMR1IE = 1; // activez intreruperea ptr. T1
  45. PEIE = 1; // intreruperea T1 face parte din "extra intreruperi"
  46. GIE = 1; // activez Global intreruperile
  47. }
  48. void interrupt ia2(void) // every 12.5ms !!!
  49. { //
  50. if(TMR1IF) // timerul T1 a generat intreruperea ?
  51. {
  52. TMR1IF = 0; // obligatoriu - sterg flagul Timerului care a generat intreruperea
  53. TMR1H = 0xCF; // 65535us-12500us=>53035=CF2B (in hexa) [incarc octetul superior]
  54. TMR1L = 0x2B; // (12500us=12.5ms) [incarc octetul inferior al timerului T1]
  55. j++; // la fiecare 12.5 ms se incrementeaza variabila j
  56. }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement