⑴ 51單片機怎麼使用內部EEPROM,上電次數、斷電記憶,怎麼實現計到最大值6千次。
STC 很多都有內部EEPROM,如11或12系列的STC單片機,讀寫內部EEPROM有一定限制,比如寫,必須先擦除再寫,而且一次必須擦除一個扇區,所以還是很麻煩的,只能覆蓋。
要實兆襪現你的功能,一點問題沒有,上電後先讀取上次的計數值,再加1重新寫進去就可以了。
以下是EEPROM讀寫子程序供參考:
;------------------------------------------------
;讀一位元組,調用前需打開 IAP 功能,入口:DPTR = 位元組地址,返回:A = 讀出位元組
IAP_READ:
MOV IAP_CONTR,#ENABLE_IAP ;打開 IAP 功能, 設置 Flash 操作等待時間
MOV IAP_CMD,#ISP_IAP_BYTE_READ ;設置為IAP/ISP/EEPROM位元組讀模式命令
MOV IAP_ADDRH,DPH ;設置目標單元地址的高8位地址
MOV IAP_ADDRL,DPL ;設置目標單元地址的低8位地址
;CLR EA
MOV IAP_TRIG,#5AH ;先送5Ah,再送A5h到ISP/IAP觸發寄存器,每次都需如此
MOV IAP_TRIG,#0A5H ;送完A5h後,ISP/IAP命令立即被觸發起動
NOP
MOV A,IAP_DATA ;讀出的數據在IAP_DATA單元中,送入累加器A
;SETB EA
LCALL IAP_Disable ;關閉 IAP 功能, 清相關的特殊功能寄存器,使CPU處於安全狀態,
;一次連續的IAP操作完成之後建議關閉IAP功能,不需要每次都關
RET
;------------------------------------------------
;位元組編程,散鬧調用前需打開 IAP 功能,入口:DPTR = 位元組地址, A=須編程位元組的數據
IAP_WRITE:
MOV IAP_CONTR,#ENABLE_IAP ;打開 IAP 功能, 設置 Flash 操作等待時間
MOV IAP_CMD,#ISP_IAP_BYTE_PROGRAM ;設置為IAP/ISP/EEPROM位元組編程模式命令
MOV IAP_ADDRH,DPH ;設置目標單元地址的高8位地址
MOV IAP_ADDRL,DPL ;設置目標單元地址的低8位地址
MOV IAP_DATA,A ;要編程的數據先送進ISP_DATA寄存器
;CLR EA
MOV IAP_TRIG,#5AH ;先送5Ah,再送A5h到ISP/IAP觸發寄存器,每次都需如此
MOV IAP_TRIG,#0A5H ;送完A5h後,ISP/IAP命令立即被觸發起動
NOP
;SETB EA
LCALL IAP_Disable ;關閉 IAP 功能, 清相關的特殊功能寄存器,使CPU處於安全狀態,
;一次連續的IAP操作完成之後建議關閉IAP功能,不需要每次都關
RET
;------------------------------------------------
;擦除扇區, 入口:DPTR = 扇區地址
IAP_Erase:
MOV IAP_CONTR,#ENABLE_IAP ;打開 IAP 功能, 設置 Flash 操作等待時間
MOV IAP_CMD,#03H ;設置為IAP/ISP/EEPROM扇區擦除模式命令
MOV IAP_ADDRH,DPH ;設置目標單元地址的高8位地址
MOV IAP_ADDRL,DPL ;設置目標單元地址的低8位地址
;CLR EA
MOV IAP_TRIG,#5AH ;先送5Ah,再送A5h到ISP/IAP觸發寄存器,每次都需如此
MOV IAP_TRIG,#0A5H ;送完A5h後,ISP/IAP命令立即被觸發起動
NOP
;SETB EA
LCALL IAP_Disable ;關閉 IAP 功能, 清相關的特殊功能寄存器,使CPU處於安全狀態,
;一族掘激次連續的IAP操作完成之後建議關閉IAP功能,不需要每次都關
RET
;------------------------------------------------
IAP_Disable:
;關閉 IAP 功能, 清相關的特殊功能寄存器,使CPU處於安全狀態,
;一次連續的IAP操作完成之後建議關閉IAP功能,不需要每次都關
MOV IAP_CONTR,#0 ;關閉 IAP 功能
MOV IAP_CMD,#0 ;清命令寄存器,使命令寄存器無命令,此句可不用
MOV IAP_TRIG,#0 ;清命令觸發寄存器,使命令觸發寄存器無觸發,此句可不用
MOV IAP_ADDRH,#0FFH ;送地址高位元組單元為00,指向非EEPROM區
MOV IAP_ADDRL,#0FFH ;送地址低位元組單元為00,防止誤操作
RET
⑵ 怎麼用c語言編程51單片機讀寫程序
編程代碼如下:
ORG 0000H
MOV DPTR,#1000H ;給源數據塊地址指針DPTR賦初值
MOV P2, #20H ;給目的數據塊地址指針P2和R0賦初值
MOV RO,#00H
LOOP: MOVX A, @DPTR .
MOVX @RO, A .
INC DPTR
INC RO
CJNE RO,#64H, LOOP
SJMP $
(2)51單片機讀寫實例擴展閱讀
MCS-51單片機主要由下列部件組成:1個8位CPU;1個片內振盪器及時鍾電路;4KB ROM程序存儲器,256BRAM;21個特殊功能寄存器。
2個1 6位定時/計數器;4個8位並行I/O口及1個可編程全雙工串列介面;可定址64KB的外部程序存儲器空間;可定址64KB的外部數據存儲器空間;5個中斷源、兩個優先順序中斷嵌套中斷結構。
MCS-51單片機內部有兩個16位可編程的定時/計數器,簡稱定時器0 (T0) 和定時器1 (T1) 。它們分別由方式寄存器TMOD、控制寄存器TCON和數據寄存器TH0、TLO, TH1、TL1組成。
低優先順序中斷源可被高優先順序中斷源所中斷,而高優先順序中斷源不能被任何中斷源所中斷;一種中斷源(不管是高優先順序還是低優先順序) 一旦得到響應,與它同級的中斷源不能再中斷它。當同時收到幾個同一優先順序的中斷時,響應哪一個中斷源取決於內部查詢順序。
⑶ 51單片機內部EEPROM使用求教
在使用51單片機時,如果你不確定使用的具體型號,可以查閱單片機的數據手冊,裡面會有詳細的操作時序介紹。針對STC15F4K系列單片機的EEPROM使用,以下是一個實例如何操作:
首先,進行初始化設置,比如配置引腳模式,開啟IAP功能等:
#include"reg51.h" #include"intrins.h" typedefunsignedcharBYTE; typedefunsignedintWORD; //...初始化寄存器
接著,定義一些宏和函數,用於控制IAP操作:
#defineCMD_IDLE0 #defineCMD_READ1 #defineCMD_PROGRAM2 #defineCMD_ERASE3 //...延時函數和IAP操作函數
在主函數中,首先初始化系統配置,然後進行扇區擦除、數據編程和校驗:
voidmain() { WORDi; P0M0=0x00; P0M1=0x00; P1M0=0x00; P1M1=0x00; P2M0=0x00; P2M1=0x00; P3M0=0x00; P3M1=0x00; P4M0=0x00; P4M1=0x00; P5M0=0x00; P5M1=0x00; P6M0=0x00; P6M1=0x00; P7M0=0x00; P7M1=0x00; P1=0xfe; InitUart(); Delay(10); IapEraseSector(IAP_ADDRESS); for(i=0;i<512;i++) { if(SendData(IapReadByte(IAP_ADDRESS+i))!=0xff) gotoError; } P1=0xf8; Delay(10); for(i=0;i<512;i++) { IapProgramByte(IAP_ADDRESS+i,(BYTE)i); } P1=0xf0; Delay(10); for(i=0;i<512;i++) { if(SendData(IapReadByte(IAP_ADDRESS+i))!=(BYTE)i) gotoError; } P1=0xf0; while(1); Error: P1&=0x7f; while(1); }
以上代碼展示了如何通過IAP介面對EEPROM進行擦除、編程和校驗操作。其中,Delay函數用於產生延時,IapIdle、IapReadByte、IapProgramByte和IapEraseSector函數分別用於關閉IAP功能、讀取EEPROM數據、寫入EEPROM數據和擦除EEPROM扇區。
初始化串口設置為8位可變波特率,並根據不同的URMD值選擇不同的波特率生成模式。
發送數據函數SendData則用於通過串口發送數據,並等待發送完成。
⑷ 怎樣讀51單片機內程序
ISP_CMD指令設定為0000 001,意味著啟動了從51單片機的flash區讀取用戶應用程序的過程。這一指令在編程中至關重要,因為它決定了如何安全、准確地讀取存儲在51單片機內部flash區和數據flash區的代碼與數據。在進行這一操作時,需要確保單片機與編程器之間有正確的連接,以便順利傳輸數據。
首先,需要確保單片機處於ISP(In-System Programming,即在線編程)模式。ISP模式允許用戶在不拆除晶元的情況下進行編程和調試。完成硬體連接後,通過發送ISP_CMD指令0000 001,啟動讀取程序。這一指令告訴單片機准備開始從flash區讀取數據。在讀取過程中,單片機會將數據從flash區傳輸到編程器,編程器再將數據傳輸到計算機,從而實現程序的讀取。
值得注意的是,在讀取過程中,程序代碼和數據會被逐一讀取。程序代碼通常存儲在應用程序flash區,而數據則存儲在數據flash區。確保從這兩個區域分別讀取數據,可以確保獲取完整的應用程序和數據。在讀取完成後,編程器將生成一個二進制文件,包含了從51單片機中讀取的所有程序代碼和數據。
此外,為了保證讀取過程的順利進行,還需要注意一些細節。例如,確保單片機的電源穩定,避免讀取過程中的數據丟失或損壞。同時,還需要確保編程器與單片機之間的連接穩定,以減少數據傳輸中的錯誤。
總之,通過設置ISP_CMD指令為0000 001,可以有效地讀取51單片機中的用戶應用程序和數據。這一過程需要仔細操作,確保連接正確,電源穩定,以及數據傳輸的准確性。