?? rwe2.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 + -