Advertisement
Sawy3R11

mwsk_lab4_template

May 14th, 2017
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. #include "reg515.sfr"
  2. #include "lcd.h"
  3. void sleep(int time);
  4. int tablica_komutacji[]={0xDE,0xDB,0xF9, 0xED,0xE7, 0xF6};
  5. int tablica_hallotronowa[]={0x3,0x1,0x5,0x4,0x6,0x2};
  6. int i=0;
  7. int krok = 0;
  8. int kierunek = 1; // 1 - normalnie, 0 - w druga strone
  9.  
  10. _interrupt 5 void int_T2(void){
  11. TF2=0;
  12.     //czeka na potwierdzenie wykonania przez wirnik zadanej wczesniej czesci obrotu
  13.     for(i=0;i<5;i++)
  14.     {
  15.     /* Sprawdzene jest tutaj w jakim sektorze znajduje się wirnik */
  16.     if((P4 & 0x7) == tablica_hallotronowa[i]) //odczyt wartosci trzech najmłodszych bitów
  17.             krok = i;  //zapis z ktorej komórki wykonywany był poprzedni skok.
  18.     }
  19.     if(kierunek){
  20.         //wykonanie kolejnego skoku do przodu
  21.         krok++;
  22.         if(krok > 5)
  23.             krok = 0;
  24.         P1 = tablica_komutacji[krok];
  25.     }
  26.     else
  27.     {  
  28.         // wykonanie kolejnego skoku do tyłu
  29.         krok--;
  30.         if(krok < 0)
  31.             krok = 5;
  32.         P1 = tablica_komutacji[krok];
  33.     }
  34. }
  35.  
  36. int main(void)
  37. {
  38.     //zmienne
  39.     unsigned char key;
  40.     int liczba = 100;
  41.     int licznik = 0;
  42.     unsigned int f;
  43.     T2I0 = 1;
  44.     T2R1 = 1;
  45.     EAL = 1;
  46.     ET2 = 1;
  47.    
  48.     lcd_init(); //Inicjalizacja wyswietlacza LCD
  49.    
  50.     //ustawienie domyslnej czestotliwosci
  51.     f = 1000000/liczba;
  52.     f = 65535 - f;
  53.     CRCH = (f >> 8);
  54.     CRCL = f;
  55.     liczba = 0;
  56.     //wykonanie pierwszego skoku manualnie
  57.     P1 = tablica_komutacji[krok];
  58.  
  59.     while(1)
  60.     {
  61.         sleep(2000);
  62.         key = get_kb();
  63.         sleep(12000);
  64.     if((key  != '\0') && (key >= 0x30 && key <= 0x39) && licznik < 4)
  65.         {
  66.             if(licznik == 0)
  67.             {
  68.                 out_instr(0x1);//czyszczenie wyswietlacza
  69.                 liczba = 0;
  70.             }
  71.             licznik++;
  72.             out_char(key);
  73.             liczba *= 10;
  74.             liczba = liczba + (key - 0x30);
  75.         }
  76.  
  77.  
  78.         sleep(9000);
  79.         if(key == 'e')       // wcisniety enter
  80.         {
  81.             f = liczba; //przypisanie liczby skokow wprowadzone z klawiatury
  82.             licznik = 0;
  83.  
  84.             if( liczba >= 100 && liczba <= 500)
  85.             {
  86.                 f = 1000000/liczba;
  87.                 f = 65535 - f;
  88.                 CRCH = (f >> 8);
  89.                 CRCL = f;
  90.                 liczba = 0;
  91.             }
  92.             krok = 0;
  93.         }
  94.         /* poniższe warunki odpowiadają za zmianę kierunku obrotu silnika */
  95.         if(key == 'l')
  96.         {    
  97.             kierunek = 0;
  98.             krok = 5;
  99.         }
  100.         if(key == 'p')
  101.         {
  102.             kierunek = 1;
  103.             krok = 0;
  104.         }
  105.     }
  106.  
  107.     return 0;
  108. }
  109.  
  110. void sleep(int time) // funkcja opóźnienia
  111. {
  112. int i;
  113. int sleep = 0;
  114.  
  115.     for(i = 0; i < time ; i++)
  116.         sleep += i;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement