17.04.2013
Mikronapędy w systemach komputerowych
Laboratorium 3:
Krzysztof Wroński
Marcin Zalepa
L16
1. Wstęp
Celem laboratorium było napisanie programu, który ma za zadanie obrócić silnik o zadany kąt oraz wykona delikatne zatrzymanie.
2. Program napisany na zajęciach:
3. Wniosek:
3. Wnioski:
Do wykonania ćwiczenia wykorzystaliśmy kod z poprzednich zajęć. Wykorzystanie klawiatury i wyświetlacza pozwala zmienić komutację. Program realizuje obrót silnika o zadany kąt. Silnik po przekroczeniu wartości 160 rozpoczyna zwalnianie. Główny problem stanowiło zapoczątkowanie działania silnika. Kolejnym krokiem było stworzenie funkcji pozwalającej na zatrzymanie silnika. Ostatecznie dodana została funkcja spowalniająca.
#include <reg515.sfr>
#include <lcd.h>
unsigned char tablica[4] = {1, 4, 2, 8};
int i=0, j = 0, obrot = 0, opoznienie = 60;
void fobrot(void)
{
P1 = tablica[j];
j++;
if(j==4)
j = 0;
--obrot;
if (!obrot)
{
IEN0 = 0x80;
out_instr(0x01);
}
}
_interrupt 0 void noweprzerwanie(void)
{
if(obrot<160)
{
opoznienie = 260 - obrot;
}
else
{
opoznienie = 60;
}
fobrot();
}
void main(void)
{
unsigned int liczba = 0;
unsigned char znak;
unsigned int pomocnicza = 0,pomocnicza1 = 1;
IT0 = 1;
lcd_init();
while(1)
{
znak = get_kb();
if(znak >= '0' && znak <= '9' && pomocnicza1 == 1)
{
if(pomocnicza == 1)
{
out_instr(0x01);
liczba = 0;
pomocnicza = 0;
}
out_char(znak);
pomocnicza1 = 0;
liczba = liczba*10 + (znak -'0');
for(i=0;i<20000;i++);
}
if(znak = 'e' && liczba != 0)
{
obrot = liczba;
fobrot();
for(i=0; i<5000; ++i);
fobrot();
for(i=0; i<3000; ++i);
IEN0 = 0x81;
for(i=0; i<20000; ++i);
liczba = 0;
}
if(get_kb() == '\0')
{
pomocnicza1 = 1;
}
}
}