Advertisement
Guest User

Untitled

a guest
Oct 24th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  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 sekundy2=0;
  10. unsigned int milisek=0;
  11. unsigned int milisek2=0;
  12.  
  13. unsigned int licznik=0;
  14.  
  15. unsigned int licznik2=0;
  16.  
  17. void Clock(void);
  18.  
  19. //----------------- main program -------------------
  20. void main( void )
  21. {
  22. P2DIR |= BIT1 ; // STATUS LED
  23.  
  24. WDTCTL=WDTPW + WDTHOLD; // Wyłączenie WDT
  25.  
  26. InitPortsLcd(); // inicjalizacja portów LCD
  27. InitLCD(); // inicjalizacja LCD
  28. clearDisplay(); // czyszczenie wyświetlacza
  29.  
  30. // Basic Clock Module ustawiamy na ACLK(zegar 8 MHz ) i dzielimy częstotliwość przez 2 (4 MHz)
  31. BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL 8MHz
  32.  
  33. do
  34. {
  35. IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
  36. for (i = 0xFF; i > 0; i--); // odczekanie
  37. }
  38. while ((IFG1 & OFIFG) == OFIFG); // dopóki OSCFault jest ciągle ustawiona
  39.  
  40. BCSCTL1 |= DIVA_1; // ACLK=8 MHz/2=4 MHz
  41. BCSCTL2 |= SELM0 | SELM1; // MCLK= LFTX1 =ACLK
  42.  
  43. // Timer_A ustawiamy na 500 kHz
  44. // a przerwanie generujemy co 100 ms
  45. TACTL = TASSEL_1 + MC_1 +ID_3; // Wybieram ACLK, ACLK/8=500kHz,tryb Up
  46. CCTL0 = CCIE; // włączenie przerwań od CCR0
  47. CCR0=50000; // podzielnik 50000: przerwanie co 100 ms
  48.  
  49. _EINT(); // włączenie przerwań
  50.  
  51. for (;;)
  52. {
  53. _BIS_SR(LPM3_bits); // przejscie do trybu LPM3
  54. Clock();
  55. }
  56. }
  57.  
  58. void Clock(void)
  59. {
  60.  
  61. if (licznik %10 ==0) // gdy mineła sekunda (10 * 100 milisekund)
  62. {
  63. licznik=0;
  64. P2OUT ^=BIT1; //zapal diodę
  65. ++sekundy; // licz sekundy
  66. if(sekundy==10)++sekundy2;
  67. sekundy2 = sekundy2%6;
  68. sekundy = sekundy%10;
  69.  
  70. }
  71. if (licznik2 %1 ==0) // gdy mineła sekunda (10 * 100 milisekund)
  72. {
  73. licznik2=0;
  74. P2OUT ^=BIT1; //zapal diodę
  75. ++milisek; // licz sekundy
  76. milisek = milisek%10;
  77.  
  78. }
  79. clearDisplay();
  80. printDecDigit(sekundy2); //wyswietl liczbe sekund
  81. printDecDigit(sekundy); //wyswietl liczbe sekund
  82. SEND_CHAR ('.');
  83. printDecDigit(milisek); //wyswietl liczbe sekund
  84. SEND_CMD(CUR_SHIFT_LEFT ); // wróć kursorem na początek
  85.  
  86.  
  87. }
  88. // procedura obsługi przerwania od TimerA
  89.  
  90. #pragma vector=TIMERA0_VECTOR
  91. __interrupt void Timer_A (void)
  92. {
  93. ++licznik;
  94. ++licznik2;
  95. _BIC_SR_IRQ(LPM3_bits); // wyjście z trybu LPM3
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement