EMC單片機實現(xiàn)多次燒錄的辦法
一般來說,EMC的OTP類型芯片是只能進行一次燒錄的。但是如果在第一次燒錄時,某一位為被燒為“1”,則該位可以再次被燒錄成“0”;反之,如果已經(jīng)被燒錄成“0”了,則無法再次燒錄成“1”。由此,有人發(fā)現(xiàn)了以下文章中介紹的這種多次燒錄OTP芯片的方法。
在EMC單片機中,“ADD A,@0xFF”的機器碼為全1。在下面這篇文章中,介紹的是用“ADD A,@0xFF”指令來預(yù)填,方便下次的改寫。其實,還有更方便的辦法:
文中提到的辦法如下
ORG 0X000
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
MAIN1:
其實,可以改寫成下面的程序,達到的效果和前面的方法是一樣一樣一樣樣的。
ORG 0X000
ORG 0X007 ;注意這條ORG定義
MAIN1:
另外,還有一種辦法,是可以用NOP指令覆蓋擦除原來的程序。因為NOP指令的機器碼是全0。也就是說,任何指令都可以用NOP指令來擦除。如果靈活利用,也可以實現(xiàn)多次燒錄的目的。這里就不展開說了。
補充一下,關(guān)于這種方法,如果用于學(xué)習(xí),確實可以節(jié)省一些芯片。但是如果在正式工作中采用這種方法,耗費的時間和精力會比省下的芯片價值更多,有點得不償失的味道。因此,匠人個人覺得沒有太大的必要。畢竟現(xiàn)在EMC的芯片已經(jīng)夠便宜的了,而時間和精力才是更寶貴。
下文為網(wǎng)上裝載文章,供網(wǎng)友參考:
ADD A,@0xFF的妙用
EMC的單片機全部是OTP的,開發(fā)時只能使用仿真器,但很多情況下,仿真器并不能仿真實際的運行環(huán)境,如工作電壓為3.3V左右、測試系統(tǒng)的功耗、測試系統(tǒng)的穩(wěn)定性、測試ADC、DAC、看門狗使用等,如果使用仿真器會根實際情況有很大差別,只有燒片子才能測試到實際結(jié)果,這樣一次試驗下來,如果運氣不好,可能需要浪費10~20個芯片,造成很大的浪費。
要有效使用ADD A,@0xFF這條指令,需要對單片機系統(tǒng)編程進行一些分析,從仿真結(jié)果(包含硬件仿真器)根實際芯片運行的差異方面分析程序,可以把程序分為兩個相對獨立的系統(tǒng):算法級程序和硬件級程序。
算法級程序:指與硬件無關(guān)的程序,如加減乘除算法,控制算法等,總之不涉及硬件單元的操作,這些程序由于其硬件無關(guān)性,使用仿真器和芯片結(jié)果肯定相同。
硬件級程序:與硬件相關(guān)的程序,如WDT、計數(shù)器、端口、中斷、休眠、喚醒等等,特別是WDT、中斷、休眠、喚醒等需要在芯片上才能測試出實際的結(jié)果,比如測試休眠狀態(tài)的功耗,用仿真器無論如何是試驗不出來的。
閑話少說,書歸正傳。
有效使用ADD A,@0xFF可以將一個芯片當(dāng)作數(shù)片使用,甚至可以到數(shù)十片,原理如下:
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程序運行結(jié)果不能達到預(yù)期目標,需要修改程序,假定為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
擴展閱讀:單片機可以燒寫多少次程序?
編輯:admin 最后修改時間:2018-05-18