Порядок виконання роботи. 1. Ознайомитися із системою автоматизованого проектування мовою «Сі» у пакеті MPLAB IDE

1. Ознайомитися із системою автоматизованого проектування мовою «Сі» у пакеті MPLAB IDE.

2. Ознайомитися зі схемами систем керування ЕП ліфта, побудованими з використанням програмованих мікроконтролерів PIC.

3. Використовуючи персональну ЕОМ зі встановленим програмним пакетом MPLAB IDE, за допомогою редактора написати програму для системи керування піднімальною установкою мовою Сі.

4. Виконати симуляцію та компіляцію створеного проекту.

5. Оформити звіт.

Задача

Написати програму для системи керування піднімальною установкою.

Умови:

При подачі живлення ліфт опускається на перший поверх. Ліфт переміщається на поверх відповідно до натиснутої кнопки. Ліфт сповільнюється досягши потрібного поверху. (Почати сповільнення на передостанньому поверсі відносно викликаного поверху)

Розв’язок

#define XTAL FREQ 4MHZ

#include<pic.h> // підключення системної

#include<stdlib.h> // бібліотеки

#include<delay.с>// підключення підпрограми для затримки

// до 200мС

#include<delay.h>

 

unsigned char knop;// зміні

unsigned char dat;

unsigned char kn;

unsigned char tdat;

unsigned char r;

unsigned char х;

unsigned char m;

unsigned char time;

void read (unsigned char knop);// оголошення функції read

main()

{

х=1;

ADCON1=0b00000110;/ /порт А – цифровий

TRISA=0b111111;

TRISB=0;

TRISC=0b10000000;

TRISD=0b11111000;

PORTB=0;

PORTC=0;

PORTD=0b00000100;

SPBRG=99;

TXSTA=0b00100100;// асинхронна високошвидкісна передача

RCSTA=0b10010000;// прийом дозволений

knop=0b00001000;// їдемо вниз

read(knop);

while(1)

{

while ((knop=(PORTD&120))==120);// чекаємо натиснення кнопки

knop=(knop^120);// інвертуємо отриманий стан кнопок

://120=1111000

dat=(PORTA^15);// інвертуємо отриманий стан датчиків

://30=11110

dat=(dat<<3);// зсуваємо байт dat на 3 біти вліво

if (dat<knop) PORTD=(PORTD¦2); // переміщення вгору

else PORTD=(PORTD¦4); // переміщення вниз

read(knop);// виклик підпрограми

 

}// кінець функції while(1)

}// кінець функції main()

void read (unsigned char knop)// підпрограма

{

while(1)

{

while((tdat=(PORTA&15))==15);// очікування доки ліфт перетне будь-який

;//поверх 30=11110

dat=(tdat^15);// інвертуємо отриманий стан датчиків

dat=(dat<<2);// зсуваємо байт dat на 1 біта вліво

if (dat!=0);// якщо dat не дорівнює нулю, то виконуються наступні рядки

{PORTB=dat;

TXREG=dat;// запис даних

TXEN=1;// дозвіл передачі даних

dat=(dat<<1);// зсуваємо байт dat на 2 біти вліво

}

if ((х=(dat-knop))==0);// якщо модуль (dat-knop)=0

{ // то

PORTD=(PORTD&248); //248=10000000

PORTB=(PORTB&60); // вимкнути пускачі на ДПС 60=111100 break;

}

r=(abs(dat-knop));//якщо модуль(dat-knop)=8 або

if (r==8 ¦¦ r==16 ¦¦ r==32) // якщо r=8 або r=16 або r=32

{ time=0; //то вмикаємо ДПС із затримкою

while(time!=10) //10*100=1000mS=1S

{ //

DelayMs(100);//затримка в 100 мс //

time++; //

} //

PORTB=(PORTB¦1); //16 або 32 то ввімкнути ДПС

}

}

knop=0;

х=1;

return; // повернення до основної програми

}