




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
讀寫24LCxx系列的EEPROM的實(shí)例程序讀寫24LCxx系列的EEPROM的實(shí)例程序;********************************************************
;*
*
;*
?PIC16F877A?I2CMaster家Α???﹃?ΑEEPROM?絛ㄒ祘Α
*
;*
*
;*Writtenby:
RichardYang
*
;*
Sr.CorporateApplicationEngineer
*
;*
MicrochipTechnologyInc.
*
;*Date:
Oct.2nd'2002
*
;*Revision:1.00
*
;********************************************************
;*************************************************
;ThissourcecodeprovidesademonstrationoftheMSSPperipheral
;onthePIC16F87xMCU.
;
;
;***********
ThesubroutinesforEEPROM
*****************
;
;EE_Random_Read
;EEPROMRandomaddressReadfromEEPROM
;EE_SEQU_Read
;EEPROMSequentialReadformEEPROM
;EE_Ack_Check
;PollingcurrentstatusofEEPROM
;EE_Page_Write
;PageWritefunctionforEEPROM
;EE_Byte_Write
;WriteabytetoEEPROMwithaddresssetting
;
;***********
ThesubroutinesforI2C
*****************
;
;Init_I2C_Master
;InitialI2CModuleforMasterMode,7-bitaddress
;StartI2C
;SendaSTARTCondition!!
;StopI2C
;SendsSTOPCondition
;RstartI2C
;SendaRepeatStartconditionaltoI2C
;Non_Ack
;SendaNon-acknowledgesignaltoI2C
;An_Ack
;SendaacknowledgesignaltoI2C
;Sebd_Byte
;SendabytetoI2Cbus
;RecI2C
;EnableReadabyteformslavedevice
;I2C_Done
:WaittheI2Ccompletedthecurrectprocess
;
;***************************************************
listp=16f877a
#include;
;***************************************
;
﹚竡跑計(jì)?RAM???
;
CBLOCK0x20
I2C_Ctrl
I2C_Addr
I2C_Data
I2C_Page_Length
D_Count
ENDC
cblock0x40
I2C_Page_Buffer:8
I2C_SEQU_Buffer:8
endc
;
;***************************************
;
﹚竡い耞?既?竟??w_temp
EQU0x72
status_tempEQU0x73
pclath_tempEQU0x74
;
;***************************************
;
﹚竡I2C???の竲?
;
EEPROM_CMDequ0xA0
;DeviceadressofSlavePoint
EE_Read
equ.1
EE_Writeequ.0;
#define
SCLPORTC,3
;I2CSCLpin
#define
SDAPORTC,4
;I2CSDApin;;********************************************
;Locatesstartupcode@theresetvector
;********************************************
Reset_Addr
org
0x00
nop
gotoMain_Init
;
org
0x04
gotoISR
;
;*************************************************************
;****TheStartAddressofISRis0x004
;****"PUSH"&"POP"?ㄏノ絛ㄒ:続ノ?鉤PIC16F877ΤSHAREBANK?PIC
;**************************************************************
ISR
Push
movwf
w_temp
;saveoffcurrentWregistercontents
movfSTATUS,w
;movestatusregisterintoWregister
movwfstatus_temp
;saveoffcontentsofSTATUSregister
movfPCLATH,W
movwfpclath_temp
;
;
Putyourinterruptcodehere
;
Pop
movfpclath_temp,W
movwfPCLATH
movf
status_temp,w
;retrievecopyofSTATUSregister
movwfSTATUS
;restorepre-isrSTATUSregistercontents
swapf
w_temp,f
swapf
w_temp,w
;restorepre-isrWregistercontents
;
retfie
;returnfrominterrupt
;Main_Init
pageselInit_I2C_Master
;SetPAGEtoPCLATHRegister
call
Init_I2C_Master
;InittheMSSPforI2CMaster
;
bankselI2C_Ctrl
movlwEEPROM_CMD
;LoadEEPROMcommandaddress@0xA0
movwfI2C_Ctrl
;
;
Main
;
;
;
;*???代剛祘Α穦?盢?艙計(jì)?(0x40-0x47)糶??RMA0x40-0x47??竚
;*?ノPageWrite?よΑ盢8??じ艙?戈?糶?EEPROM?
;*秈︽?篈?盎代EEPROM琌??ЧΘ糶??笆??程?盢?糶
;*??戈??SequentialRead?よΑ眖EEPROM弄?ㄓ??I2C_SEQU_Bufferい
;Test_Page_RW
movlw0x08
movwfI2C_Page_Length
movlwI2C_Page_Buffer
_Fill_RAMmovwfFSR
movwfINDF
incfFSR,W
decfszI2C_Page_Length,F
goto_Fill_RAM
;
Test_Page_Write
;
bankselI2C_Ctrl
movlwEEPROM_CMD
;LoadEEPROMcommandaddress@0xA0
movwfI2C_Ctrl
movlw0x10
;SelectEEPROMlocationat0x00
movwfI2C_Addr
movlw.8
movwfI2C_Page_Length
callEE_Page_Write
;
callEE_Ack_Check
;
bankselI2C_Ctrl
movlwEEPROM_CMD
;LoadEEPROMcommandaddress@0xA0
movwfI2C_Ctrl
movlw0x10
movwfI2C_Addr
movlw.8
movwfI2C_Page_Length
callEE_SEQU_Read
;
goto$
;
;
;
;*???代剛祘Α穦?糶????じ艙?戈?糶?EEPROMい
;*?秈︽?篈?盎代琌??ЧΘ糶??笆??程?盢?糶
;*??戈??眖EEPROM弄?ㄓ??I2C_Data既?竟い
;
Test_1byte_RW
bankselI2C_Ctrl
movlwEEPROM_CMD
;LoadEEPROMcommandaddress@0xA0
movwfI2C_Ctrl
movlw0x00
;SelectEEPROMlocationat0x00
movwfI2C_Addr
movlw0xAA
;Writedata0x5Atolocation0x00ofEEPROM
movwfI2C_Data
callEE_Byte_Write
;
Test2
callEE_Ack_Check
;PollingAcknowledgefornextaccess
;
bankselI2C_Data
movlw0x00
;ClearI2Cdatabuffer
movwfI2C_Data
;
Test3
bankselI2C_Ctrl
movlwEEPROM_CMD
;LoadEEPROMcommandaddress@0xA0
movwfI2C_Ctrl
movlw0x00
movwfI2C_Addr
callEE_Random_Read
;
goto
$
;;
;******************************************************
;*
RandomReadaBytefromEEPROM
;*
;*Input:
;*
-I2C_Ctrl:ControlByteofEEPROM
;*
-I2C_Addr:LocationofEEPROM
;*Output:
;*
-I2C_Data:ReadDatafromEEPROM
;******************************************************
;
;SendCommandforRANDOMREAD:
;"Start+0xA0+EE_Address+ReStart+0xA1+Read_Data+NAck+Stop"
;EE_Random_Read
callStartI2C
;SetSSPCON2.SEN
;
bcf
I2C_Ctrl,0
;setforwriteCommand
movfI2C_Ctrl,W
;SendSlaveAddresstoI2CBus
callSend_Byte
;
movfI2C_Addr,W
;SendouttheRendomaddressofEEPROM
callSend_Byte
;
callRstartI2C
;SendaRepeatStarttoI2C
;
bsf
I2C_Ctrl,0
;setforReadCommand
movfI2C_Ctrl,W
;SendSlaveAddresstoI2CBus
callSend_Byte
;
callRecI2C
;EnableI2CReceive
;
BANKSELSSPBUF
movfSSPBUF,W;SavetoI2C_DataFirst!!
movwfI2C_Data
callNon_Ack
;InitialNACKResponse!!
callStopI2C
;InitialSTOPCondition
return
;
;***************************************************************
;*
SequentialReadfromEEPROM
;*
;*Input:
;*
-I2C_Ctrl:ControlByteofEEPROM
;*
-I2C_Addr:StartLocationofEEPROM
;*
-I2C_Page_Length:Howmanybyteneedtoread
;*Output:
;*
-I2C_SEQU_Buffer:SequentialReadDatabuffer
;*
;***************************************************************
;
;SendCommandforRANDOMREAD:
;"Start+0xA0+EE_Address+ReStart+0xA1+Read_Data+NAck+Stop"
;
EE_SEQU_Read
callStartI2C
;SetSSPCON2.SEN
;
bcf
I2C_Ctrl,0
;setforwriteCommand
movfI2C_Ctrl,W
;SendSlaveAddresstoI2CBus
callSend_Byte
;
movfI2C_Addr,W
;SendouttheRendomaddressofEEPROM
callSend_Byte
;
callRstartI2C
;SendaRepeatStarttoI2C
;
bsf
I2C_Ctrl,0
;setforReadCommand
movfI2C_Ctrl,W
;SendSlaveAddresstoI2CBus
callSend_Byte
;
movlwI2C_SEQU_Buffer
movwfFSR
;
_Sequ_LoopcallRecI2C
;EnableI2CReceive
BANKSELSSPBUF
movfSSPBUF,W
;SavetoI2C_DataFirst!!
movwfINDF
incfFSR,F
decfszI2C_Page_Length,F
goto_Cont_Read
goto_End_Read
_Cont_ReadcallAn_Ack
goto_Sequ_Loop
;
_End_ReadcallNon_Ack
;InitialNACKResponse!!
callStopI2C
;InitialSTOPCondition
return
;
;******************************************************
;*
EEPROMAcknowledgePolling
;*
;*
--
TheroutinewillpollingtheACK
;*
responsefromEEPROM
;*
--
ACK=0return
;*
--
ACK=1sendRestart&loopcheck
;*
;******************************************************
;
EE_Ack_Check
callStartI2C
;SetSSPCON2.SEN
bcf
I2C_Ctrl,0
;ClearforWriteCommand
movfI2C_Ctrl,W
;SendSlaveAddresstoI2CBus
callSend_Byte
_Ack_Polling
BANKSELSSPCON2
btfssSSPCON2,ACKSTAT;CheckACKSTATbit,0=ACK,1=NACK
gotoACK_Return
;Ack=0;EEPROMisReady
_Ack_Hi
;Ack=1;EEPROMisBusyforWrite
callDelay_mS
;Delay500uSfornextAckpolling
callRstartI2C
;SendaRepeatStarttoI2C
bcf
I2C_Ctrl,0
;ClearforWriteCommand
movfI2C_Ctrl,W
;SendSlaveAddresstoI2CBus
callSend_Byte
goto_Ack_Polling
ACK_Return
callStopI2C
;InitialSTOPCondition
return
;
;**********************************************************
;*
PageWrite1to8BytestoEEPROM
;*
;*
Input:
;*
-I2C_Ctrl:ControlByteofEEPROM
;*
-I2C_Addr:LocationofEEPROM
;*
-I2C_Page_Buffer:RAMlocationofData
;*
-I2C_Page_Length:Datalengthcount
;*
;**********************************************************
;
;SendCommandforPAGEWRITE:
;"Start+0xA0+EE_Address+W_Data0+..+W_DataN+Stop"
;
EE_Page_Write
movfI2C_Page_Length,W
btfscSTATUS,Z
return
;
callStartI2C
;SetSSPCON2.SEN
;
bcf
I2C_Ctrl,0
;ClearforWriteCommand
movfI2C_Ctrl,W
;SendSlaveAddresstoI2CBus
callSend_Byte
;
movfI2C_Addr,W
;SendouttheCommand
callSend_Byte
;
movlwI2C_Page_Buffer
movwfFSR
_W1
movfINDF,W
callSend_Byte
incfFSR,F
decfszI2C_Page_Length,F
goto_W1
;
callStopI2C
;InitialSTOPCondition
return
;
;
;*******************************************************
;*
WriteaBytetoEEPROM
;*
;*Input:
;*
-I2C_Ctrl:ControlByteofEEPROM
;*
-I2C_Addr:LocationofEEPROM
;*
-I2C_Data:DatatoEEPROM
;*
;*******************************************************
;
;SendCommandforBYTEWRITE:
;"Start+0xA0+EE_Address+Write_Data+Stop"
;
EE_Byte_Write
callStartI2C
;SetSSPCON2.SEN
;
bcf
I2C_Ctrl,0
;ClearforWriteCommand
movfI2C_Ctrl,W
;SendSlaveAddresstoI2CBus
callSend_Byte
;
movfI2C_Addr,W
;SendouttheCommand
callSend_Byte
;
movfI2C_Data,W
;SendouttheData
callSend_Byte
;
callStopI2C
;InitialSTOPCondition
return
;
;**********************************************************************
;
;
AsfollowingsubroutinesperformcommonlyusedI2Cfunctions.
;
YoucanusethesesubroutinesforyourI2Caccess
;
;**********************************************************************
;
;***InitialI2Cmodulefot7-bitI2CMasterModewith100Kcps@4MHz
;
Init_I2C_Master
BANKSELTRISC
;InitialPortC,bit3&4asInput
bsf
SCL
;RC3=SCL
,
RC4=SDA
bsf
SDA
;
BANKSELPORTC
bsf
SCL
;SCL=Hi
bsf
SDA
;SDA=Hi
;
movlwb'00101000'
;I2CMasterMode,ClockRate:FOSC/(4*SSPADD+1)
movwfSSPCON
;
;
bankselSSPADD
movlw
.9
;Thisgives100KHzI2Cclock@4MHz
movwf
SSPADD
;(4MHz/4)/(9+1)=100KHz
;
movlw
b'10000000'
;Disableslewratecontrol,
movwf
SSPSTAT
;andclearstatusbits
;
movlw
b'00000000'
;SetSCL,SDAintoReadystatus
movwf
SSPCON2
;
return
;
;******
SendSTARTconditiontobus
*******
;
StartI2C
;InitiatetheI2CSTARTcondition.
bankselSSPCON2
bsf
SSPCON2,SEN
gotoI2C_Done
;
;******
SendSTOPconditiontobus
*******
;
StopI2C
bankselSSPCON2
bsf
SSPCON2,PEN
gotoI2C_Done
;
;******
SendRESTARTconditiontobus
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中地理野外實(shí)踐課程設(shè)計(jì)與應(yīng)用論文
- 2024年度河南省二級造價(jià)工程師之建設(shè)工程造價(jià)管理基礎(chǔ)知識真題練習(xí)試卷B卷附答案
- 小學(xué)環(huán)保教育實(shí)驗(yàn):廚余堆肥蚯蚓糞對小白菜生長實(shí)驗(yàn)觀察報(bào)告論文
- 中國醫(yī)藥行業(yè)用黃原膠行業(yè)市場前景預(yù)測及投資價(jià)值評估分析報(bào)告
- 節(jié)假日裝修管理制度
- 苯乙烯儲存管理制度
- 茶藝坊安全管理制度
- 調(diào)試組1019題庫題庫(500道)
- 一年級《古對今》課件
- 財(cái)務(wù)預(yù)算練習(xí)題及參考答案
- 醫(yī)藥招商電話技巧
- 一例梅毒患者的護(hù)理查房課件
- 非財(cái)務(wù)人員看報(bào)表課件
- 讀書分享讀書交流會《人生海海》
- 學(xué)校食堂食材配送服務(wù)方案(肉類、糧油米面、蔬菜水果類)
- 信用修復(fù)申請書
- 糖尿病周圍血管病變課件
- (完整版)政府工程項(xiàng)目代建管理方案(范本)
- 2023年江蘇省蘇州大學(xué)醫(yī)學(xué)部藥學(xué)院統(tǒng)招博士后招收(共500題含答案解析)高頻考點(diǎn)題庫參考模擬練習(xí)試卷
- 2023年全國高考語文乙卷作文“一花獨(dú)放不是春百花齊放春滿園”寫作
- 《國家中藥飲片炮制規(guī)范》全文
評論
0/150
提交評論