Лабораторна робота №2
.docx
Міністерство науки і освіти України
Технічний коледж національного університету
«Львівська політехніка»
ЗВІТ
з лабораторної роботи №2
Дослідження роботи мікроконтролера із використанням таймеру та
переривання за таймером
Виконав: студент групи 31-КІ
Мартинюк Р.
Прийняв:
Терехов В. В.
Львів - 2020
Мета: розробити пристрій який повинен забезпечувати рух вогню удвох різних напрямах. Перемикання напряму руху буде здійснюватися за допомогою перемикача S1. У відповідності із поставленим завданням пристрій повинен керувати вісьмома світлодіодами HL1-HL8. Приєднаємо вісім світлодіодів до порту D мікроконтролера через струмообмежувальні резистори по 220 Ом. Перемикач приєднаємо до молодшого розряду порту С.
З мал3:
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
unsigned char temp;
DDRC =0*00;
PORTC |= (1 << PC0):
DDRD = 0*FF;
PORTD = 0*00;
while(1)
{
if((PINC&(1 << PC0)) == 0)
{
temp == 0*00;
while(temp != 0)
{
PORTD = temp;
temp = temp >> 1;
_delay_ms(100);
}
}
else
{
temp == 0*01;
while (temp != 0)
{
PORTD = temp;
temp = temp << 1;
_delay_ms(100);
}
}
}
}
Код рис6:
#include <avr/io.h>
void waitl(void)
{
TCNT1 = 0;
while (TCNT1 < 700){};
}
int main(void)
{
unsigned char temp;
DDRC = 0*00;
PDRTC |= (1 << PC0);
DDRD = 0*FF;
PORTD = 0*00;
TCCR1A = 0*00;
TSSR1B = (1 << CS12)|(0 << CS11)|(1 << CS10);
while(1)
{
if((PINC&(1 << PC0)) == 0)
{
temp = 0*00;
while (temp |= 0)
{
PORTD = temp;
temp = temp >> 1;
waitl();
}
}
else
{
temp = 0*01;
while (temp |= 0)
{
PORTD = temp;
temp = temp >> 1;
waitl();
}
}
}
}
Код мал8:
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char temp;
IRSR (TIMER1_COMPA_vect)
{
if((PINC&(1 << PC0)) == 0))
{
temp = temp >>1;
if (temp == 0);
{
temp = 0b10000000;}
}
else
{
temp = temp << 1;
if (temp == 0)
{
temp = 0b00000001;}
}
PORTD = temp;
}
int main (void)
{
DDRS = 0*00
PDRTC |= (1 << PSB);
DDRD = 0*FF;
PORTD = 0*00;
TCCR1A = 0*00;
TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10)|(1 << WGM12);
TCNT1 = 0*00;
OCR1A = 780;
TIMSK |= (1 << OCIE1A);
temp = 0b00000000;
sei();
while (1){};
}
Схема на основі генератора:
Висновок: В цій лабораторній роботі я навчився використовувати таймер для роботи з мікроконтролером, та збирати схему біжучих вогнів на основі генератора.