新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)內(nèi)部EEPROM讀寫子程序(轉(zhuǎn)貼)

PIC單片機(jī)內(nèi)部EEPROM讀寫子程序(轉(zhuǎn)貼)

作者: 時(shí)間:2011-02-18 來源:網(wǎng)絡(luò) 收藏

;實(shí)戰(zhàn)《內(nèi)部EEPROM讀寫實(shí)驗(yàn)》
;本實(shí)戰(zhàn)的目的是讓大家熟悉PIC16F87X內(nèi)部EEPROM的讀寫方法
;項(xiàng)目實(shí)現(xiàn)的功能:對(duì)于地址為00H-3FH的64個(gè)EEPROM數(shù)據(jù)存儲(chǔ)單元,
;分別將數(shù)據(jù)0-63依次燒寫進(jìn)去,然后再循環(huán)讀出,顯示在8只LED發(fā)光二極管上
;PIC學(xué)習(xí)網(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;定義讀啟動(dòng)控制位位地址
WREQU1;定義寫啟動(dòng)控制位位地址
WRENEQU2;定義寫使能控制位位地址
EEPGDEQU7;定義訪問目標(biāo)選擇控制位位址
FEQU1;定義目標(biāo)寄存器為RAM的指示符
WEQU0;定義目標(biāo)寄存器為W的指示符
ADDREQU70H;定義地址變量
DATA1EQU71H;定義數(shù)據(jù)變量
;*************************************
ORG0000H;
NOP;放置一條ICD必須的空操作指令
GOTOMAIN;
ORG0008H;
MAIN
BCFSTATUS,RP1;選體1為當(dāng)前體
BSFSTATUS,RP0;
MOVLW00H;設(shè)定RC全部為輸出
MOVWFTRISC;
BSFSTATUS,RP1;體3為當(dāng)前體
CLRFADDR;地址變量清0
CLRFDATA1;數(shù)據(jù)變量清0
WRITE
BSFSTATUS,RP1;選定體3
BTFSCEECON1,WR;上一次寫操作是否完成
GOTO$-1;否!返回繼續(xù)檢測(cè)
BCFSTATUS,RP0;選定體2
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
MOVFDATA1,W;取數(shù)據(jù)
MOVWFEEDATA;送數(shù)據(jù)寄存器
BSFSTATUS,RP0;選定體3
BCFEECON1,EEPGD;選定EEPROM為訪問對(duì)向
BSFEECON1,WREN;開放寫操作使能控制
MOVLW55H;
MOVWFEECON2;送55H到寄存器EECON2(讀寫內(nèi)部EEPROM,這句是固定的)
MOVLW0AAH;
MOVWFEECON2;送AAH到寄存器EECON2(讀寫內(nèi)部EEPROM,這句是固定的)
BSFEECON1,WR;啟動(dòng)寫操作
BCFEECON1,WREN;禁止寫操作發(fā)生
INCFDATA1,F;數(shù)據(jù)遞增
INCFADDR,F;地址遞增
MOVFADDR,W;
XORLWD’64’;將當(dāng)前地址與64比較
BTFSSSTATUS,Z;檢測(cè)=64否
GOTOWRITE;否!繼續(xù)寫后面單元
READ1
DECFADDR,F;地址遞減
BCFSTATUS,RP0;選體2為當(dāng)前體
BSFSTATUS,RP1;
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
BSFSTATUS,RP0;選體3為當(dāng)前體
BCFEECON1,EEPGD;選定EEPROM為訪問對(duì)象
BSFEECON1,RD;啟動(dòng)讀操作
BCFSTATUS,RP0;體2為當(dāng)前體
MOVFEEDATA,W;取數(shù)據(jù)
BCFSTATUS,RP1;體0為當(dāng)前體
MOVWFPORTC;送顯LED
CALLDELAY;調(diào)用廷時(shí)子程序
MOVFADDR,F;檢測(cè)當(dāng)前地址
BTFSSSTATUS,Z;是否為0?是!跳一步
GOTOREAD1;否!返回繼續(xù)讀出和顯示
READ2
INCFADDR,F;地址遞增
BCFSTATUS,RP0;選體2為當(dāng)前體
BSFSTATUS,RP1;
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
BSFSTATUS,RP0;選體3為當(dāng)前體
BCFEECON1,EEPGD;選定EEPROM為訪問對(duì)象
BSFEECON1,RD;啟動(dòng)讀操作
BCFSTATUS,RP0;體2為當(dāng)前體
MOVFEEDATA,W;取數(shù)據(jù)
BCFSTATUS,RP1;體0為當(dāng)前體
MOVWFPORTC;送顯LED
CALLDELAY;調(diào)用廷時(shí)子程序
MOVFADDR,W;檢測(cè)當(dāng)前地址與64比較
XORLWD’64’;
BTFSSSTATUS,Z;是否等于64
GOTOREAD2;否!返回繼續(xù)讀出和顯示
GOTOREAD1;返回大循環(huán)起點(diǎ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;遞減廷時(shí)程序
GOTO$-1;
DECFSZ72H,1;
GOTODELAY1;
RETURN
;********************************************
END
;*****************************************************

51單片機(jī)相關(guān)文章:51單片機(jī)教程


單片機(jī)相關(guān)文章:單片機(jī)教程


單片機(jī)相關(guān)文章:單片機(jī)視頻教程


單片機(jī)相關(guān)文章:單片機(jī)工作原理




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉