Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 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 v[10] = { 0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01,0x09};
  5. unsigned char a,b=0,x=0,ok=1;
  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. while (1) // bucla infinita
  13. {
  14. if(a >= 14) // conditia se indeplineste la: 20*50ms=1sec.
  15. {
  16. a = 0; // ma pregatesc ptr. urmatoarea "secunda"
  17. if(ok==1)
  18. {
  19. PORTB = v[x/10]-0b00000001; // du valoarea din vector in PORTB
  20. PORTC = v[x%10];
  21. x=x+7;
  22. if(x>77)
  23. ok =0;
  24. }
  25. if(ok==0)
  26. {
  27. x=x-7;
  28. PORTB = v[x/10]-0b00000001; // du valoarea din vector in PORTB
  29. PORTC = v[x%10];
  30. }
  31. if(x==0)
  32. T1CON=0x00;
  33.  
  34. }
  35. }
  36. }
  37. void init (void)
  38. {
  39. OSCCON=0x73; // REGLEAZA OSCILATORUL PE 8 MHz (PLL dezactivat)
  40. ANSELB = 0x00; // pinii portului B sa fie digitali
  41. TRISB = 0x00; // tot portul B este de iesire
  42. PORTB = 0xFF; // am digit Anod Comun, vreau ca segmentele sa fie stinse
  43. TRISC = 0x00;
  44. PORTC = 0xFF;
  45. TRISB = 0x00;
  46. T1CON = 0x11; // initializarea Timer T1
  47. // (Fosc/4); prescaler 1:2 => Fosc_timer1=1MHz(T=1us)
  48. TMR1IE = 1; // activez intreruperea ptr. T1
  49. PEIE = 1; // intreruperea T1 face parte din "extra intreruperi"
  50. GIE = 1; // activez Global intreruperile
  51. }
  52. void interrupt ia2(void) // every 50ms !!!
  53. { //
  54. if(TMR1IF) // timerul T1 a generat intreruperea ?
  55. {
  56. TMR1IF = 0; // obligatoriu - sterg flagul Timerului care a generat intreruperea
  57. TMR1H = 0x3C; // 65535us-50000us=15535us=3CAF (in hexa) [incarc octetul superior]
  58. TMR1L = 0xAF; // (50000us=50ms) [incarc octetul inferior al timerului T1]
  59. a++; // la fiecare 50ms se incrementeaza variabila a
  60. }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement