谢谢2L回答我的问题,看了你的回复我又去做了试验,结果如下:
main.c:
#include <pic.h>
__CONFIG(FOSC_HS & WDTE_OFF & nPWRTE_OFF & MCLRE_ON & CP_OFF & BOREN_ON & BORV_19 & PLLEN_OFF & DEBUG_ON);
__CONFIG(VCAPEN_RA0);
void other(void)
{
while(1);
}
void interrupt IsrHandle(void)
{
asm("nop");
}
void main(void)
{
while(1);
other();
}
反汇编:
void other(void)
{
while(1);
02B 282B GOTO 0x2b
02C 282B GOTO 0x2b
}
02D 0008 RETURN
void interrupt IsrHandle(void)
{
004 00FE MOVWF 0x7e
005 0E03 SWAPF 0x3, W
006 00F0 MOVWF 0x70
007 0804 MOVF 0x4, W
008 00F1 MOVWF 0x71
009 080A MOVF 0xa, W
00A 00F2 MOVWF 0x72
00B 1283 BCF 0x3, 0x5
00C 1303 BCF 0x3, 0x6
00D 087F MOVF 0x7f, W
00E 00F3 MOVWF 0x73
00F 118A BCF 0xa, 0x3
010 2813 GOTO 0x13
011 118A BCF 0xa, 0x3
012 2828 GOTO 0x28
asm("nop");
013 0000 NOP
}
014 0873 MOVF 0x73, W
void main(void)
{
while(1);
021 2821 GOTO 0x21
022 2821 GOTO 0x21
other();
023 118A BCF 0xa, 0x3
024 202B CALL 0x2b
025 118A BCF 0xa, 0x3
}
026 118A BCF 0xa, 0x3
使用MPLAB SIM DEBUG
1、在main.c编辑窗口,执行Step Into,PC指针 0X0 -> 0X01 -> 0X11 -> 0X21
2、在反汇编窗口,执行Step Into, PC指针 0X0 -> 0X01 -> 0X11 -> 0X12 ->0x28 -> 0x29 -> 0x2a -> 0x21
按我的理解,应该从复位中断从跳转到main,为什么会跑到0x11,而且上面的两次结果会不同?
|