24LCxx系列的EEPROM读写的程序实例
读写24LCxx系列的EEPROM的实例程序
;********************************************************
;* *
;* ? PIC16F877A ?I2C Master 家Α????Α EEPROM ?dㄒ{Α *
;* *
;* Written by: Richard Yang *
;* Sr. Corporate Application Engineer *
;* Microchip Technology Inc. *
;* Date: Oct. 2nd '2002 *
;* Revision: 1.00 *
;********************************************************
;*************************************************
; This source code provides a demonstration of the MSSP peripheral
; on the PIC16F87x MCU.
;
;
;*********** The subroutines for EEPROM *****************
;
; EE_Random_Read ; EEPROM Random address Read from EEPROM
; EE_SEQU_Read ; EEPROM Sequential Read form EEPROM
; EE_Ack_Check ; Polling current status of EEPROM
; EE_Page_Write ; Page Write function for EEPROM
; EE_Byte_Write ; Write a byte to EEPROM with address setting
;
;*********** The subroutines for I2C *****************
;
; Init_I2C_Master ; Initial I2C Module for Master Mode , 7-bit address
; StartI2C ; Send a START Condition !!
; StopI2C ; Send s STOP Condition
; RstartI2C ; Send a Repeat Start conditional to I2C
; Non_Ack ; Send a Non-acknowledge signal to I2C
; An_Ack ; Send a acknowledge signal to I2C
; Sebd_Byte ; Send a byte to I2C bus
; RecI2C ; Enable Read a byte form slave device
; I2C_Done : Wait the I2C completed the currect process
;
;***************************************************
list p=16f877a
#i nclude p16f877a.inc>
;
;***************************************
; wq跑计?RAM???
;
CBLOCK 0x20
I2C_Ctrl
I2C_Addr
I2C_Data
I2C_Page_Length
D_Count
ENDC
cblock 0x40
I2C_Page_Buffer:8
I2C_SEQU_Buffer:8
endc
;
;***************************************
; wqい_?既?竟??
w_temp EQU 0x72
status_temp EQU 0x73
pclath_temp EQU 0x74
;
;***************************************
; wq I2C ???の}?
;
EEPROM_CMD equ 0xA0 ; Device adress of Slave Point
EE_Read equ .1
EE_Write equ .0
;
#define SCL PORTC,3 ; I2C SCL pin
#define SDA PORTC,4 ; I2C SDA pin
;
;********************************************
; Locates startup code @ the reset vector
;********************************************
Reset_Addr
org 0x00
nop
goto Main_Init
;
org 0x04
goto ISR
;
;*************************************************************
;**** The Start Address of ISR is 0x004
;**** PUSH POP ?ㄏノdㄒ : Aノ?钩 PIC16F877 ΤSHARE BANK ?PIC
;**************************************************************
ISR
Push movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,W
movwf pclath_temp
;
; Put your interrupt code here
;
Pop movf pclath_temp,W
movwf PCLATH
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
;
retfie ; return from interrupt
;----------------------------------------------------------------------
Main_Init
pagesel Init_I2C_Master ; Set PAGE to PCLATH Register
call Init_I2C_Master ; Init the MSSP for I2C Master
;
banksel I2C_Ctrl
movlw EEPROM_CMD ; Load EEPROM command address @ 0xA0
movwf I2C_Ctrl
;
;
Main
;
;----------------------------------------------------------------------
;
;* ???代刚{Α|?N?舱计?(0x40-0x47)g??RMA0x40-0x47??m
;* ?ノPage Write?よΑN8??じ舱?戈?g? EEPROM ?
;* i?A?盎代EEPROMO??ЧΘg??笆??程?N?g
;* ??戈??Sequential Read?よΑqEEPROM弄?ㄓ??I2C_SEQU_Bufferい
;
Test_Page_RW
movlw 0x08
movwf I2C_Page_Length
movlw I2C_Page_Buffer
_Fill_RAM movwf FSR
movwf INDF
incf FSR,W
decfsz I2C_Page_Length,F
goto _Fill_RAM
;
Test_Page_Write
; banksel I2C_Ctrl
movlw EEPROM_CMD ; Load EEPROM command address @ 0xA0
movwf I2C_Ctrl
movlw 0x10 ; Select EEPROM location at 0x00
movwf I2C_Addr
movlw .8
movwf I2C_Page_Length
call EE_Page_Write
;
call EE_Ack_Check
;
banksel I2C_Ctrl
movlw EEPROM_CMD ; Load EEPROM command address @ 0xA0
movwf I2C_Ctrl
movlw 0x10
movwf I2C_Addr
movlw .8
movwf I2C_Page_Length
call EE_SEQU_Read
;
goto $
;
;---------------------------------------------------------
;
;* ???代刚{Α|?g????じ舱?戈?g? EEPROM い
;* ?i?A?盎代O??ЧΘg??笆??程?N?g
;* ??戈??qEEPROM弄?ㄓ??I2C_Data既?竟い
;
Test_1byte_RW
程序 实例 读写 EEPROM 系列 24LCxx 相关文章:
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- Linux内核解读入门(11-09)
- Linux操作系统网络驱动程序编写(04-11)
- Linux系统对ISA总线DMA的实现(06-19)
- 基于MPEG-4的嵌入式多媒体监控系统中压缩/解压卡的设计与实现(10-15)
- Windows CE下驱动程序开发基础(04-10)