?? spi.asm
字號:
#include Project.inc
#define AFECS PORTC,1 ; Chip select output
#define SCK PORTC,2 ; SPI Clock Output
#define SDIO PORTC,3 ; Serial output
udata
SPI.BufferH res 1
SPI.BufferL res 1
SPI_ovr udata_ovr
Count00 res 1
flag_ovr udata_ovr
flag res 1 ;using bit 0
global SPI.BufferH, SPI.BufferL
global SPI.Read, SPI.Write,SPI.Init
code
----------------------------------------------------
;SPI模塊初始化
---------------------------------------------------
SPI.Init
banksel TRISC
movlw b'11001110' ; Set LFDATA,ALERT, and CS as inputs
movwf TRISC ;
banksel PORTC
bsf AFECS ; Take AFE CS Line high
return
-----------------------------------------------------
;讀取SPI總線上的數(shù)據(jù),先得發(fā)送出數(shù)據(jù),然后才能讀取
-----------------------------------------------------
SPI.Read
banksel flag
bsf flag,0
goto SPI.ShiftOutBuffer
----------------------------------------------------
;向SPI總線上發(fā)送數(shù)據(jù)
----------------------------------------------------
SPI.Write
banksel flag
bcf flag,0
goto SPI.ShiftOutBuffer
-----------------------------
;從PIC16F639這一端向AFE通過SPI移出數(shù)據(jù):SPI.BufferH,SPI.BufferL.高位先被移出
;滿足時序如下:
; 1.SCLK/ALERT拉低
; 2.CS拉低
; 3.根據(jù)要移出的數(shù)值置位或清零SDIO
; 4.SCLK/ALERT拉高
; 5.SCLK/ALERT拉低
; 6.(3-5)循環(huán)16次
; 7.CS拉高
; flag.0
----------------------------------------------------------------------------------
SPI.ShiftOutBuffer
banksel TRISC
movf TRISC,w
andlw b'11110001'
movwf TRISC
movlw .16
banksel Count00
movwf Count00
banksel PORTC
bcf SCK
bcf AFECS
ShiftOutLoop
banksel SPI.BufferH
rlf SPI.BufferL,f
rlf SPI.BufferH,f
banksel PORTC
btfss STATUS,C
bcf SDIO
btfsc STATUS,C
bsf SDIO
bsf SCK
nop
nop
banksel Count00
decfsz Count00,f
goto ShiftOutLoop
banksel PORTC
bsf AFECS
bsf SCK
banksel flag
btfss flag,0
goto SPI.end
goto SPI.ShiftInBuffer
----------------------------------------------------------------------------------
;從PIC16F639的SPI線上移進(jìn)數(shù)據(jù):SPI.BufferH,SPI.BufferL.高位先被移進(jìn)
;滿足時序如下:
; 1.SCLK/ALERT拉低
; 2.CS拉低
; 3.根據(jù)要移出的數(shù)值置位或清零SDIO
; 4.SCLK/ALERT拉高
; 5.SCLK/ALERT拉低
; 6.(3-5)循環(huán)16次
; 7.CS拉高
; flag.0
----------------------------------------------------------------------------------
SPI.ShiftInBuffer
banksel PORTC
bcf SCK
bcf AFECS
banksel TRISC
bsf TRISC,.3 ;將SDIO設(shè)置位輸入
banksel Count00
movlw .16
movwf Count00
ShiftInLoop
banksel PORTC
bsf SCK
btfss SDIO
bcf STATUS,C
btfsc SDIO
bsf STATUS,C
bcf SCK
banksel SPI.BufferL
rlf SPI.BufferL,f
rlf SPI.Bufferh,f
banksel Count00
decfsz Count00,f
goto ShiftInLoop
banksel PORTC
bsf AFECS
bsf SCK
SPI.end
banksel TRISC
movf TRISC,w
iorlw b'00001110'
movwf TRISC
return
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -