Спасибо большое что тыкнули носом в нужное место, проходился и по этому сайту раньше но использовать поиск не пробовал.
Решение проблемы там в пердпоследнем посте.
Но судя по переведённому тексту это работать будет.
Для пик бейсика
DEFINE RESET_ORG 800h ' User code starts at 800h for USB Boot-Loader
DEFINE INTHAND my_high_isr ' High priority int handler
DEFINE INTLHAND my_low_isr ' Low priority int handler
и затем использовать это
ASM
my_high_isr
; обработчик здесь
RETFIE FAST
ENDASM
ASM
my_low_isr
; обработчик здесь
RETFIE
ENDASM
В ближайшее время проверю это всё и отпишусь.Добавлено (28.10.2011, 03.59.50)
---------------------------------------------
Хотелось конешно написать "Ура получилось", но нет.
Возможно я не могу понять что там в предпоследнем посте, но у меня ничего не работает.
Компилирую это дело в MicroCode...
Code
DEFINE RESET_ORG 50h ' User code starts at 800h for USB Boot-Loader
DEFINE INTHAND my_high_isr ' High priority int handler
DEFINE INTLHAND my_low_isr ' Low priority int handler
Define OSC 48
ADCON1=15
TRISA=%00000000
porta=%00000000
TRISB=%00000001
portb=%00000000
main:
intcon = %10010000
porta.4 = 1
pauseus 5
porta.4 = 0
pauseus 5
goto main
ASM
my_high_isr
goto 0x0058
RETFIE FAST
ENDASM
ASM
my_low_isr
goto 0x0068
RETFIE
ENDASM
В микрокоде после компиляции, жалоба варнинг на ассемблерные метки my_high_isr и my_low_isr.
По сути программы(смотрел breakpoint в симуляторе) прога должна уйти в вечные переходы от 0058 в 00А4 и обратно.
А в симуляторе как и обычно при возникновении прерывания переходит не в 0х0058 а как всегда в 0х0008.
Тоесть опятьже, DEFINE RESET_ORG 50h и другие компилятору до лампочки, или ему чтото конкретно ещё надо.
Тоесть по адресу 0058 расположен гото в 00А4(в обработчик прерывания) а там гото 0058, всё какбы должно работать я думаю...
Помогите разобраться ((((
Может это особенность самого симулятора ?
если что, вот дизассемблер с адреса 0050
Code
000050 EF42 GOTO L1
000052 F000
000054 FFFF NOP
000056 FFFF NOP
000058 EF52 L9: GOTO L2
00005A F000
00005C FFFF NOP
00005E FFFF NOP
000060 FFFF NOP
000062 FFFF NOP
000064 FFFF NOP
000066 FFFF NOP
000068 EF55 L10: GOTO L3
00006A F000
00006C 6A13 L7: CLRF 0x013,A
00006E 0FFE ADDLW 0xFE
000070 6E12 MOVWF 0x012,A
000072 0004 L6: CLRWDT
000074 6AE8 CLRF WREG,A
000076 5A13 SUBWFB 0x013,F,A
000078 A0D8 BTFSS STATUS,C,A
00007A 0012 RETURN
00007C 0612 DECF 0x012,F,A
00007E D000 BRA L4
000080 D000 L4: BRA L5
000082 D7F7 L5: BRA L6
000084 0E0F L1: MOVLW 0x0F
000086 6EC1 MOVWF ADCON1,A
000088 6A92 CLRF TRISA,A
00008A 6A80 CLRF PORTA,A
00008C 0E01 MOVLW 0x01
00008E 6E93 MOVWF TRISB,A
000090 6A81 CLRF PORTB,A
000092 0E90 L8: MOVLW 0x90
000094 6EF2 MOVWF INTCON1,A
000096 8880 BSF PORTA,4,A
000098 0E05 MOVLW 0x05
00009A DFE8 RCALL L7
00009C 9880 BCF PORTA,4,A
00009E 0E05 MOVLW 0x05
0000A0 DFE5 RCALL L7
0000A2 D7F7 BRA L8
0000A4 EF2C L2: GOTO L9
0000A6 F000
0000A8 0011 RETFIE FAST
0000AA EF34 L3: GOTO L10
0000AC F000
0000AE 0010 RETFIE
Добавлено (28.10.2011, 08.39.50)
---------------------------------------------
Так, прошил бутлоадер микрочиповский.
Как оказалось возможно всё дело было в моём бутлоадере, который частично пропускал некоторые куски прошивки.