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

 
 
> Кнопки на 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
сообщение Jul 30 2008, 11:36
Сообщение #2





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



Спасибо всем, кто отписался! Этот алгоритм:

Цитата(SasaVitebsk @ Jul 30 2008, 14:09) *
a:
ждём нуля на кнопке. если нет то на а
задержка 0.3 сек
б:
ждём 1 на кнопке. если нет то на б
задержка 0.3 сек
инкрементируем значение
выводим в порт
переход на а


действительно работает! Только что успешно протестил. Правда не слишком стабильно, но, я буду работать над этим smile.gif

И еще мелкий вопрос, тоже нигде не нашел: как на меге16 инициализировать стек? Видел следующий пример кода:

Код
ldi Temp,RamEnd      
out SPL,Temp


Но компилятор ругается на RamEnd. Подскажите, что надо исправить, чтобы работало на atmega16. Заранее спасибо.

Сообщение отредактировал SpiritCoat - Jul 30 2008, 11:37
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 30 2008, 11:40
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SpiritCoat @ Jul 30 2008, 14:36) *
Код
ldi Temp,RamEnd      
out SPL,Temp

Но компилятор ругается на RamEnd.

ldi Temp, High( RAMEND)
out SPH, Temp
ldi Temp, Low( RAMEND)
out SPL, Temp

Цитата
тоже нигде не нашел

плохо искали. стр. 46 ДШ на М16.
"The most typical and general program setup for the Reset and Interrupt Vector Addresses"
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:56
Рейтинг@Mail.ru


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