VEndymionV

Pong na przerwaniach, zmiana co 50ms

May 5th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.11 KB | None | 0 0
  1. // Pong na przerwaniach, zmiana co 50ms
  2. #include <8051.h>
  3.  
  4. #define TIM 19456 // 50ms
  5. #define LEDS P1 // port do diod
  6.  
  7. unsigned char acc, flag; // flag = 0 - lewo, flag = 1 - prawo
  8.  
  9. void timer0(void) __interrupt(1) __using(1){
  10.  
  11.     // Lewo czy prawo?
  12.     if(flag)
  13.         acc = acc >> 1;
  14.     else
  15.         acc = acc << 1;
  16.  
  17.     // Jeżeli pali się ostatnia dioda z lewej lub z prawej:
  18.     if(acc == 128 || acc == 1)
  19.         flag = !flag;
  20.  
  21.     LEDS = acc; // wartość zostaje wrzucona na port diod
  22.  
  23.     // Ponownie wrzucam wartości od których ma zliczać Timer 0:
  24.     TH0 = TIM / 256; // 4 starsze bity
  25.     TL0 = TIM % 256; // 4 młodsze bity
  26.  
  27.     return;
  28. }
  29.  
  30. int main(void){
  31.  
  32.     acc = 1; // wartość wrzucana na port diod
  33.     flag = 0; // lewo czy prawo, lewo = 0, prawo = 1
  34.  
  35.     LEDS = 1; // zaczynam od zapalenia pierwszej diody z prawej
  36.     // Timer:
  37.     TH0 = TIM / 256; // 4 starsze bity
  38.     TL0 = TIM % 256; // 4 młodsze bity
  39.     TMOD = 1; // Timer 0 w trybie 1
  40.     TR0 = 1; // włączam Timer 0
  41.     // Przerwania:
  42.     EA = 1; // włączenie przerwań
  43.     ET0 = 1 // włączenie przerwania Timera 0
  44.  
  45.     while(1){
  46.         // nieskończona pętla, przerywana przerwaniami
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment