Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Опрос клавиатуры в любой момент программы
DNM Дата: Вт, 05.04.2016, 16:15  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 75
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

Наверное примитивный вопрос, но вот не знаю как реализовать.
Если кратко, нужно обрабатывать нажатие клавиш при работе различных подпрограмм. Наверное надо по прерыванию? Клавиатура на portB. Подпрограммы разные.

просто inkey в подпрограмму вставить - не вариант, учитывая задержки, математические расчеты и опрос датчиков...

Добавлено (05.04.2016, 16:15)
---------------------------------------------
Вот собирал пример кода из заготовок

Device = 18F452
Xtal = 20

@Config_REQ
@__Config Config1H, OSCS_OFF_1 & HS_OSC_1
@__Config Config2L, BOR_OFF_2 & BORV_20_2 & PWRT_ON_2
@__Config Config2H, WDT_OFF_2 & WDTPS_128_2
@__Config Config3H, CCP2MX_OFF_3
@__Config Config4L, STVR_OFF_4 & LVP_OFF_4 & DEBUG_OFF_4

Declare LCD_DTPort = PORTD      'LCD ¹ 4-11
Declare LCD_RSPin = PORTC.1     'LCD ¹ 16
Declare LCD_ENPin = PORTE.0     'LCD ¹ 17
Declare LCD_RWPin = PORTC.0     'LCD ¹ 15
Declare LCD_CS1Pin = PORTE.2    'LCD ¹ 12   ?
Declare LCD_CS2Pin = PORTE.1    'LCD ¹ 13   ?
Declare LCD_Type = Graphic
Declare GLCD_STROBE_DELAY 0
Declare GLCD_READ_DELAY 2
Declare Internal_Font = On
Declare Font_Addr = 0
Declare GLCD_CS_Invert = 1     
Declare All_Digital = On
' Ñäåëàòü âñå ïîðòû öèôðîâûìè
' âõîäàìè/âûõîäàìè
Declare PORTBPULLUPS = On

'--------------------------------------------Îáúÿâëåíèÿ ïåðåìåííûõ---------------------------------------------
Dim VAR1 As Byte ' Ñîçäàòü ïåðåìåííóþ VAR1 òèïà Byte
Dim KEY As Byte ' Ñîçäàòü ïåðåìåííóþ KEY òèïà Byte
Dim tex As String  * 60
Dim u As Dword
Dim w As Dword
Dim m As Float
Dim m1 As Float
Dim x As Float
Dim x1 As Float
Dim x2 As Float
Dim x3 As Float
Dim y As Float
Dim y1 As Float
Dim y2 As Float
Dim y3 As Float
Dim r As Float
Dim uu As Dword  
'---------------------------------------------------Çàñòàâêà---------------------------------------------------------
' Print At 1, 1, "Example commands INKEY"
' Îòîáðàçèòü íà äèñïëåå íàäïèñü
' "Example commands INKEY"
'Print At 2, 1, "KEYPAD 3x4" ' Îòîáðàçèòü íà äèñïëåå íàäïèñü "KEYPAD 3x4"
'DelayMS 3000 ' Ïàóçà 1 ñåê

'-------------------------- Ðåãèñòðû ñïåöèàëüíîãî íàçíà÷åíèÿ-------------------
                                                                   
'-------------------------- INTCON --------------------------------------------
                                                                   
Symbol RBIF = INTCON.0 ' Ôëàã âíåøíåãî ïðåðûâàíèÿ ïî PORTB.4-PORTB.7
Symbol INTF = INTCON.1 ' Ôëàã âíåøíåãî ïðåðûâàíèÿ ïî PORTB.0(INT)
Symbol T0IF = INTCON.2 ' Ôëàã ïåðåïîëíåíèÿ TMR0
Symbol RBIE = INTCON.3 ' Áèò ðàçðåøåíèÿ ïðåðûâàíèÿ ïî PORTB.4-PORTB.7
Symbol INTE = INTCON.4 ' Áèò ðàçðåøåíèÿ ïðåðûâàíèÿ ïî PORTB.0(INT)
Symbol T0IE = INTCON.5 ' Áèò ðàçðåøåíèÿ ïðåðûâàíèÿ ïî ïåðåïîëíåíèþ TMR0
Symbol PEIE = INTCON.6 ' Áèò ðàçðåøåíèÿ ïðåðûâàíèÿ îò ïåðèôåðèéíûõ óñòðîéñòâ
Symbol GIE = INTCON.7  ' Áèò ãëîáàëüíîãî ðàçðåøåíèÿ ïðåðûâàíèé
                                                                   
'-------------------------- PIE1, PIR1 ----------------------------------------------
                                                                   
Symbol TMR1IE = PIE1.0 ' Áèò ðàçðåøåíèÿ ïðåðûâàíèÿ ïî ïåðåïîëíåíèþ TMR1
Symbol TMR1IF = PIR1.0 ' Ôëàã ïðåðûâàíèÿ ïî ïåðåïîëíåíèþ TMR1
                                                                   
'-------------------------- T1CON ---------------------------------------------------
                                                                   
Symbol TMR1ON = T1CON.0     ' Áèò âêëþ÷åíèÿ ìîäóëÿ TMR1
Symbol TMR1CS = T1CON.1     ' Âûáîð èñòî÷íèêà òàêòîâîãî ñèãíàëà äëÿ TMR1
Symbol NOT_T1SYNC = T1CON.2 ' Ñèíõðîíèçàöèÿ âíåøíåãî òàêòîâîãî ñèãíàëà
Symbol T1INSYNC = T1CON.2   ' Ñèíõðîíèçàöèÿ âíåøíåãî òàêòîâîãî ñèãíàëà
Symbol T1SYNC = T1CON.2     ' Ñèíõðîíèçàöèÿ âíåøíåãî òàêòîâîãî ñèãíàëà
Symbol T1OSCEN = T1CON.3    ' Âêëþ÷åíèå òàêòîâîãî ãåíåðàòîðà TMR1
Symbol T1CKPS0 = T1CON.4    ' Âûáîð êîýôôèöèåíòà äåëåíèÿ ïðåääåëèòåëÿ TMR1
Symbol T1CKPS1 = T1CON.5    ' Âûáîð êîýôôèöèåíòà äåëåíèÿ ïðåääåëèòåëÿ TMR1
                                                                   
'-------------------------- Íà÷àëî -------------------------------------------
                                                                   
'-------------------------- Íàñòðîéêà TMR1 äëÿ ïðåðûâàíèé --------------------
TMR1L = $CC   ' Çíà÷åíèå ìëàäøåãî ðåãèñòðà TMR1
TMR1H = $0A    ' Çíà÷åíèå ñòàðøåãî ðåãèñòðà TMR1
T1CON = %00110000
TMR1IE = 1    ' Ðàçðåøåíèå ïðåðûâàíèÿ ïðè ïåðåïîëíåíèè TMR1 ñ ÷àñòîòîé 9,956669 Ãö
                                                                   
PEIE = 1    ' Ðàçðåøåíèå ïðåðûâàíèé îò ïåðèôåðèéíûõ óñòðîéñòâ
GIE = 1    ' Ðàçðåøåíèå ãëîáàëüíîãî ïðåðûâàíèÿ
                                                                   

On_Interrupt GoTo ISR  'Çàäàäèì àäðåñ îáðàáîò÷èêà ïðåðûâàíèé

GoTo Main              'Ïîñëå âñåõ íàñòðîåê ïåðåéäåì íà âûïîëíåíèå ãëàâíîé

'À òàéìåð óæå òèêàåò è óâåëè÷èâàåò ñâîå çíà÷åíèå ñ êàæäûì òèêîì

'Êàê âû ïîìíèòå, ìû åãî çàãðóçèëè çíà÷åíèåì 28036 â íà÷àëå

'Êàê òîëüêî îí äîòèêàåò äî 65535 è ïðèäåò ñëåäóþùèé òèê - ýòî âûçîâåò åãî

'ïåðåïîëíåíèå è, ñîîòâåòñòâåííî, ïðåðûâàíèå ïî ïåðåïîëíåíèþ TMR1

ISR:

Context Save          'Ñîõðàíèì ðåãèñòðû STATUS è àêêóìóëÿòîð

VAR1 = InKey
' Ñêàíèðîâàòü êëàâèàòóðó è ïðèñâîèòü êîä
' íàæàòîé êëàâèøè ïåðåìåííîé VAR1
DelayMS 150 ' Bêëþ÷èòü àíòèäðåáåçãîâóþ çàùèòó íà 100 ìñåê
KEY = LookUp VAR1,[1,2,3,65,4,5,6,66,7,8,9,67,"*",0,"#",68]
' Êîíâåðòèðîâàòü ñîäåðæèìîå VAR1
Print At 1, 1, "InKey = ", Dec VAR1, " "
' Îòîáðàçèòü íà äèñïëåå çíà÷åíèå InKey â äåñÿòè÷íîì
'âèäå
Print At 2, 1, "Key = ", Dec KEY, " "
' Îòîáðàçèòü íà äèñïëåå çíà÷åíèå Key â
' äåñÿòè÷íîì âèäå
If VAR1<>16 Then tex=tex+str$(Dec KEY)
Print At 4, 1, tex
If KEY = 42 Then Print At 6, 1, "KEY = * "
' Åñëè KEY = 42, òî îòîáðàçèòü íà ÆÊÈ íàäïèñü
' "KEY = * "
If KEY = 35 Then Print At 6, 1, "KEY = # "

uu=uu+1
Print At 3, 1, Dec uu

'Timer = 28040         'Çàãðóæàåì òàéìåð íîâûì çíà÷åíèåì. Îáðàòèòå âíèìàíèå - îíî îòëè÷íî îò íà÷àëüíîãî

Context Restore       'Âîññòàíîâèì çíà÷åíèÿ ðåãèñòðîâ W è STATUS

Retfie                'Âîçâðàò èç îáðàáîò÷èêà

Main:
Cls
'----------------------------------------------Ãëàâíàÿ ïðîãðàììà-------------------------------------------------

Print At 0,1,"r = 20 * Cos (2 * f)"
Print At 7,1,"x=r*Cos(f)","y=r*Sin(f)"
For u=1 To 300
m=2*u
m= 4* Cos m
m= 5* m
Print At 1,1,Dec m
Print At 1,17,Dec u  
  x= Cos u
  x= m*x
  y= Sin u
  y=m*y
  Plot y+32,x+64
Print At 6,1,Dec x
Print At 6,14,Dec y
  Next u
  DelayMS  5000  
 Cls

GoTo Main             'Îòïðàâëÿåìñÿ íà íà÷àëî

Include "FONT.INC"

на экране строится график и постоянно опрашивается клавиатура...
т.е. должна опрашиваться, но почему-то прерывание не срабатывает.
где ошибка??


Более подробно здесь: http://asemlab.net/
Сообщение отредактировал DNM - Вт, 05.04.2016, 08:47
ЯНДЕКС Дата: 05.04.2016
xvovanx Дата: Вт, 05.04.2016, 20:37  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Жаль, что комменты с "иероглифами".
Вижу в проге только разрешение глобальных прерываний, не вижу установки битов разрешения прерывания по выводам порта В- INT0IE и RBIE. В обработчике прерываний нет сброса флага принятого прерывания по входу/входам порта В.
И как подключена клава физически к порту?, хорошо бы схему глянуть. Случаем не используешь выводы 4-7 как выходы, а прерывания их ждут как входы.
Для наглядности приложил куски своих кодов
Прикрепления: 5471269.jpg (137.9 Kb) · 4382667.jpg (136.2 Kb) · 9212916.jpg (73.1 Kb) · 6761743.jpg (82.2 Kb)

Сообщение отредактировал xvovanx - Вт, 05.04.2016, 21:12
  • Страница 1 из 1
  • 1
Поиск: