關(guān)鍵詞 PIClOF202 串行編程 89C51
隨著工業(yè)生產(chǎn)的擴大,存在著對同一型號芯片進行相同代碼編程的需要。目前采用的編程方式是通過專用的編程器來執(zhí)行,其編程過程離不開PC機。在對一定批量的芯片編程時,操作比較煩瑣,保密性能差,且難以在工業(yè)現(xiàn)場進行。
本編程器設(shè)計簡單,操作方便,保密性好,易攜帶,需要的外部設(shè)備少。編程器以PIClOF202為例進行設(shè)計。PIClOF2xx系列是 Microchip公司生產(chǎn)的低功耗,高性能Flash單片機。其封裝小,易于使用,成本低。性能穩(wěn)定,在通用電子設(shè)計中被廣泛使用。本設(shè)計的基本思想適用于其他類型的單片機。
1 PICl0F2xx的存儲結(jié)構(gòu)及編程方法
1.1 存儲空間映射
以PICl0F202為例,其內(nèi)部程序存儲空間映射如下:
0000H~0lFFH是用戶可以使用的代碼存儲空間,0200H~03FFH是系統(tǒng)的配置空間。其中01FFH單元是復(fù)位向量,系統(tǒng)復(fù)位后程序指針PC 將指向此地址單元。0200H~0203H是用戶ID信息存儲區(qū)間。0204H地址單元存放的是備份的OSCCAL值,被預(yù)留用來測試內(nèi)部晶振,因此該值在任何情況下都不應(yīng)該被更改。一旦被擦除,必須恢復(fù)該值,否則芯片不能正常工作。03FF地址單元存放系統(tǒng)的配置字,其他地址單元系統(tǒng)保留。
1.2 芯片編程方法
采用串行在線編程的方式,串行時鐘信號由主控單元的I/O口發(fā)出,從PIC的時鐘引腳ISCLK輸入。在串行時鐘信號作用下,串行數(shù)據(jù)從數(shù)據(jù)引腳ISDAT輸入/輸出,完成對芯片的Flash的代碼寫入。
只有在進入編程模式后,PIClOF202才能允許對其存儲空間的操作,如圖l所示。當保持ISDAT(串行數(shù)據(jù)輸入端)和ISCLK(串行時鐘輸入端) 為低電平時,VCC(芯片電源)上升到高電平。經(jīng)tl延時,MCLR(編程模式選擇端)上升到高電平,再經(jīng)t2延時,開始時鐘脈沖和數(shù)據(jù)的輸入/輸出。此時PIClOF202進入編程模式。
2 系統(tǒng)硬件結(jié)構(gòu)
系統(tǒng)邏輯框圖如圖2所示,由主控機、控制模塊、監(jiān)控顯示模塊和目標芯片組成。主控機選用89C51單片機,用單片機的2個I/O口分別提供ISDAT和 ISCLK信號;目標芯片即PIC。PIC的MCLR端為編程模式選擇端。為了讓PIC10F202能夠進入編程狀態(tài),需要由控制模塊實現(xiàn)對MCLR端的電平控制。監(jiān)控顯示模塊用于指示目前系統(tǒng)的工作狀態(tài)和監(jiān)控系統(tǒng)運行
2.1 控制模塊的實現(xiàn)
為了實現(xiàn)控制模塊對MCLR端的電平控制,使用2個晶體管T1、T2,如圖3所示。當單片機I/O口為高電位時,T1導(dǎo)通,其發(fā)射級為低電位,T2導(dǎo)通,于是電源VPP與PIC的MCLR端接通;當I/O口為低電位時,T1截止,其發(fā)射級為高電位,T2截止,VPP和MCLR端之間斷開。
2.2 監(jiān)控顯示模塊
采用一組發(fā)光二極管來顯示系統(tǒng)狀態(tài)和編程結(jié)果。系統(tǒng)的工作狀態(tài)包括:目標芯片檢測、就緒等待、編程進行中、代碼校驗等。系統(tǒng)在就緒等待狀態(tài)下,就緒狀態(tài)燈亮,主控機監(jiān)控按鍵指令;接到指令后即進入編程狀態(tài),同時編程燈亮,編程后執(zhí)行校驗,校驗完成后結(jié)束燈亮,說明完成整個縮程工作。整個編程過程中,若遇到故障,相應(yīng)故障燈顯示。
3 系統(tǒng)軟件設(shè)計
3.1 數(shù)據(jù)(命令)輸入方法
無論是指令還是需要寫入的代碼數(shù)據(jù),都在相應(yīng)的時鐘節(jié)拍下由串行數(shù)據(jù)端輸入。串行時鐘始終與串行數(shù)據(jù)的要求一致。對于不同的命令,時鐘脈沖間的時間參數(shù) t1~t6的要求是不同的。在相應(yīng)時鐘脈沖下降沿,PIC對數(shù)據(jù)端采樣,命令代碼在前,一段時間延時后,輸入代碼數(shù)據(jù)。數(shù)據(jù)低位在前,高位在后,如圖4所示。時間參數(shù)的具體要求見參考文獻。
下面以數(shù)據(jù)導(dǎo)入為例簡要說明。
代碼舉例如下:
由命令字表中可知,若導(dǎo)人數(shù)據(jù)的命令字是xx0010B,低位在前由ISDAT輸入,每次ISCLK的下降沿對ISDAT采樣。以上代碼實現(xiàn)了“0”、 “1”的輸入,其他命令的輸入類似。數(shù)據(jù)輸入和命令輸入都是下降沿有效。每次導(dǎo)入1字節(jié)的數(shù)據(jù)為12位,但是必須在16個時鐘脈沖中完成。前6個時鐘脈沖的下降沿輸入命令字,且前4位有效。一段時間參數(shù)的延遲后,數(shù)據(jù)開始輸入,第1個時鐘下降沿輸入起始位,后第2~13個時鐘的下降沿輸入1字節(jié)的數(shù)據(jù),共 12位。第14、15個時鐘下降沿輸入數(shù)據(jù)無效,*一個下降沿輸入停止位(起始位和停止位固定為O)。
3.2 PC指針的處理及尋址方法
在對其編程的過程中,需要知道當前PIC的PC指針指向的Flash存儲區(qū)單元地址,也就是當前的操作單元。由于無法直接讀取其PC指針的值,故采用在 89C5l的RAM區(qū)定義一個變量用來記錄PIC的PC指針(12位,占用2字節(jié))。該變量的值始終和PIC的PC指