|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.05.2016, 18:31 | #1 |
Новичок
Джуниор
Регистрация: 19.05.2016
Сообщений: 2
|
Зажигание светодиодов по нажатию кнопки
Есть такое задание: при подаче питания должен загореться красный светодиод. При нажатии кнопки S1 загореться зеленый светодиод, а красный потухнуть, при нажатии на кнопку S2 – загореться красный, зеленый потухнуть и т.д.
Написал вот такую программу, при включении работает неправильно (горит красный, а при нажатии кнопки ничего не происходит). Помогите пожалуйста найти и исправить ошибку Программа написана для микроконтроллера ATTiny26 .include "tn26def.inc" .dseg clok: .byte 1 ; счетчик 1мс для ПП задержки timer: .byte 2 ; счетчики для делителей частоты в таймере S1: .byte 1 ; 1->S1 нажата 0-> S1 не нажата S2: .byte 1 ; 1->S2 нажата 0-> S2 не нажата Regim: .byte 1 ; горит красный Regim0: .byte 1 ; номер подрежима 0-Зеленый выкл 1-вкл Regim1: .byte 1 ; номер подрежима 0-зел- кр+ 1 зел+ кр- .cseg ; Вектора прерываний rjmp RESET ; Reset handler rjmp INT_ALL ; IRQ0 handler rjmp INT_ALL ; Pin change handler rjmp INT_ALL ; Timer1 compare match 1A rjmp INT_ALL ; Timer1 compare match 1B rjmp INT_ALL ; Timer1 overflow handler rjmp TIM0 ; Timer0 overflow handler rjmp INT_ALL ; USI Start handler rjmp INT_ALL ; USI Overflow handler rjmp INT_ALL ; EEPROM Ready handler rjmp INT_ALL ; Analog Comparator handler rjmp INT_ALL ; ADC Conversion Handler INT_ALL: reti RESET: ; Все настроить ldi r16,RAMEND ;стек out SP,r16 ; ldi r16,0b11100000 ;порты ввода out DDRA,r16 ; ldi r16,0b00000000 ; out DDRB,r16 ; ldi r16,0b01100000 ;порты вывода out PORTB,r16 ; ldi r16,0b00000000 ; out PORTA,r16 ; ldi r16,(256-125) ; 8000000/64/125=1000 out TCNT0,r16 ; ldi r16,0b00000011 ; ck/64 out TCCR0,r16 ; ldi r16,0b00000010 ; out TIMSK,r16 ; sei ; ldi r16,0 sts Regim,r16 ; Главный цикл CIKL: ; Проверка режима lds r16,Regim cpi r16,0 breq CIKL_R0_S rjmp CIKL_R1_S ; Тут режим 0 CIKL_R0_S: ; Проверка подрежима lds r16,Regim0 cpi r16,0 breq CIKL_R0_0 ; Тут подрежим 0 режима 0 CIKL_R0_0: sbi PORTA,5 rjmp CIKL_R0_W ; Проверка выдержки времени lds r16,clok cpi r16,2 brlo CIKL_R0_TW CIKL_R0_W: ; Проверка выдержки времени lds r16,clok cpi r16,5 brlo CIKL_R0_TW ; Тут время вышло CIKL_R0_T0: clr r16 sts clok,r16 lds r16,Regim0 cpi r16,0 breq CIKL_R0_T01 clr r16 sts Regim0,r16 rjmp CIKL_R0_T02 CIKL_R0_T01: ldi r16,1 sts Regim0,r16 CIKL_R0_T02: ; Тут время невышло CIKL_R0_TW: ; Проверка кнопки S1 lds r16,S1 cpi r16,0 breq CIKL_R0_SW ; Проверка кнопки S2 lds r16,S2 cpi r16,0 breq CIKL_R0_SW2 ; Тут кнопка нажата CIKL_R0_S0: ldi r16,1 sts Regim,r16 clr r16 sts Regim0,r16 sts Regim1,r16 sts clok,r16 cbi PORTA,7 ; Тут кнопка не нажата CIKL_R0_SW: CIKL_R0_SW2: CIKL_R0_WW: rjmp CIKL_W CIKL_R1_S: ; Проверка подрежима lds r16,Regim1 cpi r16,0 breq CIKL_R1_0 ; Тут подрежим 0 режима 1 CIKL_R1_0: sbi PORTA,7 rjmp CIKL_R1_W CIKL_R1_W: ; Проверка выдержки времени lds r16,clok cpi r16,2 brlo CIKL_R1_TW ; Тут время вышло CIKL_R1_T0: clr r16 sts clok,r16 lds r16,Regim1 cpi r16,0 breq CIKL_R1_T01 clr r16 sts Regim1,r16 rjmp CIKL_R1_T02 CIKL_R1_T01: ldi r16,1 sts Regim1,r16 CIKL_R1_T02: ; Тут время невышло CIKL_R1_TW: ; Проверка кнопки S1 lds r16,S2 cpi r16,0 breq CIKL_R1_SW ; Тут кнопка нажата CIKL_R1_S0: ldi r16,0 sts Regim,r16 clr r16 sts Regim0,r16 sts Regim1,r16 sts clok,r16 cbi PORTA,7 cbi PORTA,5 ; Тут кнопка не нажата CIKL_R1_SW: CIKL_R1_WW: rjmp CIKL_W CIKL_W: rjmp CIKL ; Прерывание TIM0: push r16 in r16,SREG push r16 ldi r16,(256-125) ; 8000000/64/125=1000 out TCNT0,r16 ; ; 1000 Гц 1мс ; Проверка кнопки S1 clr r16 ; sbis PINB,5 ; пропуск сл комманды если PB5=1 ldi r16,1 ; то есть кнопка не нажата sts S1,r16 ; S1=1 если S1 нажата ; Проверка кнопки S2 clr r16 ; sbis PINB,6 ; пропуск сл комманды если PB6=1 ldi r16,1 ; то есть кнопка не нажата sts S2,r16 ; S2=1 если S2 нажата ; формирование частоты 10Гц lds r16,(timer+0) ; inc r16 ; sts (timer+0),r16 ; cpi r16,100 ; brlo TIM0_W ; clr r16 ; sts (timer+0),r16 ; ; 10Гц 100мс lds r16,clok ; увеличение счетчика на 1 inc r16 ; sts clok,r16 ; TIM0_W: pop r16 out SREG,r16 pop r16 reti |
19.05.2016, 19:50 | #2 |
Старожил
Регистрация: 19.06.2013
Сообщений: 2,463
|
Покажите скрин работы программы в AVRStudio в режиме запуска.
Репутация: полный "0"
|
20.05.2016, 16:37 | #3 |
Новичок
Джуниор
Регистрация: 19.05.2016
Сообщений: 2
|
|
20.05.2016, 18:24 | #4 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Ага. Пусть ещё покажет обстановку комнаты и слайды сцен в туалете т.
ТС! Да - блин! У Вас ЕГЭ, вообще мозги отшибло? Или это реклама так влияет? Тиньков-банк, квитанция о штрафах приходит раньше, чем совершено правонарушение .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
20.05.2016, 20:02 | #5 |
Старожил
Регистрация: 19.06.2013
Сообщений: 2,463
|
В задании ничего не сказано про таймер.
Репутация: полный "0"
|
20.05.2016, 20:33 | #6 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Анекдот: Бются на дороге два мерса. Выскакивает из одного качёк: - Ты чё!, я сейчас тебя застрелю. Второй, осматривая бампер : - И т.д и т.п...... Качёк в непонятках. Что такое и.т.д? Иди ты домой. А что такое и.т.п.? Придёшь домой, Потом мне расскажешь.... .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зажигание светодиодов от кнопки | Faton 11 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 7 | 22.06.2012 10:35 |
FormCloseQuery по нажатию кнопки | bulldog5293 | Общие вопросы Delphi | 3 | 17.10.2011 15:37 |
осуществить поиск по нажатию кнопки | morindos | Общие вопросы C/C++ | 13 | 23.06.2010 02:47 |
Сортировка по нажатию кнопки | Nate-p | Microsoft Office Access | 2 | 25.06.2008 08:35 |
Картинка появляется по нажатию кнопки! | MAKEDON | Общие вопросы Delphi | 3 | 12.12.2007 22:49 |