Наверное примитивный вопрос, но вот не знаю как реализовать.
Если кратко, нужно обрабатывать нажатие клавиш при работе различных подпрограмм. Наверное надо по прерыванию? Клавиатура на 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"
на экране строится график и постоянно опрашивается клавиатура...
т.е. должна опрашиваться, но почему-то прерывание не срабатывает.
где ошибка??