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

📄 rwe2.asm

📁 对25AA040的EEPROM进行SPI读写
💻 ASM
字号:
	LIST    p=16F877A
            #include "P16F877A.INC" 
RXDATA	EQU	24H
TXDATA	EQU 25H
temp_1	EQU	26H
temp_2	EQU 27H
HIBYTE 	EQU 29H   ;命令高字节
LOBYTE 	EQU 2AH   ;命令低字节
DATBYT 	EQU 2BH   ;数据存储单元
STATUR 	EQU 40H
DATAVAL EQU 0C3H
CS EQU 0
SDI EQU 4

      ORG 0H
      NOP
	  goto START
	  NOP
	  NOP
	ORG 0004H
START 
	  BCF STATUS,RP0
      BSF STATUS,RP0
      MOVLW 10H
      MOVWF TRISC
      ;MOVLW B'00100001'
      ;MOVWF SSPCON

      MOVLW 10H
      MOVWF FSR
xxx
      BCF STATUS,RP0
      MOVLW B'00100001';
      MOVWF SSPCON     ;这两句的位置很重要
      CALL EWEN        ;********************

      MOVLW B'00000010'
      MOVWF HIBYTE

      MOVLW DATAVAL
      MOVWF DATBYT


WRNEXT 
	
	   CALL WRITE
       CALL BUSY_TEST

       ;CALL	delay_5ms
       BTFSC FSR,4
 
	   goto	xxx	

;读回数据
       MOVLW 30H
       MOVWF FSR
       MOVLW 10H
       MOVWF LOBYTE
       MOVLW B'00000011'
       MOVWF HIBYTE
RDNEXT 
	   ;BCF STATUS,RP0
       ;MOVLW B'00100001'      这3行可不要
       ;MOVWF SSPCON
       CALL EWEN;***********************不能漏
	   
	   CALL READ
       NOP
       BTFSC FSR,4
       GOTO RDNEXT
LIMBO NOP
      GOTO LIMBO
           
;/*********************
;写使能
;/**********************
EWEN BCF STATUS,RP0
     BCF PORTC,CS
     MOVLW B'00000110'
     CALL OUTPUT
     BSF PORTC,CS
     RETURN


;/**********************
;同时发送和接收一字节
;入口:待发送数据在W中
;出口:收到数据在RXDATA
;/***********************
OUTPUT MOVWF SSPBUF
LOOP1  BCF STATUS,RP1
       BSF STATUS,RP0
       BTFSS SSPSTAT,BF
       GOTO LOOP1
       BCF STATUS,RP0
       MOVF SSPBUF,0
       MOVWF RXDATA
       RETURN
;/**********************
;读状态寄存器
;入口:无
;出口:读出的状态在STATUR中
;/**********************
RDSR BCF STATUS,RP0
     BCF PORTC,CS
     MOVLW B'00000101' 
     CALL OUTPUT
     BSF PORTC,CS
     MOVF RXDATA,0
     MOVWF STATUR
     RETURN
 
BUSY_TEST
     BCF STATUS,RP0
     BCF PORTC,CS
     MOVLW B'00000101'
     CALL OUTPUT
     MOVLW B'00000000'
     CALL OUTPUT
     BSF PORTC,CS
     BTFSC RXDATA,0
     GOTO BUSY_TEST
     RETURN
     
;/***********************
;写一字节
;入口:"写命令码"在HIBYTE中,EEPROM地址指针在FSR中
;待写数据字节在DATBYT中
;出口:FSR指向下一地址
;/***********************
WRITE 
	  BCF STATUS,RP0
      BCF PORTC,CS
      MOVF HIBYTE,0
      CALL OUTPUT
      MOVF FSR,0
      CALL OUTPUT
      MOVF DATBYT,0
      CALL OUTPUT
      BSF PORTC,CS
      INCF FSR
      RETURN
;******************************************
;读一字节
;入口:读命令在HIBYTE,EEPROM地址在LOBYTE,
;单片机RAM地址在FSR
;出口:RAM单元放入一数据,LOBYTE加1,FSR加1
;******************************************

READ BCF STATUS,RP0
     BCF PORTC,CS
     ;/*BSF SSPCON,CKP
     MOVF HIBYTE,0
     CALL OUTPUT
     MOVF LOBYTE,0
     CALL OUTPUT 
    ; BCF SSPCON,CKP
     MOVLW 0
     CALL OUTPUT
     MOVF RXDATA,0
     MOVWF INDF
     INCF FSR
     INCF LOBYTE
     RETURN
delay_5ms
	banksel	temp_1
	movlw	0xff
	movwf	temp_1
	movlw	0x07
	movwf	temp_2

	decfsz	temp_1,f
	goto	$-1
	decfsz	temp_2,f
	goto	$-3
	return
	end




















 

⌨️ 快捷键说明

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