📄 spi.a51
字号:
;
; Copyright (c) 2004,成都港顺科技发展有限公司
; All rights reserved.
;
; 编 译 器:Keil:C Compiler:7.20;Assembler:7.10
; 工程名称:POS-Test.UV2
; 文件名称:M25P80SendRec.asm
; 摘 要:SPI总线驱动
;
; 单 片 机:uPSD3254
; 当前版本:0.4
; 作 者:雍继兵
; 完成日期:2004-12-7 14:45
;
ChipType EQU 6DFBH
DatLen EQU 6DFCH
Adrress EQU 6DFDH
RxdAdr EQU 6E00H
TxdAdr EQU 6F00H
P4 DATA 0C0H;
CLK BIT P4.4;时钟
SDI BIT P4.5;单片机输入
SDO BIT P4.6;单片机输出
DD SEGMENT CODE
PUBLIC _SpiSendChar ;从SPI总线上发送一个字节数据
RSEG DD
_SpiSendChar:
MOV R1,#8
MOV A,R7
CLR C
LOOPS:
CLR CLK
RLC A
MOV SDO,C
SETB CLK
DJNZ R1,LOOPS
RET
PUBLIC SpiReceiveChar ;从SPI总线上接收一个字节数据
RSEG DD
SpiReceiveChar:
MOV R1,#8
CLR C
LOOPR:
CLR CLK
MOV C,SDI
RLC A
SETB CLK
DJNZ R1,LOOPR
MOV R7,A
RET
;接收LEN个数据接收在SPI总线上
PUBLIC SpiReceiveData
RSEG DD
SpiReceiveData:
MOV R7,#0BH ;读命令//0bh
LCALL _SpiSendChar
MOV DPTR,#Adrress
MOVX A,@DPTR ;address_H
MOV R7,A
LCALL _SpiSendChar
INC DPTR
MOVX A,@DPTR
MOV R7,A
LCALL _SpiSendChar
INC DPTR
MOVX A,@DPTR
MOV R7,A
LCALL _SpiSendChar
MOV R7,#55H
LCALL _SpiSendChar
MOV DPTR,#DatLen
MOVX A,@DPTR
MOV R5,A;长度
MOV DPTR,#RxdAdr ;接收数据缓冲区开始地址
LOOPRE:
LCALL SpiReceiveChar
MOV A,R7
MOVX @DPTR,A
INC DPTR
DJNZ R5,LOOPRE
RET
;发送LEN个数据在SPI总线上
PUBLIC SpiSendData ;从SPI总线上发送len个数据
RSEG DD
SpiSendData:
MOV DPTR,#ChipType ;M45Pe80 is 0xAA and M25P80 is 0x55
MOVX A,@DPTR
CJNE A,#0AAH,M25P ;not eneu
MOV R7,#0AH ;eneu
LJMP Flash ;page program
M25P:
MOV R7,#02H ;写数据指令 page write
Flash:
LCALL _SpiSendChar
MOV DPTR,#Adrress ;地址1
MOVX A,@DPTR
MOV R7,A
LCALL _SpiSendChar
INC DPTR ;地址2
MOVX A,@DPTR
MOV R7,A
LCALL _SpiSendChar
INC DPTR ;地址3
MOVX A,@DPTR
MOV R7,A
LCALL _SpiSendChar
MOV DPTR,#DatLen ;数据长度高位
MOVX A,@DPTR
MOV R5,A ;数据长度低位
MOV DPTR,#TxdAdr ;发送开始地址
LOOP_S:
MOVX A,@DPTR
MOV R7,A
LCALL _SpiSendChar
INC DPTR
DJNZ R5,LOOP_S
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -