Скачиваний:
3
Добавлен:
27.01.2022
Размер:
60.45 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ

КЫРГЫЗСКОЙ РЕСПУБЛИКИ

КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. И. РАЗЗАКОВА

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»

Отчет

По МПС

Лабораторная работа 5

Бишкек 2019

Собрать схему из 5 кнопок и 16 светодиодов. Реализовать гирлянду из 5 режимов

На каждой из кнопок должен быть свой режим 1 должна работать через ШИМ

2 должна работать по прерыванию и 3 остальных режима

#define F_CPU 1000000UL

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

#define TRUE 1

#define FALSE 0

#define LO(x) ((x) & 0xff)

#define HI(x) ((x) >> 8)

#define LED_DDR_0 DDRC

#define LED_DDR_1 DDRA

#define LED_PORT_0 PORTC

#define LED_PORT_1 PORTA

#define BTN_0 0

#define BTN_1 1

#define BTN_2 2

#define BTN_3 3

#define BTN_4 4

#define BTN_PIN PINB

#define BTN_DDR DDRB

#define BTN_PORT PORTB

#define PWM_DUTY 0xaf

volatile uint32_t num = 0x01;

volatile uint8_t INT0_flag = FALSE;

volatile uint8_t ENA_FLAG = TRUE;

ISR(TIMER2_OVF_vect){

LED_PORT_0 = LO(num);

LED_PORT_1 = HI(num);

}

ISR(TIMER2_COMP_vect){

LED_PORT_0 = 0;

LED_PORT_1 = 0;

}

ISR(INT0_vect){

INT0_flag = TRUE;

}

int main(void){

LED_DDR_0 = 0xff;

LED_DDR_1 = 0xff;

BTN_DDR = 0;

BTN_PORT = 0x1f;

OCR2 = PWM_DUTY;

TIMSK |= 1 << OCIE2 | 1 << TOIE2;

TCCR2 |= 1 << WGM21 | 1 << WGM20;

GICR |= 1 << INT0;

MCUCR = 1 << ISC01;

DDRD = 0 << PD2;

PORTD = 1 << PD2;

GIFR = 1 << INTF0;

sei();

while(1){

if(!(BTN_PIN & (1 << BTN_0)))

{

_delay_ms(300);

num = 0x01;

LED_PORT_0 = 0;

LED_PORT_1 = 0;

SFIOR = 1 << PSR2;

TCCR2 |= 1 << CS21 | 1 << CS20;

while(BTN_PIN == 0x1f && !INT0_flag){

num <<= 1;

num |= 1;

if(num > 0xffff)

num = 0x01;

_delay_ms(200);

}

cli();

TCCR2 &= ~(1 << CS22 | 1 << CS21 | 1 << CS20);

sei();

}

if(!(BTN_PIN & (1 << BTN_1))){

_delay_ms(300);

num = 0x01;

LED_PORT_0 = 0;

LED_PORT_1 = 0;

while(BTN_PIN == 0x1f && !INT0_flag){

LED_PORT_0 = LO(num);

LED_PORT_1 = HI(num);

num <<= 1;

if(num > 0xffff)

num = 0x01;

_delay_ms(200);

}

}

if(!(BTN_PIN & (1 << BTN_3))){

_delay_ms(300);

LED_PORT_0 = 0;

LED_PORT_1 = 0;

if(ENA_FLAG){

ENA_FLAG = FALSE;

LED_PORT_0 = 0xff;

LED_PORT_1 = 0xff;

}else{

ENA_FLAG = TRUE;

LED_PORT_0 = 0;

LED_PORT_1 = 0;

}

}

if(!(BTN_PIN & (1 << BTN_4))){

_delay_ms(300);

num = 0x03;

LED_PORT_0 = 0x3;

LED_PORT_1 = 0;

while(BTN_PIN == 0x1f && !INT0_flag){

LED_PORT_0 = LO(num);

LED_PORT_1 = HI(num);

num <<= 2;

if(num > 0xffff)

num = 0x03;

_delay_ms(400);

}

}

if(INT0_flag){

INT0_flag = FALSE;

num = 0x07;

LED_PORT_0 = 7;

LED_PORT_1 = 0;

while(BTN_PIN == 0x1f && !INT0_flag){

LED_PORT_0 = LO(num);

LED_PORT_1 = HI(num);

num <<= 1;

if(num > 0xffff)

num = 0x07;

_delay_ms(400);

}

}

}

}

Соседние файлы в папке Микропроцессорные средства и системы