Facebook
From Crimson Crow, 9 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 771
  1. #include<msp430x14x.h>
  2. #include "lcd.h"
  3. #include "portyLcd.h"
  4.  
  5.  
  6. //---------------- zmienne globalne -------------
  7. unsigned int i=0;
  8. unsigned int sekundy=0;
  9. unsigned int licznik=0;
  10.  
  11. void Clock(void);
  12.  
  13. //----------------- main program -------------------
  14. void main( void )
  15. {
  16. P2DIR |= BIT1 ;                   // STATUS LED
  17.  
  18. WDTCTL=WDTPW + WDTHOLD;           // Wyłączenie WDT
  19.  
  20. InitPortsLcd();                   // inicjalizacja portów LCD
  21. InitLCD();                        // inicjalizacja LCD
  22. clearDisplay();                   // czyszczenie wyświetlacza      
  23.  
  24. // Basic Clock Module ustawiamy na ACLK(zegar 8 MHz ) i dzielimy częstotliwość przez 2 (4 MHz)
  25. BCSCTL1 |= XTS;                       // ACLK = LFXT1 = HF XTAL 8MHz
  26.  
  27. do
  28.   {
  29.   IFG1 &= ~OFIFG;                     // Czyszczenie flgi OSCFault
  30.   for (i = 0xFF; i > 0; i--);         // odczekanie
  31.   }
  32.   while ((IFG1 & OFIFG) == OFIFG);    // dopóki OSCFault jest ciągle ustawiona  
  33.  
  34. BCSCTL1 |= DIVA_1;                    // ACLK=8 MHz/2=4 MHz
  35. BCSCTL2 |= SELM0 | SELM1;             // MCLK= LFTX1 =ACLK
  36.  
  37. // Timer_A  ustawiamy na 500 kHz
  38. // a przerwanie generujemy co 100 ms
  39. TACTL = TASSEL_1 + MC_1 +ID_3;        // Wybieram ACLK, ACLK/8=500kHz,tryb Up
  40. CCTL0 = CCIE;                         // włączenie przerwań od CCR0
  41. CCR0=50000;                           // podzielnik 50000: przerwanie co 100 ms
  42.  
  43. _EINT();                              // włączenie przerwań
  44.  
  45. for (;;)                              
  46.  {
  47.  _BIS_SR(LPM3_bits);                  // przejscie do trybu LPM3
  48.  Clock();
  49.   }
  50. }
  51.  
  52. void Clock(void)
  53. {
  54.  
  55. if (licznik %10 ==0)                    // gdy mineła sekunda (10 * 100 milisekund)
  56. {
  57. licznik=0;
  58. P2OUT ^=BIT1;                           //zapal diodę
  59.    ++sekundy;                           // licz sekundy
  60.    sekundy = sekundy%10;
  61.    printDecDigit(sekundy);              //wyswietl liczbe sekund
  62.    SEND_CMD(CUR_SHIFT_LEFT );           // wróć kursorem na początek
  63. }
  64. }
  65.  
  66. // procedura obsługi przerwania od TimerA
  67.  
  68. #pragma vector=TIMERA0_VECTOR
  69. __interrupt void Timer_A (void)
  70. {
  71. ++licznik;
  72.  _BIC_SR_IRQ(LPM3_bits);             // wyjście z trybu LPM3
  73. }
  74.