⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.asm

📁 RFID功能中阅读器源代码,实现汽车的无钥匙进入功能
💻 ASM
字号:
#include "Project.inc"

     udata
EEPROM_ByteCount    res 1  
EEPROM_ADDRESS		res 1
    global EEPROM_ByteCount,EEPROM_ADDRESS
	global EEPROM_Init,EEPROM_Write,EEPROM_WriteBytes,EEPROM_ReadBytes,EEPROM_Read
flag_ovr	  udata_ovr  ;此伪指令声明开始一段被覆盖的未初始化的数据,此段声明的空间被所有其他同名的 udata_ovr段覆盖。由于它允
                         ;许在同一个存储器单元中声明多个变量,因此这是一种声明临时变量的理想方法。此段不会生成代码。
                         ;应该使用 res 伪指令来为数据保留空间。
flag res 1		;using bit 1 of flag register
    code
-----------------------------------------------
;初始化
-----------------------------------------------
EEPROM.Init
    banksel EEDATA	
	clrf	EEDATA
	clrf	EEADR
	clrf	EECON1
	clrf	EECON2
	return
---------------------------------------------------------------------------------------------------------------------------------------
; input:
;      w:要写入EEPROM的数据
;      EEPROM_ADDRESS:写入EEPROM的地址
---------------------------------------------------------------------------------------------------------------------------------------
EEPROM_Write
    banksel EEDATA   
    movwf EEDATA ; 
    banksel EEADR
    movf EEPROM_ADDRESS,w  
    banksel EEADR
    movwf EEADR

EEWRITE2
	bsf		EECON1,WREN		; 允许写周期
	movlw	55H
	movwf	EECON2			; Write 55H
	movlw	0AAH
	movwf	EECON2			; Write AAH
	bsf		EECON1,WR		; 开始写周期

WR_WAIT
	CLRWDT
	btfsc	EECON1,WR		; Wait for write to complete
	goto	WR_WAIT
EEWRITE3 ;不使能写EEPROM
	bcf		EECON1,WREN			; 禁止写周期
	banksel	EEPROM_ADDRESS
	incf	EEPROM_ADDRESS,F	; Auto-increase Address Pointer
	banksel	flag
	btfss	flag,.1
	retlw	0H
	goto	Return_Write
----------------------------------------------------------------------------------------------------------------------------------
; input:
;       w:要写入的字节数
;       EEPROM_ADDRESS:要写入EEPROM的初始地址
;       FSR:要写入EEPROM的数据在RAM中存放的初始地址
; output:
;       flag.0=1表示成功
----------------------------------------------------------------------------------------------------------------------------------
EEPROM_WriteBytes
    banksel flag
    bsf flag,.1
    banksel EEPROM_ByteCount
    movwf EEPROM_ByteCount
EEPROM_WriteBytes_Loop
    bankisel PORTA
    movf INDF,w
    goto EEPROM_Write 
Return_Write  
    incf FSR,f  
    banksel EEPROM_ByteCount
    decfsz EEPROM_ByteCount,f
    goto EEPROM_WriteBytes_Loop
    banksel flag
    bcf flag,.1
    return
------------------------------------------------------------------------------------------------------------------------------------
; input:
;     EEPROM_ADDRESS:要读取EEPROM数据的地址
; output:
;     w:读出的数据    
--------------------------------------------------------------------------------------------------------------------------------
EEPROM_Read
    banksel EEPROM_ADDRESS
    movf EEPROM_ADDRESS,w
    banksel EEADR
    movwf EEADR

	bsf		EECON1,RD			; Command read
	movf	EEDATA,w			; Get data

	banksel	EEPROM_ADDRESS
	incf	EEPROM_ADDRESS,f	; Auto-increase Address Pointer
	banksel	flag
	btfss	flag,.1
	return						; Return without changing w-register
	goto	Return_Read
----------------------------------------------------------------------------------------------------------------------------------
; input:
;       w:要读出的字节数
;       EEPROM_ADDRESS:要读出值的初始地址
;       FSR:要读取EEPROM的数据在RAM中存放的初始地址
;output:
;       flag.0=0表示成功
----------------------------------------------------------------------------------------------------------------------------------
EEPROM_ReadBytes
    banksel flag
    bsf flag,.1
    banksel EEPROM_ByteCount
    movwf EEPROM_ByteCount
EEPROM_ReadBytes_Loop
    goto EEPROM_Read
Return_Read   
    bankisel PORTA
    movwf INDF
    incf FSR,f
    banksel EEPROM_ByteCount
    decfsz EEPROM_ByteCount,f
    goto EEPROM_ReadBytes_Loop
    banksel flag
    bcf flag,.1
    ;movf EEPROM_ByteCount,w
    ;subwf FSR,f
    return
      END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -