Advertisement
MSlomiany

MiUP_Timer_12_12_19

Dec 12th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1.  
  2. /***********************BIBLIOTEKI*******************************/
  3.  
  4. #include "reg1210.h"
  5.  
  6. /****************************************************************/
  7. /*                                                              */
  8. /*          WAŻNE                                               */
  9. /*          USTAWIĆ XTAL = 12.0                                 */
  10. /*                                                              */
  11. /****************************************************************/
  12.  
  13. /***********************DEFINICJE********************************/
  14.  
  15. #define TRUE 1
  16. #define FALSE 0
  17. #define INTERRUPTS 1
  18. unsigned char _20_MS_FLAG;
  19. unsigned int _20_MS_COUNTER;
  20.  
  21. /***********************FUNKCJA PRZERWANIA***********************/
  22.  
  23. void Timer0Int() interrupt 1
  24. {
  25.     TH0 = 0xFC;
  26.     TL0 = 0x18;
  27.     _20_MS_COUNTER++;
  28.     if (_20_MS_COUNTER == 20)
  29.     {
  30.         _20_MS_FLAG = TRUE;
  31.         _20_MS_COUNTER = 0;
  32.     }
  33. }
  34.  
  35. void rr(int *value)
  36. {
  37.     if (*value != 0x01)
  38.     {
  39.         int rotated_value;
  40.         rotated_value = *value >> 1;
  41.         *value = rotated_value;
  42.     }
  43.     else
  44.     {
  45.         *value = 0x80;
  46.     }
  47.    
  48. }
  49.  
  50. /***********************PETLA GLÓWNA PROGRAMU********************/
  51.  
  52. void main()
  53. {
  54.     int A;
  55.     int _1_SEC_FLAG;
  56.     int _SEC_COUNTER;
  57.     if (INTERRUPTS)
  58.     {
  59.         //blok inicjalizacji
  60.         ET0 = 1;     //aktywacja przerwania od timera TR0
  61.         TMOD = 0x01; //przestawienie timera 0 w tryb 16-bitowy
  62.         TR0 = 1;     //aktywacja timera 0
  63.         EA = 1;      //aktywacja wektora przerwan
  64.         TH0 = 0xFC;  //napelnienie rejestru zegara
  65.         TL0 = 0x18;  //napelnienie rejestru zegara
  66.         _20_MS_COUNTER = 0;
  67.         _1_SEC_FLAG = 0;
  68.         _SEC_COUNTER = 0;
  69.         A = 0x80;
  70.         P0 = A;
  71.     }
  72.  
  73.     //Petla glówna programu
  74.     while (1)
  75.     {
  76.         if (_20_MS_FLAG == TRUE)
  77.         {
  78.             _1_SEC_FLAG++;
  79.             if (_1_SEC_FLAG == 50)
  80.             {
  81.                 rr(&A);
  82.                 P0 = A;
  83.                 _1_SEC_FLAG = 0;
  84.                 _SEC_COUNTER++;
  85.             }
  86.             _20_MS_FLAG = FALSE;
  87.         }
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement