Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "reg515.sfr"
- #include "lcd.h"
- void sleep(int time);
- int tablica_komutacji[]={0xDE,0xDB,0xF9, 0xED,0xE7, 0xF6};
- int tablica_hallotronowa[]={0x3,0x1,0x5,0x4,0x6,0x2};
- int i=0;
- int krok = 0;
- int kierunek = 1; // 1 - normalnie, 0 - w druga strone
- _interrupt 5 void int_T2(void){
- TF2=0;
- //czeka na potwierdzenie wykonania przez wirnik zadanej wczesniej czesci obrotu
- for(i=0;i<5;i++)
- {
- /* Sprawdzene jest tutaj w jakim sektorze znajduje się wirnik */
- if((P4 & 0x7) == tablica_hallotronowa[i]) //odczyt wartosci trzech najmłodszych bitów
- krok = i; //zapis z ktorej komórki wykonywany był poprzedni skok.
- }
- if(kierunek){
- //wykonanie kolejnego skoku do przodu
- krok++;
- if(krok > 5)
- krok = 0;
- P1 = tablica_komutacji[krok];
- }
- else
- {
- // wykonanie kolejnego skoku do tyłu
- krok--;
- if(krok < 0)
- krok = 5;
- P1 = tablica_komutacji[krok];
- }
- }
- int main(void)
- {
- //zmienne
- unsigned char key;
- int liczba = 100;
- int licznik = 0;
- unsigned int f;
- T2I0 = 1;
- T2R1 = 1;
- EAL = 1;
- ET2 = 1;
- lcd_init(); //Inicjalizacja wyswietlacza LCD
- //ustawienie domyslnej czestotliwosci
- f = 1000000/liczba;
- f = 65535 - f;
- CRCH = (f >> 8);
- CRCL = f;
- liczba = 0;
- //wykonanie pierwszego skoku manualnie
- P1 = tablica_komutacji[krok];
- while(1)
- {
- sleep(2000);
- key = get_kb();
- sleep(12000);
- if((key != '\0') && (key >= 0x30 && key <= 0x39) && licznik < 4)
- {
- if(licznik == 0)
- {
- out_instr(0x1);//czyszczenie wyswietlacza
- liczba = 0;
- }
- licznik++;
- out_char(key);
- liczba *= 10;
- liczba = liczba + (key - 0x30);
- }
- sleep(9000);
- if(key == 'e') // wcisniety enter
- {
- f = liczba; //przypisanie liczby skokow wprowadzone z klawiatury
- licznik = 0;
- if( liczba >= 100 && liczba <= 500)
- {
- f = 1000000/liczba;
- f = 65535 - f;
- CRCH = (f >> 8);
- CRCL = f;
- liczba = 0;
- }
- krok = 0;
- }
- /* poniższe warunki odpowiadają za zmianę kierunku obrotu silnika */
- if(key == 'l')
- {
- kierunek = 0;
- krok = 5;
- }
- if(key == 'p')
- {
- kierunek = 1;
- krok = 0;
- }
- }
- return 0;
- }
- void sleep(int time) // funkcja opóźnienia
- {
- int i;
- int sleep = 0;
- for(i = 0; i < time ; i++)
- sleep += i;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement