т одного кроку - 7.5 про
3. Програмне забезпечення МПС
3.1 Алгоритм роботи програми
Алгоритм роботи основної програми наведено на рис.3.
В
Малюнок 3. Загальний алгоритм роботи програми. br/>
При включенні контролера відбувається його ініціалізація, в якій задається частота переповнення таймера Т/С0, визначаться швидкість обміну інформацією через УАПП, встановлюються пріоритети переривань. Після цього контролер переходить в режим холостого ходу. Вихід з цього режиму відбувається при виникненні будь-якого переривання. p align="justify"> Алгоритм підпрограми обробки переривання від Т/С0 представлений на рис. 4. p align="justify"> При виникненні переривання від Т/С0 контролер виводить в порт Р1 чергову комбінацію нулів і одиниць для крокової двигуна.
В
Малюнок 4.1. Алгоритм підпрограми обробки переривання від Т/С0. br/>В
Малюнок 4.2. Алгоритм підпрограми обробки переривання від Т/С0. br/>
Алгоритм підпрограми обробки переривання від УАПП представлений на рис. 5. p align="justify"> При виникненні переривання від УАПП мікроконтролер приймає координати положення голівки.
В
Малюнок 5. Алгоритм підпрограми обробки переривання від УАПП. br/>
Ділянка А-В повторюється для Y перед запуском T/C0. За направлення руху по Y відповідає прапор F1. br/>
3.2 Лістинг програми
# include
short chx = 0, chy = 0, yy = 0, xx = 0, Gx = 0, Gy = 0, i, j;
// chx, chy - кількість позицій (обчислюється при ініціалізації)
// xx, yy - поточна позиція
// Gx, Gy - зміщення. p align="justify">// i, j - для покрокового управління двигунами.
Inte0 interrupt 0
{EX0 = 0; if (EX1 == 0) IE = 0x96;}// скидання дозволу на це переривання, якщо вже/* сталася ініціалізація по іншій осі, дозволяємо введення інформації з UART.
Inte1 interrupt 2
{EX1 = 0; if (EX0 == 0) IE = 0x96;}
Timer0 interrupt 1
{short smh ;//smh - зміщення. (EX0) {if (i == 8) then i = 1; else i = i * 2; chx + +; xx + +;}// оператор ініціалізації /* - рухає головку по х поки не сталося замикання герконового контакту і запам'ятовує число позицій. */
if (EX1) {if (j == 8) then j = 1; else j = j * 2; chy + +; yy + +;}// виконує аналогічні// дії по в.
if (! EX1 &&! EX0)// якщо відбулася ініціалізація обох осей.
{if (F0 && Gx! = 0) {if (i == 8) then i = 1; else i = i * 2; Gx -; xx + +;}// рух // вперед по Х поки змішання має ненульове значення (у всіх ...