📄 lcd1921x.asm
字号:
NAME SPI
SPISCS EQU P1.5 ;new
SPISCK EQU P3.2
SPISID EQU P3.3
SPISOD EQU P3.1
WDTRST EQU 0A6H
EEPCE EQU P1^0; //X5045
EEPSI EQU P2^4; //X5045 A12
EEPSO EQU P2^5; //X5045 A13
EEPSCK EQU P2^6; //X5045 A14
?PR?SPIRecAChar?SPI SEGMENT CODE
?PR?_SPISendAChar?SPI SEGMENT CODE
?PR?_SPIWRITESD?SPI SEGMENT CODE
PUBLIC SPIRecAChar
PUBLIC _SPISendAChar
PUBLIC _SPIWRITESD
USING 0
;/**********************************************************************************************
;SPIRec:从SPI接口读取一个数据
;入口:无
;返回:接收的一字节数据
;**********************************************************************************************/
RSEG ?PR?SPIRecAChar?SPI
SPIRecAChar:
MOV R1,#0
MOV R2,#0
CLR A
MOV R0,#8
SPIREC0:
JB SPISCK,SPIREC2
DJNZ R1,SPIREC0
DJNZ R2,SPIREC0
SJMP SPIREC4
SPIREC2:
NOP
MOV C,SPISID
RLC A
SPIREC1:
JNB SPISCK,SPIREC3
DJNZ R1,SPIREC1
DJNZ R2,SPIREC1
SJMP SPIREC4
SPIREC3:
MOV R2,#00H
DJNZ R0,SPIREC0
MOV R7,A
RET
SPIREC4:CLR A ; 出错返回
MOV R7,A
RET
;/**********************************************************************************************
;SPISend:SPI口发送一字节数据
;input:R7
;return:1 send sussecc;0:fail
;**********************************************************************************************/
RSEG ?PR?_SPISendAChar?SPI
_SPISendAChar:
SETB SPISOD
MOV R1,#0
MOV R2,#0
MOV A,R7
MOV R0,#8
SPISen0:
JB SPISCK,SPISen2
DJNZ R1,SPISen0
DJNZ R2,SPISen0
SJMP SPISen4
SPISen2:
NOP
NOP
RLC A
JC SPISen1
CLR SPISOD
JMP SPISen5
SPISen1:
SETB SPISOD
SPISen5:
JNB SPISCK,SPISen3
DJNZ R1,SPISen5
DJNZ R2,SPISen5
SJMP SPISen4
SPISen3:
DJNZ R0,SPISen0
NOP
NOP
SETB SPISOD
SETB C
RET
SPISen4:CLR C ; 出错返回
SETB SPISOD
RET
;----------------------------------
; read 5045 state
;----------------------------------
READSTD:
CLR EEPCE
CLR EEPSCK
MOV A,#00000101B ; READ STATE REGISTER
LCALL WRITE
LCALL READ
CLR EEPSCK
SETB EEPCE
RET
;-----------------------------------
; FORM 5045 OUT DATA TO ACC
;-----------------------------------
READ: MOV R7,#08H
READ1: SETB EEPSCK
JMP $+2
CLR EEPSCK
JMP $+2
MOV C,EEPSO
RLC A
DJNZ R7,READ1
RET
;----------------------------------
WRITE: MOV R7,#08H
WRITE1: CLR EEPSCK
RLC A
MOV EEPSI,C
JMP $+2
SETB EEPSCK
JMP $+2
DJNZ R7,WRITE1
RET
;---------------------------------
; WRITE STATE FORM ACC
;---------------------------------
RSEG ?PR?_SPIWRITESD?SPI
_SPIWRITESD:
MOV ACC,R7
PUSH ACC
CLR EEPCE
CLR EEPSCK
MOV A,#00000110B ; ENABLE WRITE OPERATION
LCALL WRITE
SETB EEPCE
NOP
CLR EEPSCK
CLR EEPCE
MOV A,#00000001B ; WRITE STATE REGISTER
LCALL WRITE
POP ACC
LCALL WRITE
CLR EEPSCK
SETB EEPCE
WRITES1:LCALL READSTD
JB ACC.0,WRITES1
SETB EEPSI
SETB EEPSO
SETB EEPSCK
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -