stankovic96

Keil-PING-PONG

Mar 19th, 2018
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.95 KB | None | 0 0
  1. #include<REGX52.H>
  2. #define F_CLK 18432000
  3. #define F_INT 1000
  4. typedef unsigned char byte;
  5.  
  6. byte xdata LED_PREK _at_ 0x8000;
  7. byte xdata ZUTA _at_ 0x8002;
  8. byte xdata ZELENA _at_ 0x8001;
  9. byte xdata PLAVA _at_ 0x8003;
  10. byte i=0;
  11. byte j=0;
  12. byte LEDS=0x01;
  13. byte prek;
  14. byte clear=0xff;
  15.  
  16. unsigned long sys_time = 0;
  17.  
  18. void timer2_ISR() interrupt 5
  19. {
  20.     sys_time++;
  21.     TF2 = EXF2 = 0;
  22. }
  23.  
  24.  unsigned long millis()
  25. {
  26.     unsigned long tmp;
  27.      
  28.     EA = 0;             //zabrana prekida
  29.     tmp = sys_time;     //ocitavanje vremena
  30.     EA = 1;             //dozvola prekida
  31.      
  32.     return tmp;
  33. }
  34. void delay_ms(unsigned long d)
  35. {
  36.     unsigned long t0 = millis();
  37.  
  38.     while(millis() - t0 < d);
  39. }
  40. void boja(byte x,byte y)
  41. {
  42.     switch((~x)&0x03)
  43.     {
  44.         case 0:
  45.         {
  46.             LED_PREK=y;
  47.             ZUTA=clear;
  48.             ZELENA=clear;
  49.             PLAVA=clear;
  50.         }
  51.             break;
  52.        case 1:
  53.        {
  54.             ZUTA=y;
  55.             LED_PREK=clear;
  56.             ZELENA=clear;
  57.             PLAVA=clear;
  58.         }
  59.             break;
  60.         case 2:
  61.         {
  62.             ZELENA=y;
  63.             LED_PREK=clear;
  64.             ZUTA=clear;
  65.             PLAVA=clear;
  66.         }
  67.             break;
  68.         case 3:
  69.         {
  70.             PLAVA=y;
  71.             LED_PREK=clear;
  72.             ZUTA=clear;
  73.             ZELENA=clear;
  74.         }
  75.             break;
  76.     }  
  77. }
  78. void vreme(byte x)
  79. {
  80.     byte k=((~x)&0xc0)>>6;
  81.     switch(k)
  82.     {
  83.         case 0:
  84.             delay_ms(500);
  85.             break; 
  86.         case 1:
  87.             delay_ms(1000);
  88.             break;
  89.         case 2:
  90.             delay_ms(2000);
  91.             break;
  92.         case 3:
  93.             delay_ms(4000);
  94.             break;
  95.     }
  96.  
  97. }
  98. void main()
  99. {
  100.     RCAP2H = (-(F_CLK / (12 * F_INT))) >> 8;
  101.     RCAP2L = (-(F_CLK / (12 * F_INT))) & 0xff;
  102.  
  103.     T2CON = 0x00;   //tajmer 2 -> 16-bitni auto-reload
  104.     ET2 = 1;        //dozvola prekida tajmera 2
  105.     TR2 = 1;
  106.     EA=1;
  107.     prek=(~LED_PREK);
  108.  
  109.     while(1)
  110.     {
  111.            
  112.     while(i!=7)
  113.         {
  114.             prek=(~LED_PREK);
  115.             LEDS=(LEDS<<1);
  116.             boja(prek,(~LEDS));
  117.             vreme(prek);
  118.             i++;
  119.         }
  120.         i=0;
  121.         while(j!=7)
  122.         {
  123.             prek=(~LED_PREK);
  124.             LEDS=(LEDS>>1);
  125.             boja(prek,(~LEDS));
  126.             vreme(prek);
  127.             j++;
  128.         }
  129.         j=0;
  130.     }
  131.  
  132. }
Advertisement
Add Comment
Please, Sign In to add comment