Микропроцессорные средства и системы / 1-17
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ
КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. И. РАЗЗАКОВА
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»
Отчет
По Микропроцессорные средства и системы
Лабораторная работа 2
Бишкек 2019
Вариант 3
Вывести на семисегментный индикатор число 1857, чтобы при этом выводимое число мигало с частотой 2 Гц.
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char Numeral[11]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0x00};
unsigned char Discharge[4] = {0,0,0,0};
ISR (TIMER1_COMPA_vect)
{
static unsigned char ID;
ID++;
switch (ID)
{
case 1:
PORTD = 0b00001110;
PORTC = Numeral[Discharge[0]];
break;
case 2:
PORTD = 0b00001101;
PORTC = Numeral[Discharge[1]];
break;
case 3:
PORTD = 0b00001011;
PORTC = Numeral[Discharge[2]];
break;
case 4:
PORTD = 0b00000111;
PORTC = Numeral[Discharge[3]];
ID = 0;
break;
}
}
int main(void)
{
DDRC = 0xff;
PORTD = 0x00;
DDRD = 0xff;
TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению)
TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по
совпадению с OCR1A(H и L)
OCR1AH = 0b00000011; //записываем в регистр число для сравнения
OCR1AL = 0b01000010;
TCCR1B |= (1<<CS11);//установим делитель.
asm("sei");
while (1)
{
asm("cli");
Discharge[3] = 1;
Discharge[2] = 8;
Discharge[1] = 5;
Discharge[0] = 7;
asm("sei");
_delay_ms(500);
asm("cli");
Discharge[3] = 11;
Discharge[2] = 11;
Discharge[1] = 11;
Discharge[0] = 11;
asm("sei");
_delay_ms(500);
}
}