Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

ломаю голову над переыванием (asm. Tny2313)

Отправлено nestandart 05 февраля 2008 г. 19:59


align=Top
схема - по картинке (резисторы при кнопках - по килоому). прерываться должно по любой кнопке.
код - ниже. прерывание INT1 вновь включается по переполнению таймера T1.

проблема: если дрыгать кнопкой HOLD - то всё верно делается.
если дрыгать часто другое кнопкой - сначала тоже всё нормально, но после пыры-тройки замыканий кнопкой программа переходит на метку ROTATE_MODE:. т.е. нуль на PD0 как будто перестаёт отслеживаться.

где грабли ?

;####################
(внешнее прерывание INT1)
ROTATE_MODE_INT:
push temp0
in temp0,SREG
push temp0

sbic PIND,0 ; skip if PIND0 is clr
rjmp ROTATE_MODE

SET_FREEZE:
rcall PRINT_CLOCK_SYMBOL ; длится около сотни мкс

;#############
;start BEEP
ldi temp0,0x4F ; <- BEEP-frequensy
out OCR0B,temp0

ldi temp0,0b00010000
;5:4 - toggle OCR0B on compare
out TCCR0A,temp0

ldi temp0,0x0F
out TCNT1H,temp0
out TCNT1L,temp0

ldi temp0,0b00000011 ; start Timer1 ck/
out TCCR1B,temp0 ;
;#############
rjmp ROTATE_MODE_INT_OUT

ROTATE_MODE:
rcall PRINT_CLOCK_SYMBOL ; длится около сотни мкс

;do change the mode...
mov temp0,modes ;
ror temp0 ;
ror modes ;
sbrc modes,2 ; skip if bit #2 is clr
ldi modes,0b10000000 ; set mode is "sdgsdg"

sbrc modes,7;
rcall PRINT_FSDFSDG ; длится пару сотен мкс
sbrc modes,6;
rcall PRINT_DSGSGSD ; длится пару сотен мкс

;#############
;start BEEP
ldi temp0,0x2F ; <- BEEP-frequensy
out OCR0B,temp0

ldi temp0,0b00010000
;5:4 - toggle OCR0B on compare
out TCCR0A,temp0

ldi temp0,0x0F
out TCNT1H,temp0
out TCNT1L,temp0

ldi temp0,0b00000011 ; start Timer1 ck/
out TCCR1B,temp0 ;
;#############

ROTATE_MODE_INT_OUT:

;#### disable Extern INT1 ####
in temp0,GIMSK
cbr temp0,0b10000000
out GIMSK,temp0
;#### disable Extern INT1 ####

pop temp0
out SREG,temp0
pop temp0
reti
; ROTATE_MODE_INT (end)
;#################################################


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
умножьте 3 на единицу:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru