沒(méi)有仿真器開(kāi)發(fā)單片機(jī)程序
我大大小小斷斷續(xù)續(xù)也算開(kāi)發(fā)了幾年P(guān)IC了.除了一開(kāi)始用了ICD開(kāi)發(fā)了一個(gè)之外,后來(lái)再也沒(méi)有用過(guò)硬件仿真.說(shuō)來(lái)有些慚愧,到現(xiàn)在我自己掏腰包買(mǎi)的ICD2還沒(méi)啟用,硬件仿真器更是連見(jiàn)都沒(méi)見(jiàn)到過(guò).這都是因?yàn)長(zhǎng)B酸的緣故,這就不說(shuō)了.
先說(shuō)到現(xiàn)在的單位開(kāi)發(fā)的第一個(gè)東東.用的是12C508A,OTP的.先用MPLAB軟仿真,軟仿真的基本通過(guò)了,再"硬仿真",其實(shí)就是拿芯片燒了試.誰(shuí)讓LB不肯買(mǎi)N千的仿真器呢?好在當(dāng)時(shí)倉(cāng)庫(kù)里有N萬(wàn)片,燒!不過(guò)后來(lái)我自己有些肉痛,想想一個(gè)程序才100多句,燒一次還有300多字空的,怪可惜的,又想了一個(gè)一片燒幾次的辦法,先在這里簡(jiǎn)單介紹一下.
關(guān)鍵是寫(xiě)程序的時(shí)候要當(dāng)心一點(diǎn).比如一個(gè)芯片打算寫(xiě)3次就這樣寫(xiě):
1.第一次編程的時(shí)候在第一句寫(xiě)上ORG0x03,然后寫(xiě)GOTOSTART1
2.在后面的程序中緊跟著寫(xiě)程序,每個(gè)子程的標(biāo)號(hào)為L(zhǎng)ABLE1_X
3.燒寫(xiě)....
4.測(cè)試...
5.第二次編程,在第一次的GOTOSTART1前面一句寫(xiě)ORG0x02,然后寫(xiě)GOTOSTART2
6.緊跟在第一次的程序后面去掉END寫(xiě)第二次程序,每個(gè)子程序的標(biāo)號(hào)為L(zhǎng)ABLE2_X.
7.燒第二次...校驗(yàn)OK...
8.測(cè)試...
大家明白了嗎?還可以舉一反三,想想有中斷時(shí)怎么多次燒寫(xiě)...
余容后述......
后來(lái)漸漸開(kāi)發(fā)的程序大了,光靠看波形看不出什么名堂,要看內(nèi)存,怎么辦?只有把那些數(shù)值讀出來(lái),可又沒(méi)其它的硬件...好在現(xiàn)在都有FLASH芯片,程序大一點(diǎn),多燒幾次沒(méi)關(guān)系...有什么用?!先別急,電腦肯定有,再到網(wǎng)上當(dāng)一個(gè)串口調(diào)試軟件,再編一個(gè)串口通訊程序,使單片機(jī)可以和電腦通訊...明白了嗎?
隔一段時(shí)間把關(guān)鍵的寄存器值送到電腦上...16進(jìn)制看不懂?有BIN2BCD的子程序,還看不明白?有BCD2ASCII的子程序...
我就這樣收啊收,什么地方有問(wèn)題,就調(diào)用一下串口通訊的發(fā)哪個(gè)寄存器的值...只要你高興,增加一個(gè)CALL而已...
端口不夠?指示燈總有一個(gè)吧?數(shù)字輸入腳總有一個(gè)吧?暫時(shí)借來(lái)復(fù)用一下...
況且,ICD也要占用兩個(gè)口,幾個(gè)寄存器,一段程序空間,總比買(mǎi)一個(gè)ICD簡(jiǎn)單吧?況且實(shí)時(shí)/實(shí)地仿真,再好也沒(méi)有了?
評(píng)論