?? 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 33H ;定義數據常數值
CS EQU 0 ;片選引腳信號
SDI EQU 4 ;發送引腳信號
ORG 0H
nop
goto START
nop
nop
ORG 0004H
START
bcf STATUS,RP0
bsf STATUS,RP0
movlw 10H ;設置C口
movwf TRISC
movlw 00H
movwf FSR
xxx
bcf STATUS,RP0
movlw B'00100001' ;發送使能位
movwf SSPCON
call EWEN
movlw B'00000010' ;命令位“010”寫命令
movwf HIBYTE
movlw DATAVAL ;數據
movwf DATBYT
call WRITE
; goto $
call delay_20ms
WRNEXT
bcf STATUS,RP0
call EWEN
movlw B'00000010'
movwf HIBYTE
movlw 20h
movwf FSR
movlw 99h
movwf DATBYT
call WRITE
; call delay_20ms
; call WRITE
; call delay_20ms
; call WRITE
nop
nop
GOTO $
btfsc FSR,4
goto WRNEXT
;讀回數據
movlw 30H
movwf FSR
movlw 10H
movwf LOBYTE
movlw B'00000011' ;命令位“011”讀命令
movwf HIBYTE
RDNEXT
bcf STATUS,RP0
movlw B'00100001'
movwf SSPCON
call EWEN
nop
nop
nop
nop
; call delay_20ms
call READ
nop
btfsc FSR,4
goto RDNEXT
LIMBO
nop
goto LIMBO
;/*********************
;寫使能
;/**********************
EWEN
bcf STATUS,RP0
bcf PORTC,CS
movlw B'00000110'
call OUTPUT
nop
; call delay_20ms
bsf PORTC,CS
return
;/**********************
;讀狀態寄存器
;入口:無
;出口:讀出的狀態在STATUR中
;/**********************
RDSR
bcf STATUS,RP0
bcf PORTC,CS
movlw B'00000101'
call OUTPUT
bsf PORTC,CS
movf RXDATA,0
movwf STATUR
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
; call delay_20ms
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
bsf PORTC,CS
movf RXDATA,0
movwf INDF
incf FSR
incf LOBYTE
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
delay_20ms
banksel temp_1
movlw 0xff
movwf temp_1
movlw 0x7
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 + -