1.引言
單片機開發與應用已滲入我們生活中各個方面,其中一個應用就是對內存較小的芯片大批量燒錄,就有了性能穩定的高速編程器誕生以滿足各大廠商實現大量芯片燒錄的目標。目前市場上運用最廣泛的編程器是基于89C51的,但其功能過于單一,不能滿足日益發展的市場需求。本文提出一種采用MSP430F149單片機作為CPU控制核心的編程器。與51單片機編程器相比,MSP430單片機編程器增加了I2C存儲模塊,可無需電腦利用該編程器對芯片進行燒錄,使燒錄過程更方便、快捷。
2.系統設計
基于MSP430的單片機編程器以MSP430F149為核心,主要由鍵盤、顯示、串口、燒寫、電平轉換、電源和存儲模塊構成。系統結構框圖如圖1所示。
圖1系統結構框圖
3.編程器硬件電路設計
3.1、CPU模塊
編程器核心模塊選用超低功耗MSP430F149系列單片機[1]。圖2是MSP430F149最小系統原理圖。Y1、Y2是晶振模塊,RST接入復位模塊,P1為數據傳輸口,P3.0~P3.4為高4位地址輸出,P4為低8位地址輸出,P5.3、P5.4與鍵盤連接,P2、P5.0~P5.2與液晶顯示器連接,P3.6、P3.7與存儲器相連。
圖2 MSP430F149最小系統原理圖
3.2、串口模塊
MSP430F149提供信號電平與上位機工作電平不一致,因此要通過MAX232進行電平轉換。MAX232芯片是依照RS-232標準串口設計的接口電路,用+5V單電源供電。MAX232接MSP430F149和上位機之間進行通訊。
3.3、存儲模塊
如圖3基于MSP430編程器的I2C存儲模塊為EEPROM存儲器,選用內存為8KB的AT24C16芯片。MSP430F149和AT24C16之間用一根數據線SDA、一根時鐘線SCL連接。存儲器中存放將要燒寫到51單片機的程序,以滿足脫機要求。
圖3 ?存儲模塊連接圖
3.4、鍵盤和顯示模塊
鍵盤模塊選用PS2鍵盤,具有通用可靠、使用連線少(僅使用2根信號線)特點得到廣泛使用。在燒錄中主要起功能選擇作用,圖4是鍵盤模塊連接圖。
圖4 ? 鍵盤模塊電路原理圖
顯示模塊選用1602液晶顯示,顯示被燒寫芯片相關參數,如芯片型號、編程電壓及讀、寫、擦除等。圖5是顯示模塊連接圖,MSP430F149根據鍵盤控制命令將編程器當前狀態和數據顯示出來。
圖5 顯示模塊電路原理圖
3.5、電源模塊
電源給MSP430F149芯片提供3.3V工作電壓,也給燒錄的51芯片提供一個12V編程電壓。如圖6,+5V電源通過ASM1117-3.3V進行電壓轉換產生3.3V電壓提供給MSP430F149單片機,另外+5V電源直接輸入到51芯片以及產生12V編程電壓。
圖6 電源模塊連接圖
3.6、編程模塊
編程模塊中89C51是被燒寫芯片,P0.0~P0.7為數據輸入,P1.0~P1.7為低8位地址輸入,P2.0~P2.3為高4位地址輸入而P3.6、P3.7作為功能控制端口[2]。如圖7在51單片機外圍鏈接4片74LVC8T245實現3.3V向5V電壓變換。DIR對信號傳輸方向控制,當該引腳為高電平時數據總線傳輸方向由A1~A8到B1~B8,為低電平時則反向傳輸。對連接地址和控制的3片74LVC8T245而言DIR低電平有效。
圖7 ?89C51單片機編程連線圖
4.編程器功能及軟件設計
基于MSP430單片機編程器具有讀、寫、校驗和擦除的功能。這些功能可以在聯機狀態下通過命令方式操作,也可以在脫機狀態下通過鍵盤控制完成,編程數據和命令傳送通過上下位機通訊實現。
如圖8編程器進入中斷狀態等待接收數據,一旦接收到數據判斷是否為“命令”,若是則判斷否是“檢查”、“擦除”、“讀”或“寫”命令,若是其中命令之一,編程器就執行相應操作。否則返回串口中斷接收狀態等待數據到來。若接收的不是“命令”則判斷是否為“數據”,若是就將數據儲存到E2PROM,否則編程器返回中斷接收狀態。
圖8 ?下位機串口通訊及聯機編程程序流程圖
如圖9編程器讀取鍵盤輸入命令,若輸入“Check#”則對51單片機Flash進行檢查,全為FFH則LCD會顯示“OK”,還顯示單片機ID、編程電壓等信息,否則顯示未擦除單元地址;若輸入“Erase#”編程器會擦除51單片機Flash中內容并在LCD上顯示“完成”;若輸入“Read#”編程器會讀51單片機Flash中內容到RAM中并在LCD上顯示;若輸入“Write#”編程器會把E2PROM存儲內容寫入51單片機Flash,并在LCD上顯示“完成”;若輸入是“Verify#”編程器會對寫入Flash中的內容進行檢查是否與E2PROM內容一致,若是在LCD上顯示“OK”,否則顯示錯誤FLASH單元地址;若輸入“Auto#”編程器就順序執行擦除、檢查、寫和校驗操作并返回等待鍵盤輸入命令。
圖9 ?下位機脫機編程軟件流程圖
編程器的讀、寫、擦除等功能是由如下主要函數來實現。
#include“common.h”
voidInit_Read(void){…}//讀數據初始化
charReadByte(intaddr){…}//read數據
voidEraseByte(intaddr){…}//erase數據
voidCheckByte(intaddr){…}//檢查數據是否為空
voidVerifyByte(intaddr,intaddr1){…}//校驗數據
voidInit_Write(void){…}//寫數據初始化
voidWriteByte(intaddr,chardat){…}//write數據
charReadID(intaddr){。。。}//讀芯片ID
voidmain(void)
{charUART1_RX_Temp[10];
nRev_UART1=0;
nSend_TX1=0;
write_Flag=0;
dat_Flag=0;
dat_buf=0;
nDAT_BUF_Valid=0;
_DINT();//關閉中斷
Init_CLK();//初始化時鐘
Con_Port_Init();//初始化端口
CT_OE_Enable();
Init_UART1();//初始化串口1
_EINT();//打開中斷
ResetSM();
for(;;)//進入處理循環
{…//各種編程命令;讀鍵盤及LCD顯示等
}
5.結語
通過基于MSP430單片機的編程器設計原理和思路的研究,實現對89C51等系列芯片編程操作。實際測試,該編程器能夠快速、獨立進行芯片編程工作,大大提高燒錄芯片的速度,使其有更高的工作效率和較好的穩定性。
評論
查看更多