Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<msp430x14x.h>
- #include "lcd.h"
- #include "portyLcd.h"
- //---------------- zmienne globalne -------------
- unsigned int i=0;
- unsigned int sekundy=0;
- unsigned int sekundy2=0;
- unsigned int milisek=0;
- unsigned int milisek2=0;
- unsigned int licznik=0;
- unsigned int licznik2=0;
- void Clock(void);
- //----------------- main program -------------------
- void main( void )
- {
- P2DIR |= BIT1 ; // STATUS LED
- WDTCTL=WDTPW + WDTHOLD; // Wyłączenie WDT
- InitPortsLcd(); // inicjalizacja portów LCD
- InitLCD(); // inicjalizacja LCD
- clearDisplay(); // czyszczenie wyświetlacza
- // Basic Clock Module ustawiamy na ACLK(zegar 8 MHz ) i dzielimy częstotliwość przez 2 (4 MHz)
- BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL 8MHz
- do
- {
- IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
- for (i = 0xFF; i > 0; i--); // odczekanie
- }
- while ((IFG1 & OFIFG) == OFIFG); // dopóki OSCFault jest ciągle ustawiona
- BCSCTL1 |= DIVA_1; // ACLK=8 MHz/2=4 MHz
- BCSCTL2 |= SELM0 | SELM1; // MCLK= LFTX1 =ACLK
- // Timer_A ustawiamy na 500 kHz
- // a przerwanie generujemy co 100 ms
- TACTL = TASSEL_1 + MC_1 +ID_3; // Wybieram ACLK, ACLK/8=500kHz,tryb Up
- CCTL0 = CCIE; // włączenie przerwań od CCR0
- CCR0=50000; // podzielnik 50000: przerwanie co 100 ms
- _EINT(); // włączenie przerwań
- for (;;)
- {
- _BIS_SR(LPM3_bits); // przejscie do trybu LPM3
- Clock();
- }
- }
- void Clock(void)
- {
- if (licznik %10 ==0) // gdy mineła sekunda (10 * 100 milisekund)
- {
- licznik=0;
- P2OUT ^=BIT1; //zapal diodę
- ++sekundy; // licz sekundy
- if(sekundy==10)++sekundy2;
- sekundy2 = sekundy2%6;
- sekundy = sekundy%10;
- }
- if (licznik2 %1 ==0) // gdy mineła sekunda (10 * 100 milisekund)
- {
- licznik2=0;
- P2OUT ^=BIT1; //zapal diodę
- ++milisek; // licz sekundy
- milisek = milisek%10;
- }
- clearDisplay();
- printDecDigit(sekundy2); //wyswietl liczbe sekund
- printDecDigit(sekundy); //wyswietl liczbe sekund
- SEND_CHAR ('.');
- printDecDigit(milisek); //wyswietl liczbe sekund
- SEND_CMD(CUR_SHIFT_LEFT ); // wróć kursorem na początek
- }
- // procedura obsługi przerwania od TimerA
- #pragma vector=TIMERA0_VECTOR
- __interrupt void Timer_A (void)
- {
- ++licznik;
- ++licznik2;
- _BIC_SR_IRQ(LPM3_bits); // wyjście z trybu LPM3
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement