AT89C52單片機內部有8k字節的Flash PEROM,這個Flash存儲陣列出廠時已處於擦除狀態(即所有存儲單元的內容
均為FFH),用戶隨時可對其進行編程。編程接口可接收高電壓(+12V)或低電壓(Vcc)的允許編程信號。低電壓編程模
式適合於用戶在線編程系統,而高電壓編程模式可與通用EPROM編程器兼容。
AT89C52單片機中,有些屬於低電壓編程方式,而有些則是高電壓編程方式,用戶可從芯片上的型號和讀取芯片內的
簽名字節獲得該信息。
AT89C52 的程序存儲器陣列是采用字節寫入方式編程的,每次寫入壹個字節,要對整個芯片內的PEROM 程序存儲器
寫入壹個非空字節,必須使用片擦除的方式將整個存儲器的內容清除。 編程前,須按表9 和圖11 所示設置好地址、數據及控制信號, AT89C52 編程方法如下:
1. 在地址線上加上要編程單元的地址信號。
2. 在數據線上加上要寫入的數據字節。
3. 激活相應的控制信號。
4. 在高電壓編程方式時,將EA/Vpp 端加上+12V 編程電壓。
5. 每對Flash 存儲陣列寫入壹個字節或每寫入壹個程序加密位,加上壹個ALE/PROG編程脈沖。每個字節寫入周期
是自身定時的,通常約為1.5ms。重復1—5 步驟,改變編程單元的地址和寫入的數據,直到全部文件編程結束。 AT89C52 有3 個程序加密位,可對芯片上的3 個加密位LB1、LB2、LB3 進行編程(P)或不編程(U)來得到。
當加密位LB1 被編程時,在復位期間,EA 端的邏輯電平被采樣並鎖存,如果單片機上電後壹直沒有復位,則鎖存起的
初始值是壹個隨機數,且這個隨機數會壹直保存到真正復位為止。為使單片機能正常工作,被鎖存的EA 電平值必須與該引
腳當前的邏輯電平壹致。此外,加密位只能通過整片擦除的方法清除。 AT89C52單片機用Data Palling 表示壹個寫周期結束為特征,在壹個寫周期中,如需讀取最後寫入的壹個字節,則讀出的數據的最高位(P0.7)是原來寫入字節最高位的反碼。寫周期完成後,所輸出的數據是有效的數據,即可進入下壹個字節的寫周期,寫周期開始後,Data Palling 可能隨時有效。
Ready/Busy:字節編程的進度可通過“RDY/BSY 輸出信號監測,編程期間,ALE 變為高電平“H”後,P3.4(RDY/BSY)端電平被拉低,表示正在編程狀態(忙狀態)。編程完成後,P3.4 變為高電平表示準備就緒狀態。
程序校驗:如果加密位LB1、LB2 沒有進行編程,則代碼數據可通過地址和數據線讀回原編寫的數據,采用如圖12的電路。加密位不可直接校驗,加密位的校驗可通過對存儲器的校驗和寫入狀態來驗證。
芯片擦除:利用控制信號的正確組合(表6)並保持ALE/PROG引腳10mS 的低電平脈沖寬度即可將PEROM 陣列(4k字節)和三個加密位整片擦除,代碼陣列在片擦除操作中將任何非空單元寫入“1”,這步驟需再編程之前進行。
讀片內簽名字節:AT89C52單片機內有3 個簽名字節,地址為030H、031H 和032H。用於聲明該器件的廠商、型號和編程電壓。讀AT89C52 簽名字節需將P3.6 和P3.7 置邏輯低電平,讀簽名字節的過程和單元030H、031H 及032H 的正常校驗相仿,只返回值意義如下:
(030H)=1EH 聲明產品由ATMEL公司制造。
(031H)=52H 聲明為AT89C52 單片機。
(032H)=FFH 聲明為12V 編程電壓。
(032H)=05H 聲明為5V 編程電壓。