EMC的单片机全部是OTP的,开发时只能使用仿真器,但很多情况下,仿真器并不能仿真实际的运行环境,如工作电压为3.3V左右、测试系统的功耗、测试系统的稳定性、测试ADC、DAC、看门狗使用等,如果使用仿真器会根实际情况有很大差别,只有烧片子才能测试到实际结果,这样一次试验下来,如果运气不好,可能需要浪费10~20个芯片,造成很大的浪费。 要有效使用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 |