Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Не срабатывает прерывание на кнопках


Не срабатывает прерывание на кнопках

Сообщений 1 страница 7 из 7

1

Подскажите, пожалуйста - где ошибка в коде?

Код:
$regfile = "m32def.dat"                                     ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency
$baud = 19200                                               ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space


'$sim
'=================================
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 20 * 4
Config Debounce = 75
Config Int2 = Falling
Config Portc.2 = Input
Config Portc.3 = Input
Config Portc.4 = Input
Config Portc.5 = Input
Config Portc.6 = Input
Config Portb.2 = Input
'====ïåðåìåííûå äëÿ îïðîñà êëàâèàòóðû
Dim Keycode As Byte
'====îñíîâíîé öèêë================
On Int2 Button
Enable Interrupts
Enable Int2
Cursor Off
Do
   Locate 1 , 1
   Lcd Keycode
   Keycode = 0
Loop

Button:
Do
   If Pinc.2 = 0 Then
      Keycode = 1
   End If

   If Pinc.3 = 0 Then
      Keycode = 2
   End If

   If Pinc.4 = 0 Then
      Keycode = 3
   End If

   If Pinc.5 = 0 Then
      Keycode = 4
   End If

   If Pinc.6 = 0 Then
      Keycode = 5
   End If
Loop Until Keycode <> 0
Waitms 10
Gifr = 64
Return

End

0

2

Я надеюсь что все кнопки(которые подключают минус ) через диоды подключенны к ноге INT2.
Не понятна команда Keycode = 0 после Lcd Keycode , т.е. даже если сработал интерапт и вы получили значение Keycode  - оно отобразится на LCD  и сразу же перепишется 0(нулем), так что будет отображаться всегда "0".

Так же не рекомендовал бы делать  Do Loop Until Keycode <> 0 в процедуре прерывания.

0

3

Да, диоды катодами к кнопкам подключены, аноды объединены и заведены на INT2 (PB2).
Keycode = 0 для того, чтобы после определения нажатой кнопки сбросить переменную на "ничего не нажато".
Do Loop Until Keycode <> 0 для антидребезга, согласен, что не очень реализация.
Вся заготовка утащена с этого сайта.

0

4

Вот это "ничего не нажато" и будет у вас отображаться постоянно !

0

5

dibor написал(а):

Вот это "ничего не нажато" и будет у вас отображаться постоянно !

Убирал, ставил задержку, все одно не работает.
http://i080.radikal.ru/1312/c2/4205f220366ct.jpg

0

6

rustr написал(а):

Подскажите, пожалуйста - где ошибка в коде?

Выкладывайте всё, т.е. симуляция + исходники.

0

7

sasha_1973 написал(а):

Выкладывайте всё, т.е. симуляция + исходники.

http://rusfolder.com/images/download_1.jpg

PS: Утром тот же код заработал. Просто вот так  :shock: сам.
Походу, комп (протеус) подглючивает.

Отредактировано rustr (2013-12-06 09:21:48)

0


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Не срабатывает прерывание на кнопках