реклама на сайте
подробности

 
 
> Кнопки на atmega16
SpiritCoat
сообщение Jul 30 2008, 09:53
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 14-04-08
Пользователь №: 36 773



Искал поиском, но самого простого и базового объяснения нигде не нашел.
В общем идея такова: нажимается кнопочка и двоичное число, высвечиваемое на светодеодах, увеличивается на единичку. Деоды прикреплены к порту D, кнопочка висит на порте А. Вот код:

Код
.include "m16def.inc"

.def     Temp=R16
.def     Temp1=R17
.def     Temp2=R18
.def     Temp3=R19
.def     Temp4=R20


.cseg
.org 0

ldi Temp, 0b11111111  
out DDRB,Temp        

ldi Temp,0b00000001    
out PortB,Temp        

BUT:

sbis PinA,0x00; если нажато - переходим к SWITCH
rjmp BUT

SWITCH:

inc Temp
out PortB,Temp
ldi Temp1,0
ldi Temp2,0

DLY:

dec Temp1 ; задержка
brne DLY
dec Temp2
brne DLY

rjmp BUT


Вроде бы все логично, но почему-то работает как угодно, но не так как описано. Что я делаю неверно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SpiritCoat
сообщение Aug 3 2008, 20:42
Сообщение #2





Группа: Новичок
Сообщений: 11
Регистрация: 14-04-08
Пользователь №: 36 773



Помогите разобраться с прикручиванием нескольки кнопок. Например, при нажатии нулевой число увеличивается на единицу, а при нажатии первой – уменьшается. Написал код, но снова что-то не так:

Код
.include "m16def.inc"

.def temp1=R16
.def temp2=R17
.def temp3=R18
.def temp4=R19
.def temp=R20

.dseg

Line: .byte 2

.cseg
.org 0


ldi temp, High(RamEnd)
out SPH, Temp
ldi temp, Low(RamEnd)
out SPL, Temp

ldi temp, 0b11111111
out DDRB, temp
ldi Temp,0b00000001    
out PortB,Temp    

KeyRead:

in temp1,PinA      ; читаем порт А
sts Line, temp1    ; записываем результат в ОЗУ
rcall DLY          ; Задержка
cpi Temp1,0          
brne KeyTest       ; если что-то нажато - переходим на обработку
rjmp KeyRead       ;если ничего не нажато - сначала

KeyTest:
lds temp1, line      ; загружаем результат чтения порта
cpi temp1, 0b00000001; если нажата нулевая кнопка переходим к But0
breq But0
cpi temp1, 0b00000010; если нажата первая кнопка переходим к But1
breq But1

But0:

inc Temp             ;инкремент
out PortB,Temp
rcall DLY            ; вызываем задержку
rjmp KeyRead         ; в начало

But1:

dec Temp             ;декремент
out PortB,Temp
rcall DLY            ;задержка
rjmp KeyRead

;----------------------------------------------------------------------

DLY:

ldi Temp1,0
ldi Temp2,0

Loop:

dec Temp1
brne Loop
dec Temp2
brne Loop

ret


А точнее, кнопки не откликаются вовсе. Наставьте на путь истиный smile.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01339 секунд с 7
ELECTRONIX ©2004-2016