PIC單片機內(nèi)部EEPROM讀寫子程序(轉(zhuǎn)貼)
;實戰(zhàn)《內(nèi)部EEPROM讀寫實驗》
;本實戰(zhàn)的目的是讓大家熟悉PIC16F87X內(nèi)部EEPROM的讀寫方法
;項目實現(xiàn)的功能:對于地址為00H-3FH的64個EEPROM數(shù)據(jù)存儲單元,
;分別將數(shù)據(jù)0-63依次燒寫進去,然后再循環(huán)讀出,顯示在8只LED發(fā)光二極管上
;PIC單片機學(xué)習網(wǎng)陳學(xué)乾http://www.pic16.com
;程序文件名“MCD-EMP1.ASM”
;程序清單如下:
;************************************
STATUSEQU3H;定義狀態(tài)寄存器地址
RP0EQU5H;定義頁選位RP0的位地址
RP1EQU6H;定義頁選位RP1的位地址
ZEQU2H;定義0狀態(tài)位的位地址
PORTCEQU7H;定義RC口數(shù)據(jù)寄存器地址
TRISCEQU87H;定義RC口方向控制寄存器地址
EECON1EQU18CH;定義寫控制寄存器1的地址
EECON2EQU18DH;定義寫控制寄存器2的地址
EEDATAEQU10CH;定義讀/寫數(shù)據(jù)寄存器地址
EEADREQU10DH;定義讀/寫地址寄存器地址
RDEQU0;定義讀啟動控制位位地址
WREQU1;定義寫啟動控制位位地址
WRENEQU2;定義寫使能控制位位地址
EEPGDEQU7;定義訪問目標選擇控制位位址
FEQU1;定義目標寄存器為RAM的指示符
WEQU0;定義目標寄存器為W的指示符
ADDREQU70H;定義地址變量
DATA1EQU71H;定義數(shù)據(jù)變量
;*************************************
ORG0000H;
NOP;放置一條ICD必須的空操作指令
GOTOMAIN;
ORG0008H;
MAIN
BCFSTATUS,RP1;選體1為當前體
BSFSTATUS,RP0;
MOVLW00H;設(shè)定RC全部為輸出
MOVWFTRISC;
BSFSTATUS,RP1;體3為當前體
CLRFADDR;地址變量清0
CLRFDATA1;數(shù)據(jù)變量清0
WRITE
BSFSTATUS,RP1;選定體3
BTFSCEECON1,WR;上一次寫操作是否完成
GOTO$-1;否!返回繼續(xù)檢測
BCFSTATUS,RP0;選定體2
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
MOVFDATA1,W;取數(shù)據(jù)
MOVWFEEDATA;送數(shù)據(jù)寄存器
BSFSTATUS,RP0;選定體3
BCFEECON1,EEPGD;選定EEPROM為訪問對向
BSFEECON1,WREN;開放寫操作使能控制
MOVLW55H;
MOVWFEECON2;送55H到寄存器EECON2(讀寫內(nèi)部EEPROM,這句是固定的)
MOVLW0AAH;
MOVWFEECON2;送AAH到寄存器EECON2(讀寫內(nèi)部EEPROM,這句是固定的)
BSFEECON1,WR;啟動寫操作
BCFEECON1,WREN;禁止寫操作發(fā)生
INCFDATA1,F;數(shù)據(jù)遞增
INCFADDR,F;地址遞增
MOVFADDR,W;
XORLWD’64’;將當前地址與64比較
BTFSSSTATUS,Z;檢測=64否
GOTOWRITE;否!繼續(xù)寫后面單元
READ1
DECFADDR,F;地址遞減
BCFSTATUS,RP0;選體2為當前體
BSFSTATUS,RP1;
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
BSFSTATUS,RP0;選體3為當前體
BCFEECON1,EEPGD;選定EEPROM為訪問對象
BSFEECON1,RD;啟動讀操作
BCFSTATUS,RP0;體2為當前體
MOVFEEDATA,W;取數(shù)據(jù)
BCFSTATUS,RP1;體0為當前體
MOVWFPORTC;送顯LED
CALLDELAY;調(diào)用廷時子程序
MOVFADDR,F;檢測當前地址
BTFSSSTATUS,Z;是否為0?是!跳一步
GOTOREAD1;否!返回繼續(xù)讀出和顯示
READ2
INCFADDR,F;地址遞增
BCFSTATUS,RP0;選體2為當前體
BSFSTATUS,RP1;
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
BSFSTATUS,RP0;選體3為當前體
BCFEECON1,EEPGD;選定EEPROM為訪問對象
BSFEECON1,RD;啟動讀操作
BCFSTATUS,RP0;體2為當前體
MOVFEEDATA,W;取數(shù)據(jù)
BCFSTATUS,RP1;體0為當前體
MOVWFPORTC;送顯LED
CALLDELAY;調(diào)用廷時子程序
MOVFADDR,W;檢測當前地址與64比較
XORLWD’64’;
BTFSSSTATUS,Z;是否等于64
GOTOREAD2;否!返回繼續(xù)讀出和顯示
GOTOREAD1;返回大循環(huán)起點
;******************************************
DELAY
MOVLW0;
MOVWF72H;將外層循環(huán)參數(shù)值256送外層循環(huán)寄存器
DELAY1
MOVLW0;將內(nèi)層循環(huán)參數(shù)值256送內(nèi)層循環(huán)寄存器
MOVWF73H;
DECFSZ73H,1;遞減廷時程序
GOTO$-1;
DECFSZ72H,1;
GOTODELAY1;
RETURN
;********************************************
END
;*****************************************************
51單片機相關(guān)文章:51單片機教程
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
評論