Advertisement
milanmetal

[RSDMK] Kockica + delay_ms

Mar 18th, 2018
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.48 KB | None | 0 0
  1. #include <REGX52.H> //biblioteka sa definicijama registara
  2.  
  3. #define F_CLK 18432000
  4. #define F_INT 1000
  5.  
  6.  
  7. typedef unsigned char byte;
  8.  
  9. unsigned char xdata CRV_PREK    _at_ 0x8000;
  10. unsigned char xdata ZELENE      _at_ 0x8001;
  11. unsigned char xdata ZUTE        _at_ 0x8002;
  12.  
  13.  
  14. byte lut_crvene[6] = {~0x00, ~0x80, ~0x80, ~0xa0, ~0xa0, ~0xa0};
  15. byte lut_zuteee[6] = {~0x40, ~0x00, ~0x40, ~0x00, ~0x40, ~0xa0};
  16. byte lut_zelene[6] = {~0x00, ~0x20, ~0x20, ~0xa0, ~0xa0, ~0xa0};
  17.  
  18. unsigned long sys_time = 0;
  19.  
  20.  
  21. void timer0_ISR() interrupt 1
  22. {
  23.     sys_time++;
  24.  
  25.  
  26.     TR0 = 0;            //tajmer 0 OFF
  27.     TH0 = 0xFA;         //ucitavanje pocetne vrednosti
  28.     TL0 = 0x00;
  29.     TR0 = 1;            //tajmer 0 ON
  30. }
  31.  
  32. unsigned long millis()
  33. {
  34.     unsigned long tmp;
  35.    
  36.     EA = 0;             //zabrana prekida
  37.     tmp = sys_time;     //ocitavanje vremena
  38.     EA = 1;             //dozvola prekida
  39.    
  40.     return tmp;
  41. }
  42.  
  43. void delay_ms(unsigned long d)
  44. {
  45.     unsigned long t0 = millis();
  46.     while(millis() - t0 < d);
  47. }
  48.  
  49.  
  50.  
  51. void ispisi_broj(byte br) {
  52.     CRV_PREK    = lut_crvene[br-1];
  53.     ZELENE      = lut_zelene[br-1];
  54.     ZUTE        = lut_zuteee[br-1];
  55. }
  56.  
  57. void main()
  58. {
  59.     unsigned long n = 0;
  60.  
  61.     byte DOZVOLA;
  62.    
  63.     //inicijalizacija tajmera 0:
  64.     TMOD = 0x01;            //tajmer 2 -> 16-bitni mod
  65.     ET0 = 1;                //dozvola prekida tajmera 0
  66.     TR0 = 1;                //tajmer 0 ON
  67.    
  68.     EA = 1;                 //dozvola prekida
  69.  
  70.     while(1)
  71.     {
  72.         DOZVOLA = ~CRV_PREK & 0x80;
  73.        
  74.         if(DOZVOLA) {
  75.             ispisi_broj((n % 6) + 1);
  76.             delay_ms(15000);
  77.             n++;
  78.         } else {
  79.             ispisi_broj(((n-1) % 6) + 1);
  80.         }
  81.     }
  82.  
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement