Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 1 / МПС_ИДЗ1

.docx
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
17.62 Кб
Скачать

Задачи:

  • Познакомиться с отладочной платой для микроконтроллера ATtiny104

  • Научиться программировать микроконтроллер из среды разработки Microchip Studio

  • На простом примере посмотреть, как выглядит программа для микроконтроллера на языках assembler и C

Работа:

1. Создать проект на языке Assembler, скопировать приведённый ниже код примера, проверить его работоспособность.

2. В коде на Assembler'e изменить основной цикл так, чтобы в нём не содержалось инструкций LDI. Для этого можно использовать инструкции SBI/CBI или SBR/CBR.

3. В коде на Assembler'e изменить подпрограмму задержки так, чтобы для создания секундной задержки было достаточно использования только 2 РОН.

4. Создать проект на языке C, скопировать приведённый ниже код примера, проверить его работоспособность.

5. В коде на С настроить ножку PB1 в режим работы input pull-up. В бесконечном цикле, кроме мигания диодом, опрашивать состояние ножки. При нажатой кнопке светодиод должен всегда гореть, не мигая. Время реакции на нажатие в пределах периода мигания допустимо. Для выполнения задания потребуется использовать регистры PUEB и PINB, а также условный оператор if ().

Код на языке Assembler:

// Инициализация периферии

LDI r16, (1 << DDRA5)

OUT DDRA, R16

// Основной цикл программы

Main:

LDI r16, (1 << PORTA5)

OUT PORTA, r16

RCALL Delay

LDI r16, 0

OUT PORTA, r16

RCALL Delay

RJMP Main

// Подпрограмма задержки

.equ LowByte = 255

.equ MedByte = 255

.equ HighByte = 2

Delay:

LDI R16, LowByte

LDI R17, MedByte

LDI R18, HighByte

loop:

DEC R16

BRNE loop

DEC R17

BRNE loop

DEC R18

BRNE loop

RET

Код на языке C:

#include <avr/io.h>

#include <util/delay.h>

int main(void)

{

DDRA |= (1 << DDRA5);

while (1)

{

PORTA |= (1 << PORTA5);

_delay_ms(500);

PORTA &= ~(1 << PORTA5);

_delay_ms(500);

}

}

Вопросы к защите:

  • рассказать о структуре микроконтроллера с точки зрения программирования, виды памяти и их назначение

  • рассказать об устройстве порта ввода/вывода (рис. 4.1 пособия), режимах его работы

  • рассказать о назначении команд ассемблера, использованных в программе

  • найти место в прошивке на языке Assembler, где можно было бы использовать указанную преподавателем команду

  • провести вычисления вида

uint8_t a = 0b00110101;

a &= 0b11001100 | (1 << 4);

a = ?

  • объяснить принцип создания задержки в программе на языке Assembler

Соседние файлы в папке 1