1. 其閃存空間是分塊的64kB的閃存空間,共分5塊,由低到高分別為8kB(BLOCK0)、8kB(BLOCK1)、16kB(BLOCK2)、16kB(BLOCK3)以及16kB( BLOCK4);
2. 每一塊都可以單獨擦除;
3. 在程序中可以調(diào)用IAP功能對閃存中的每一字節(jié)進行單獨編程。
正是由于上述三個特點,在不外擴展存儲器情況下,將程序空間剩余下的閃存空間作為數(shù)據(jù)空間,把單片機接收中斷采集到的信號通道、延遲時間等參數(shù)存儲下來,實現(xiàn)掉電數(shù)據(jù)保存。
軟件設(shè)計
整個延時模塊的軟件包括了PC機發(fā)送參數(shù)程序,單片機接收并存儲參數(shù)程序和FPGA信號延時處理程序。
PC機發(fā)送參數(shù)程序是用戶將PC機的串口與模塊連接,通過PC機的發(fā)送程序界面,很容易對信號進行延時調(diào)整。發(fā)送程序采用VC作為編程語言,調(diào)用串口控件,設(shè)計方便且界面簡潔,界面如圖3所示。發(fā)送的每個數(shù)據(jù)幀8位,包括延遲時間和信號通道兩個參數(shù),其中高三位是要調(diào)整的信號通道,后五位表示延遲的時間。發(fā)送程序中,對界面中的“+”或“?”進行一次操作,PC就通過串口向單片機連續(xù)發(fā)送8路信號延時參數(shù),即只要調(diào)節(jié)了任一路信號的延時,PC機就會連續(xù)發(fā)送8個數(shù)據(jù)幀。

單片機軟件設(shè)計
單片機主要完成與PC之間的通信,數(shù)據(jù)的存儲和上電數(shù)據(jù)的讀取。程序采用C51編寫,編譯采用當前編譯效率最高的C51編譯器KEIL。軟件流程圖見圖4。

在P89C51RD2的64k閃存空間中,地址為0000H-7FFFH的32kB閃存空間作為程序空間,整個單片機程序編譯后為15k,所以32k的程序空間足夠大。余下的8000H?FFFFH的32kB 閃存空間留作數(shù)據(jù)存儲空間。兩塊數(shù)據(jù)存儲空間輪流使用,當數(shù)據(jù)量存滿其中一塊時通過程序跳轉(zhuǎn)到另一塊,在使用前先將該塊擦除。
各函數(shù)介紹如下:
main()——主程序;
InitUart(void)——串口初始化;
IapInit(void)——IAP功能初始化,使用IAP功能前必調(diào)用;
PowerOnRead(void)——上電讀取最近一次存儲的參數(shù)。模塊對上電時間要求不苛刻,最新數(shù)據(jù)的地址可通過查表方式尋找。每一個數(shù)據(jù)幀占一個數(shù)據(jù)存儲空間,由于單片機每次中斷都接收到8個數(shù)據(jù)幀,所以將每8個數(shù)據(jù)存儲空間劃分成一組,這樣只要查詢每組的頭一個地址就能快捷地完成查詢,大大節(jié)省了查詢時間。
EraseBlock (uint AddressRestore)——判斷當前數(shù)據(jù)存儲空間塊滿,并擦除;
RestoreData(void)——數(shù)據(jù)存儲在數(shù)據(jù)存儲空間;
FPGADataUp(uchar DataRec)——更新FPGA接口數(shù)據(jù)。
在程序中,要多次調(diào)用BootROM固件中的子程序。由于IAP子程序接口是匯編語言,為了編寫方便,同時使程序框架明了,編寫了一個IAPLIB.A51匯編語言接口函數(shù)庫和IAPLIB.H頭文件。在程序中加上IAP.H頭文件,調(diào)用固件程序時就不需在C51程序中嵌入?yún)R編,而是像調(diào)用C語言函數(shù)一樣簡單,這大大簡化了編程。
電子發(fā)燒友App








評論