Я не так делал, я программу обработки прерывания не выносил отдельно, а писал в теле прерывания. Иначе тоже не хотело работать. Device 16F628A
Declare Xtal=4
Reminders = OFF
Config XT_OSC , MCLRE_OFF, WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , CP_OFF
Reminders = On
Declare All_Digital = On
'-------------------------- Настройки подключения ЖКИ ------------------------
Declare LCD_Type ALPHA ' Тип ЖКИ - буквенно -цифровой
Declare LCD_DTPin PORTB.4 ' Порт данных ЖКИ
Declare LCD_ENPin PORTB.3 ' Управление линией E
Declare LCD_RSPin PORTB.2 ' Управление линией RS
Declare LCD_Interface 4 ' Разрядность шины данных
Declare LCD_CommandUs 200 ' Задержка перед посылкой команды
Declare LCD_DataUs 50 ' Задержка перед посылкой данных
Declare LCD_Lines 2 ' Количество строк ЖКИ
'-------------------------- Настройки портов ---------------------------------
Symbol RBIF = INTCON.0 ;RB Port Interrupt Flag
Symbol INTF = INTCON.1 ; RB0 External Interrupt Flag
Symbol T0IF = INTCON.2 ; TMR0 Overflow Interrupt Flag
Symbol RBIE = INTCON.3 ; RB Port Change Interrupt Enable
Symbol INTE = INTCON.4 ;RB0 External Interrupt Enable
Symbol T0IE = INTCON.5 ; TMR0 Overflow Interrupt Enable
Symbol PEIE = INTCON.6 ; Peripheral Interrupt Enable
Symbol GIE = INTCON.7 ; Global Interrupt Enable
Dim BIG As Dword 'переменная для счета секунд
Dim BIG1 As BIG.HighWord
Dim SECONDS As Byte ; переменная для счета секунд
Dim MINUTES As Byte ; для счета минут '
Dim HOUR As Byte ; для счета часов '
Dim TEMPUST[4] As Byte
Dim HOURr[4] As Byte
Dim MINUTESr[4] As Byte
EData 5, 8, 15, 22, 0, 0, 0, 0, 19, 20, 19, 21
Clear
BIG = 1000000 ' Запишем в BIG 1000000 для отсчета секундных интервалов
On_Interrupt GoTo MYINT
GoTo main ; Переход на начало программы
MYINT: ; Обработчик прерывания
big1 = big1 -1 ' отнимаем единицу из старшего байта переменной BIG1
'то же самое, что и вычесть 65536 из BIG , но занимает меньше места
If BIG < 0 Then 'Если BIG < 0 то значит прошла секунда
BIG = BIG + 1000000 'К этому отрицательному числу прибавляем 1000000
Inc SECONDS
EndIf
T0IF = 0 ' сбросить флаг прерываний TOIF регистра TMRO
Context Restore
main:
Cls
TRISB = %00000000 ' Cконфигурировать вывода PORTB как выходы
TRISA = %11111111
OPTION_REG = %00000111
INTCON = %10100000
For i=0 To 3
HOURr[i]=ERead i
MINUTESr[i]=ERead i+4
TEMPUST[i]=ERead i+8
SetTemp = TEMPUST[1]
Next i
loop:
If SECONDS>=60 Then ; инкрементируем время
SECONDS=0
Inc MINUTES ; +минуты
GoSub Sr
If MINUTES=60 Then
MINUTES=0
'SECONDS=0
Inc HOUR ; +ЧАСЫ
If HOUR=24 Then
HOUR=0
EndIf
EndIf
EndIf
Print At 1,1,Dec2 HOUR,TEXT,Dec2 MINUTES
GoTo loop
Полностью проэкт http://www.picbasic.ru//publ/progrmmiruemyj_termostat/2-1-0-72
Я из Красилова!