PC寄存器显示高于最后一个指令号的值
我是CCS C编程新手,我在书上做了一个练习。我从我的书中复制了完全相同的代码到编译器中,但程序不起作用。我对寄存器和指令进行了一些检查,在代码末尾发现:PC寄存器显示高于最后一个指令号的值,c,assembly,pic,C,Assembly,Pic,我是CCS C编程新手,我在书上做了一个练习。我从我的书中复制了完全相同的代码到编译器中,但程序不起作用。我对寄存器和指令进行了一些检查,在代码末尾发现: .................... enable_interrupts(0X0BC0); 00A4: MOVLW C0 00A5: IORWF 0B,F .................... .................... .................... } .................
.................... enable_interrupts(0X0BC0);
00A4: MOVLW C0
00A5: IORWF 0B,F
....................
....................
.................... }
....................
00A6: SLEEP
但Proteus上的注册信息显示:
PC: $00A7
INSTR.:ADDLW 0x1FF
输出文件中没有类似的指令。这里发生了什么?闪存不能真的“空”,但它要么是0x0000,要么是0xFFFF(如果它有ECC位,则无法读取,而PIC16没有) 显然,在PIC16上,“空”闪存包含值0xFFFF 指令“ADDLW 0x1FF”由该数字表示,因此CPU将解释“空”闪存,就像它被指令“ADDLW 0x1FF”填充一样
据我所知,SLEEP指令在下一条指令(这是“ADDLW 0x1FF”)时停止CPU,然后等待某个中断事件发生。这个程序的目标是什么?使用外部中断启用睡眠和唤醒PIC,更改时中断????