Advertisement
Guest User

MSP 430 WDT

a guest
Oct 4th, 2015
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.09 KB | None | 0 0
  1. #include <msp430x14x.h>
  2.  
  3. // procedura obsługi przerwania od WDT
  4.  
  5. long count = 0;
  6. #pragma vector=WDT_VECTOR
  7. __interrupt void watchdog_timer(void)
  8. {
  9.   if(++count == 20) {
  10.     P2OUT ^= BIT1;                        // miganie diody po przez zastosowanie Xor'owania
  11.     count = 0;
  12.   }
  13. }
  14.  
  15.  
  16. void main( void )
  17. {
  18.   unsigned int i;
  19.  
  20.   WDTCTL  = WDTPW + WDTHOLD;                // wyłączenie układu WDT
  21.  
  22.  
  23.   P2DIR  |= BIT1;                          // bit P2.1 jako wyjście
  24.   BCSCTL1 |= XTS + DIVA1 + DIVA0;          // (ACLK = LFXT1 = HF XTAL)/8
  25.  
  26.   do
  27.   {
  28.   IFG1 &= ~OFIFG;                      // Czyszczenie flgi OSCFault
  29.   for (i = 0xFF; i > 0; i--);          // odczekanie
  30.   }
  31.   while ((IFG1 & OFIFG));              //  dopóki OSCFault jest ciągle ustawiona                
  32.  
  33.   WDTCTL = WDTPW + WDTTMSEL + WDTCNTCL + WDTSSEL;// czyszczenie WDT ustaienie w tryb interval ACLK
  34.   IE1 |= WDTIE;                        // Włączenie przerwań od WDT
  35.   _EINT();                              // Włączenie przerwań
  36.  
  37.  
  38.   for(;;) {
  39.                           // pętla nieskończona
  40. }
  41. }
  42.  
  43. ************************************************************************************************************
  44.  
  45. // program demonstruje działanie układu watchdog timer w trybie pracy watchdog
  46. // podczas normalnej pracy dioda sygnalizacyjna jest zgaszona
  47. // w przypadku naciśnięcia klawisza następuje zawieszenie programu
  48. // układ watchdog restartuje program a użytkownikowi jest to oznajmiane po przez
  49. // zapalenie diody sygnalizacyjnej
  50.  
  51.  
  52. #include <msp430x14x.h>
  53. #define        ZOLTY                BIT4&P4IN        // klawisz - P4.4
  54.  
  55.  
  56. void main( void )
  57. {
  58. unsigned int  i;
  59.  
  60.  
  61.   WDTCTL  = WDTPW + WDTHOLD;                // wyłączenie układu WDT
  62.  
  63.  
  64.   P2DIR  |= BIT1;                          // bit P2.1 jako wyjście
  65.   P2OUT  |= BIT1;                        // zgaszenie diody
  66.   BCSCTL1 |= XTS + DIVA1 + DIVA0;          // (ACLK = LFXT1 = HF XTAL)/8
  67.  
  68.   do
  69.   {
  70.   IFG1 &= ~OFIFG;                          // czyszczenie flgi OSCFault
  71.   for (i = 0xFF; i > 0; i--);              // odczekanie
  72.   }
  73.   while ((IFG1 & OFIFG));                  //  dopóki OSCFault jest ciągle ustawiona                
  74.  
  75.   WDTCTL = WDTPW + WDTCNTCL +  WDTSSEL ;    // tryb watchdog ACLK
  76.  
  77.    
  78. if(WDTIFG & IFG1)
  79.   {
  80.  
  81.     IFG1 &= ~WDTIFG;
  82.     P2OUT &= ~ BIT1;                        // demonsrcja po przez zaplenie diody że WDT zadziałał
  83.  
  84.   }
  85.  
  86.  
  87. for(;;) {
  88.  
  89. if ((ZOLTY) == 0)                            //klawisz został wciśnięty
  90.       {
  91.       for(;;);                              // pętla nieskończona zawieszenie progrmu
  92.       }else
  93.       {
  94.   WDTCTL=WDTPW +WDTCNTCL;                    // zerowanie WDT
  95.       }
  96.  
  97.  
  98.   }
  99. }
  100.  
  101. ********************************************************************************************************************
  102.  
  103. #include <msp430x14x.h>
  104. #define BUTTON BIT4&P4IN
  105. #define CZAS_OPOZNIENIA 50000
  106. #define CZAS_OPOZNIENIA_RESET 5000
  107. #define CZAS_SYGNALIZACJI 50
  108. #define true 1
  109.  
  110. inline void czekaj(long opoznienie)
  111. {
  112.   for(long i=opoznienie; i>0; --i)
  113.     WDTCTL=WDTPW+WDTCNTCL;
  114. }
  115.  
  116. void main( void )
  117. {
  118. unsigned int i;
  119.   WDTCTL  = WDTPW + WDTHOLD;          
  120.  
  121.   P1DIR|=BIT5;  
  122.   P1DIR|=BIT6;
  123.   P1OUT|=BIT5;
  124.   P1OUT|=BIT6;
  125.   P2DIR|=BIT1;
  126.   P2OUT|=BIT1;                        
  127.   BCSCTL1 |= XTS + DIVA1 + DIVA0;
  128.  
  129.   do
  130.   {
  131.   IFG1 &= ~OFIFG;                
  132.   for (i = 0xFF; i > 0; i--);      
  133.   }
  134.   while ((IFG1 & OFIFG));  
  135.  
  136.   WDTCTL = WDTPW + WDTCNTCL + WDTTMSEL +  WDTSSEL  IE1 |= WDTIE;                
  137.   _EINT();                    
  138.  
  139.  
  140. for(;;);                              
  141. }
  142.  
  143. // procedura obslugi przerwania od WDT
  144. #pragma vector=WDT_VECTOR
  145. __interrupt void watchdog_timer(void)
  146. {
  147.  
  148.   while(true) // pętla wykonuje się do momentu naciśnięcia przycisku
  149.   {
  150.     if((BUTTON)==0)
  151.     {
  152.       P1OUT|=BIT5;
  153.       P1OUT|=BIT6;
  154.  
  155.       while(true)
  156.       { }
  157.     }
  158.     else
  159.     {
  160.       P1OUT^=BIT5;
  161.       czekaj(CZAS_OPOZNIENIA);
  162.       P1OUT^=BIT6;
  163.      
  164.     }
  165.   }    
  166. }
  167.  
  168. ********************************************************************************************************************
  169.  
  170. #define true 1
  171.  
  172.  
  173. inline void czekaj(long opoznienie)
  174. {
  175.   for(long i=opoznienie; i>0; --i)
  176.     WDTCTL=WDTPW+WDTCNTCL;
  177. }
  178.  
  179. void main(void)
  180. {
  181.   WDTCTL=WDTPW+WDTHOLD;
  182.  
  183.   P1DIR|=BIT5;
  184.   P1DIR|=BIT6;
  185.   P1OUT|=BIT5;
  186.   P1OUT|=BIT6;
  187.   P2DIR|=BIT1;
  188.   P2OUT|=BIT1;
  189.  
  190.   BCSCTL1 |= XTS + DIVA1 + DIVA0;
  191.   do
  192.   {
  193.     IFG1&=~OFIFG;
  194.     for (short i=0xFF; i>0; --i)
  195.     { }
  196.   }
  197.   while((IFG1&OFIFG));
  198.  
  199.   WDTCTL=WDTPW+WDTCNTCL+WDTSSEL;    
  200.  
  201.  
  202.   if(WDTIFG&IFG1)
  203.   {
  204.     IFG1&=~WDTIFG;
  205.     for(long i=CZAS_SYGNALIZACJI; i>0; --i)
  206.     {
  207.       P1OUT^=BIT5;
  208.       czekaj(CZAS_OPOZNIENIA_RESET);
  209.       P1OUT^=BIT6;
  210.       P2OUT^=BIT1;
  211.     }    
  212.   }
  213.   while(true)
  214. {
  215.     if((BUTTON)==0)
  216.     {
  217.       P1OUT|=BIT5;
  218.       P1OUT|=BIT6;
  219.       P2OUT|=BIT1;
  220.       while(true)
  221.       { }
  222.     }
  223.     else
  224.     {
  225.       P1OUT^=BIT5;
  226.       czekaj(CZAS_OPOZNIENIA);
  227.       P1OUT^=BIT6;
  228.       P2OUT^=BIT1;
  229.     }
  230.   }
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement