我是CCS C编程的新手,我正在练习我的书。我将完全相同的代码从我的书中复制到编译器,但程序没有用。我对寄存器和指令进行了一些检查,并在代码的末尾找到了它:
.................... enable_interrupts(0X0BC0);
00A4: MOVLW C0
00A5: IORWF 0B,F
....................
....................
.................... }
....................
00A6: SLEEP
但Proteus上的注册表示:
PC: $00A7
INSTR.:ADDLW 0x1FF
输出文件中没有这样的指令。这里发生了什么?
答案 0 :(得分:1)
闪存不能真正“空”但它是0x0000,0xFFFF(如果它有ECC位则不可读 - PIC16没有)。
显然在PIC16上“空”Flash包含值0xFFFF。
指令“ADDLW 0x1FF”由该数字表示,因此CPU将解释“空”闪存,就好像它已用“ADDLW 0x1FF”指令填充一样。
据我所知,SLEEP指令在下一条指令处停止CPU(这是“ADDLW 0x1FF”),然后等待直到发生某个中断事件。