Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
29th
Ноя
Зажигание светодиодов от кнопки
Posted by Chas under assembler
Изучаю ассемблер, хочу написать программу для зажигания светодиодов от кнопки.
Светодиоды подключены к выводам PD6 и PD7 и через резисторы — на общий провод, кнопка — на PE4. Нажатие кнопки должно генерировать прерывание на зажигание одного светодиода, при следующем нажатии кнопки загорается второй светодиод, при этом первый светодиод гаснет. Таким образом, светодиоды должны загораться от кнопки попеременно. При 1-м,2-м,3-м (т.е. нечетных) нажатиях должна выполняться подпрограмма для зажигания 1-ого светодиода, при четных — подпрограмма для зажигание второго светодиода. Как это осуществить с помощью команды «исключающее или»?
С.М.С
Адреса прерываний не совпадают. по адресу 0x0002 находится INT0, а это вывод PD0. Нет объявленной процедуры Reset и.т.д. Извините, но не стал лепить к самолёту плуг в виде EOR. И оставил объявленное прерывание INT0, поэтому поменяйте кнопку на PD0 или выберете другое прерывание. Защиту от дребезга если потребуется добавите сами.
.device ATmega128
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m128def.inc"
;=============== Прерывания ====================================================================
.org 0 ;Начало программы после сброса
jmp RESET ; Reset Handler
.org INT0addr ;адрес прерывания INT0
jmp EXT_INT0
.def temp = r16
.def Flag = r17
RESET:
ldi temp,low(RAMEND)
out spl,r16
ldi temp,high(RAMEND)
out sph,r16
;к линии, отвечающей за кнопку подключаем подтягивающий резистор
ldi temp,(1<<0)
out PORTD,temp
;направление передачи данных - на вход и инициализация светодиодов
ldi temp,0b11000000
out DDRD,temp
ldi temp,(0<<ISC01)|(0<<ISC00) ;устанавливаем прерывание по спаду
out MCUCR,temp
ldi temp,(1<<INT0) ;разрешаем прерывание INT0
out GIMSK,temp
ldi Flag,1
sei
;============Главный цикл==================
Main:
nop
nop
jmp Main
;------------------------------------------
;============Процедура обработки прерывания INT0 ===========
EXT_INT0:
;
clr temp
out GIMSK,temp
;
ldi temp,$FF
out GIFR,temp ;
ldi temp,1
cp Flag,temp
breq LED_1_light_up
ldi temp,2
cp Flag,temp
breq LED_2_light_up
;------------------------------------------------------------
;============Процедура индикации первого светодиода===========
LED_1_light_up:
cbr Flag,0b00000001
sbr Flag,0b00000010
ldi temp,0b01000001
out PortD, temp
ldi temp,(1<<INT0) ;разрешаем прерывание INT0
out GIMSK,temp
sei
reti
;------------------------------------------------------------
;============Процедура индикации второго светодиода================
LED_2_light_up:
cbr Flag,0b00000010
sbr Flag,0b00000001
ldi temp,0b10000001
out PortD, temp
ldi temp,(1<<INT0) ;разрешаем прерывание INT0
out GIMSK,temp
sei
reti
;------------------------------------------------------------
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)