Сниппеты AVR. Настройка портов I/O для реакции на нажатие кнопки

👁 56 просмотров

Допустим, есть банальная задача написания кода для реагирования на нажатие кнопки, которая подключена к ножке микроконтроллера A. После нажатия на кнопку сигнал нажатой появится на ножке B и включится лампочка.

Схема подключения микроконтроллера

Код на ассемблере

; project.asm
;
; Created: 23.11.2017 16:49:01
; Author : WebSofter
;

.list
.def temp = R16			;Определяем переменный регистр
.cseg					;Устанавливаем текущую рабочую память

;Настриваем PORT A
ldi temp, 0x00			;Записываем константу для DDRA
out DDRA, temp			;В порт управления записываем 0. Будет работать на ввод
ldi temp, 0xff			;Записываем константу для PORTA
out PORTA, temp			;A порт вывода записываем 1. Будет полдключен внутренний резистор
;Настриваем PORT B
ldi temp, 0xFF			;Записываем константу для DDRB
out DDRB, temp			;В порт управления записываем 1. Будет работать на вывод

;Организуем бесконечный цикл чтения сигнала нажатия
main:					;Метка цикла
	in temp, PINA		;Читаем сигналы с PIN
	out PORTB, temp		;Записываем в порт на вывод
rjmp main				;Операция перехода к метке

 

Код на C/C++

/*
 * GccProject.c
 *
 * Created: 23.11.2017 21:39:37
 * Author : WebSofter
 */ 

#include <avr/io.h>


int main(void)
{
    //Настрояка порта A
	DDRA = 0x00;//Установка напрвления на ввод
	PORTA = 0xFF;//Подключение внутреннего резистора
	//Настрояка порта B
	DDRB = 0xFF;//Устновка направления на вывод
	PORTB = 0xFF;//Начальная установка
	
    while (1) //Бесконечный цикл
    {
		PORTB = PINA;//Записываем нажатый пин из A в B
    }
}