要有效使用ADD
A,@0xFF这条指令,需要对单片机系统编程进行一些分析,从仿真结果(包含硬件仿真器)根实际芯片运行的差异方面分析程序,可以把程序分为两个相对独立的系统:算法级程序和硬件级程序。
算法级程序:指与硬件无关的程序,如加减乘除算法,控制算法等,总之不涉及硬件单元的操作,这些程序由于其硬件无关性,使用仿真器和芯片结果肯定相同。
硬件级程序:与硬件相关的程序,如WDT、计数器、端口、中断、休眠、唤醒等等,特别是WDT、中断、休眠、唤醒等需要在芯片上才能测试出实际的结果,比如测试休眠状态的功耗,用仿真器无论如何是试验不出来的。
闲话少说,书归正传。
有效使用ADD A,@0xFF可以将一个芯片当作数片使用,甚至可以到数十片,原理如下:
EMC单片机写烧写的过程实际就是将为1的熔丝位熔断成为0,即可以从1写为0,但不能从0到1,ADD
A,@0xFF的机器码刚好是0x1FFF,全为1。例程如下:
第一次编程代码如下:
ORG 0X000
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
MAIN1:
...
...
JMP MAIN1
如果MAIN1程序运行结果不能达到预期目标,需要修改程序,假定为MAIN2。修改后代码如下:
ORG 0X000
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
JMP MAIN2
MAIN1:
...
...
JMP MAIN1
MAIN2:
...
...
JMP MAIN2