Предлагаю перейти на "личности"
Предлагаю перейти на "личности"
Код: Выделить всё
ldi r16,0b00001111 ;Set Ini Ports func (DIRECTIO)
out ddrb,r16 ; DDRB
ldi r16,0b00000000 ;Set Ini Ports value (VALUE)
out portb,r16 ; PORTB
Код: Выделить всё
; основная прогр
*************
*************
*************
Enable:
sei
sbi portd , 4
sbic pinb , PB4 ; "+"(PB4)
rjmp PwrOn
; sbic pinb , PB5 ; "-"(PB5)
; rjmp PwrOn
********
********
rjmp Enable ;
PwrOn:
********
я согласен а почему также переходит по команде sbis ???то это означает что pinbx будет присутствовать примерно 1/2Vcc что соответствует лог.1, поэтому программа правильно переходит.
это тот резистор который предлагал ooogo http://radiokot.ru/forum/download/file.php?id=31171единственное, без добавочного резистора на кнопке никак.
Код: Выделить всё
sbrc temp, x ; Если бит х в РОН temp сброшен, пропустить след. команду
sbi PORTy, z ; Установить бит z прота y
sbrs temp, x ; Если бит х в РОН temp установлен, пропустить след. команду
cbi PORTy, z ; сбросить бит z прота yСпасибо, логичное решение. По такому принципу исправил свой код, получил:Pooher писал(а):Ну, как то так...
Код: Выделить всё
andi PORTD, $CF; обнулить биты 4 и 5
andi PORTC, $F0; обнулить младший полубайт
sbrc scancod, 0 ; Если бит 0 в РОН scancod сброшен, пропустить след.команду
sbi PORTD, 4 ; Установить бит 4 прота D
sbrc scancod, 1 ; Если бит 1 в РОН scancod сброшен, пропустить след. команду
sbi PORTD, 5 ; Установить бит 5 прота D
sbrc scancod, 4 ; Если бит 4 в РОН scancod сброшен, пропустить след. команду
sbi PORTC, 0 ; Установить бит 0 прота C
sbrc scancod, 5 ; Если бит 5 в РОН scancod сброшен, пропустить след. команду
sbi PORTC, 1 ; Установить бит 1 прота C
sbrc scancod, 6 ; Если бит 6 в РОН scancod сброшен, пропустить след. команду
sbi PORTC, 2 ; Установить бит 2 прота C
sbrc scancod, 7 ; Если бит 7 в РОН scancod сброшен, пропустить след. команду
sbi PORTC, 3 ; Установить бит 3 прота C
clc
ldi rots,4
clr temp;
sbrc PIND, 4 ; Если бит 0 в РОН scancod сброшен, пропустить след. команду
sbi temp, 0 ; Установить бит 4 прота D
sbrc PIND, 5 ; Если бит 1 в РОН scancod сброшен, пропустить след. команду
sbi temp, 1 ; Установить бит 5 прота D
sbrc PINC, 0 ; Если бит 4 в РОН scancod сброшен, пропустить след. команду
sbi temp, 4 ; Установить бит 0 прота C
sbrc PINC, 1 ; Если бит 5 в РОН scancod сброшен, пропустить след. команду
sbi temp, 5 ; Установить бит 1 прота C
sbrc PINC, 2 ; Если бит 6 в РОН scancod сброшен, пропустить след. команду
sbi temp, 6 ; Установить бит 2 прота C
sbrc PINC, 3 ; Если бит 7 в РОН scancod сброшен, пропустить след. команду
sbi temp, 7 ; Установить бит 3 прота CКод: Выделить всё
andi PORTD, $CFКод: Выделить всё
in temp, PORTD
andi temp, $CF
out PORTD, tempКод: Выделить всё
sbi temp, 5здесь команда SBICsbrc PINC, 1
Между векторами прерываний и обработчиком старта или данные, или скорее всего, мусор. Бессмысленный набор, если рассматривать как команды. Копировать пару регистров и следующей же командой затирать регистры - ясен пень, мура. Отсюда и неизвестные опкоды.selevo писал(а):загрузил в avr studio 4 hex файл
дизассемблер показывает какие-то пропущенные строки со знаками вопросов вместо операндов
что за опкоды такие которые не понятны студии ?
или надо сменить адрес начала дизассемблирования ?