Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.04.2005, 12:43
|
|
Частый гость
Регистрация: 18.01.2005
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
AT90S2313 stec
Люди кто хразбирается в атмелах пожалуйста помогите.
Потребовалось написать простейщую прпограмму генератора (приведена ниже). Проблема в том что нереагирует на кнопки (подпрограммы minus, plus), хотя симулятор работает нормально. Я так понял что микроконтроллер отказывается заходить в подпрограмму обработки кнопок.
Также где найти описание команды LOW(RAMEND) и кто может прокансультировать насчет работы со стеком.
Да и спасибо за proteus, класная вещь
.include "2313def.inc"
.def tmp3_r =r18
.def tmp1_r =r19
.def tmp2_r =r20
.org 0
rjmp st
.org 20
st:
ldi tmp1_r,LOW(RAMEND) ;Установка стека
out spl,tmp1_r
ldi tmp1_r,0B00000011
out ddrb,tmp1_r
ldi r16, 0b11111100
out portb, r16
loop:
sbi portb,0
rcall wait1
cbi portb,0
rcall knopka
rcall wait
sbi portb,1
rcall wait1
cbi portb,1
rcall wait
rjmp loop
wait1:
ldi tmp3_r, 255
l2: dec tmp3_r
brne l2
ret
wait:
ldi tmp3_r, 3
l3: mov tmp1_r, r23
l4: dec tmp1_r
brne l4
dec tmp3_r
brne l3
ret
knopka:
;in r20, pinb
;sbrs r20, 2
sbis pinb,2 ;Если нажата кнопка "+"(PD1)
rcall plus
;sbrs r20, 3
sbis pinb,3 ;Если нажата кнопка "-"(PD2)
rcall minus
ret
plus:
ldi r21,$ff ;Задаем максимальное значение ШИМ
ldi r22,$33 ;Задаем дискретность ШИМа
cpse r21,r23 ;Проверяем не максимальное ли значение
add r23,r22 ;Увеличиваем длительность импульса
ret
minus:
ldi r24,$00 ;Задаем min значение ШИМ
ldi r25,$33 ;Задаем дискретность ШИМа
cpse r24,r23 ;Проверяем не min ли значение
sub r23,r25
ret
|
|
|
|
22.04.2005, 13:46
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,381
Сказал спасибо: 1,962
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Ваша подпрограммка Wait1 выполняется примерно за 256*3=768 тактов. Даже если тактовая 1 МГц - такт 1 мкс - это меньше миллисекунды. Сколько раз успеет отработать подпрограмма "плюс" или "минус" даже при кратковременном нажатии? Думаю, очень много. Поэтому вы ничего и не замечаете.
LOW(RAMEND) это не команда, а константа - адрес последней ячейки ОЗУ.
Почитать по МК АВР кое-что можете на http://avr.nikolaew.org
|
|
|
|
23.04.2005, 03:17
|
|
Частый гость
Регистрация: 18.01.2005
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Программа приведена без куска где учитывается предыдущее состояние кнопки, факт в том что вообще нет реакции на кнопку.
|
|
|
|
24.04.2005, 00:28
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,381
Сказал спасибо: 1,962
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Сообщение от impuls-v
|
Программа приведена без куска где учитывается предыдущее состояние кнопки, факт в том что вообще нет реакции на кнопку.
|
"Нет реакции" - опять-таки как-то неконкретно. Какая должна быть реакция, чем контролируете...
Потом - мне кажется странным сравнение с максимумом по "=".
А если "перескочили"?
|
|
|
|
24.04.2005, 04:07
|
|
Частый гость
Регистрация: 18.01.2005
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Не перескакивает проверял, записывается в регистр число 255.
Мне кажется что какая-то проблема со стеком.
И если есть пример "антидребезговой" программы не мог бы выложить.
|
|
|
|
12.06.2005, 21:54
|
|
Прохожий
Регистрация: 27.02.2005
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
AT90S2313 stec
Должна работать. Сдела чтобы срабатывала не по нажатию кнопки а по отпусканию. В принципе пп дребезга не нужно.
.include "2313def.inc"
.def tmp3_r =r18
.def tmp1_r =r19
.def tmp2_r =r20
.def status_key = r17 ;состояние клавиш
.equ KEY_SET_PLUS=1
.equ KEY_SET_MINUS=2
.org 0
rjmp st
.org 20
st:
ldi tmp1_r,LOW(RAMEND) ;????????? ?????
out spl,tmp1_r
ldi tmp1_r,0B00000011
out ddrb,tmp1_r
ldi r16, 0b11111100
out portb, r16
clr status_key
loop:
sbi portb,0
rcall wait1
cbi portb,0
rcall knopka
rcall wait
sbi portb,1
rcall wait1
cbi portb,1
rcall wait
;***************************
sbrs status_key,0
rjmp m3
sbis pinb,2
rjmp m3
rcall plus
Cbr status_key,1
m3:
;***************************
sbrs status_key,1
rjmp m4
sbis pinb,3
rjmp m4
rcall minus
Cbr status_key,2
m4:
;***************************
rjmp loop
wait1:
ldi tmp3_r, 255
l2: dec tmp3_r
brne l2
ret
wait:
ldi tmp3_r, 3
l3: mov tmp1_r, r23
l4: dec tmp1_r
brne l4
dec tmp3_r
brne l3
ret
knopka:
;in r20, pinb
;sbrs r20, 2
sbic pinb,2 ;???? ?????? ?????? "+"(PD1)
rjmp m1
Sbr status_key,1
;rcall plus
m1:
;sbrs r20, 3
sbis pinb,3 ;???? ?????? ?????? "-"(PD2)
Sbr status_key,2
;rcall minus
ret
m2:
plus:
ldi r21,$ff ;?????? ???????????? ???????? ???
ldi r22,$33 ;?????? ???????????? ????
cpse r21,r23 ;????????? ?? ???????????? ?? ????????
add r23,r22 ;??????????? ???????????? ????????
ret
minus:
ldi r24,$00 ;?????? min ???????? ???
ldi r25,$33 ;?????? ???????????? ????
cpse r24,r23 ;????????? ?? min ?? ????????
sub r23,r25
ret
P. S. Извени что нет коментаря. Думаю догадаешся как работает. Стек тут не причем.
|
|
|
|
21.06.2005, 23:47
|
|
Гость
|
А что, кнопки "дребежат" только при нажатии,а при отпускании уже не "дребежат"? Какая то неправильная кнопка...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:18.
|
|