Politechnika Rzeszowska im. Ignacego Łukaszewicza |
|||
Urządzenia elektryczne w systemach komputerowych |
|||
Rok studiów: II FD |
Grupa laboratoryjna: L09 |
Numer ćwiczenia: 3 |
|
Temat ćwiczenia: Algorytmy komutacji silników skokowych ze sprzężeniem zwrotnym |
|||
Wykonali: Ralf Sawa Dawid Smyka Mateusz Słabicki
|
Data wykonania ćwiczenia:
23.04.2009 |
Kod źródłowy programu napisanego na laboratorium:
Program sporządzony podczas zajęć laboratoryjnych okazał się działać poprawnie, bez żadnych zastrzeżeń, zatem podany tu kod nie zawiera żadnych zmian w stosunku do wersji, którą przedstawiliśmy na końcu zajęć, z wyjątkiem komentarzy.
#include <reg515.sfr>
#include <lcd.h>
unsigned char x;
unsigned int liczba, licznik = 0, licznikC = 0, liczba2 = 0, aaa;
//x -> znak wpisany z klawiatury
//licznikC -> licznik cykli
//aaa -> 'predkosc', liczba petli opozniajacych
//liczba, liczba2 -> liczba wpisana z klawiatury
//licznik -> zmienna do obslugi tablicy P1
void czekaj(unsigned int n); //deklaracja funkcji opozniajacej
unsigned char tablica[4] = {9,10,6,5}; // komutacja ½
_interrupt 0 void int_0(void)
{
P1 = tablica[licznik++];
if(licznik == 4) licznik = 0;
if (EAL == 1) //jezeli silnik jest w ruchu, zliczamy wywolania tego przerwania
{
licznikC++;
}
if (licznikC >= liczba2-200) // zaczynamy hamowac przy 200 obrotach do konca (200 wywolan przed koncem)
//zwiekszajac liczbe wywolan funkcji opozniajacej
{
aaa++;
}
if (licznikC == liczba2) // licznik cykli rowny wpisanej liczbie z
//klawiatury, zatrzymujemy i resetujemy zmienne sterujace
//zatrzymujemy silnik
{
EAL = 0;
liczba2 = 0;
liczba = 0;
aaa = 100;
licznikC = 0;
}
czekaj(aaa);
}
int main()
{
init();
EAL = 0;
EX0 = 1;
IT0 = 1;
liczba = 0;
while(1)
{
x = get_char();
if((x >= 48) && (x <= 57))
{
liczba = 10 * liczba + (x - 48);
put_char(x);
}
if(x == 'e')
{
liczba2 = liczba;
liczba = 0;
aaa=100;
put_instr(0x01); //czyscimy wyswietlacz
EAL = 1; //uruchamiamy silnik
P1 = 9;
P1 = 10; //2 'probne' ruchy silnika
}
czekaj(20000);
}
return 0;
}
void czekaj(unsigned int n) //definicja funkcji opozniajacej
{
int i;
for(i = 0; i < n; i++){ }
}