PC寄存器显示的值高于最后一个指令编号

时间:2014-07-16 08:53:31

标签: c assembly pic

我是CCS C编程的新手,我正在练习我的书。我将完全相同的代码从我的书中复制到编译器,但程序没有用。我对寄存器和指令进行了一些检查,并在代码的末尾找到了它:

.................... enable_interrupts(0X0BC0); 
00A4:  MOVLW  C0
00A5:  IORWF  0B,F
....................  
....................  
.................... } 
....................  
00A6:  SLEEP

但Proteus上的注册表示:

PC: $00A7
INSTR.:ADDLW 0x1FF

输出文件中没有这样的指令。这里发生了什么?

1 个答案:

答案 0 :(得分:1)

闪存不能真正“空”但它是0x0000,0xFFFF(如果它有ECC位则不可读 - PIC16没有)。

显然在PIC16上“空”Flash包含值0xFFFF。

指令“ADDLW 0x1FF”由该数字表示,因此CPU将解释“空”闪存,就好像它已用“ADDLW 0x1FF”指令填充一样。

据我所知,SLEEP指令在下一条指令处停止CPU(这是“ADDLW 0x1FF”),然后等待直到发生某个中断事件。