📄 510_spi_mt.dt
字号:
;****************************************************************;
; TILTE: EM78P510 SPI Transfer DEMO CODE ;
; FUNCTION: EM78P510 SPI Transfer as Master ;
; COMPANY: ELAN MICROELECTRONICS (SZ) LTD. ;
;****************************************************************;
; EM78P510 as MASTER,send 10 dates
; the send date: 0FH, F0H, 5AH, A5H, 5FH,F5H, AFH, FAH, 55H, AAH;
; Fmain: crystal, Fsub: crystal
;-----------------------------------------------------------------
TCC == 0x01 ; Time Clock/Counter
PC == 0x02 ; Program Counter & Stack
STATUS == 0x03 ;
C == 0 ; Carry flag
Z == 2 ; Zero flag
PORTA == 0x0A ; PortA I/O register
TWTCR == 0x0D ; TCC and WDT timer control register
RE == 0x0E ; Interrupt mask register
RF == 0x0F ; Interrupt status register
SPIF == 4 ; Interrupt flag of SPI
Data_Buf == 0x10 ; Data buffer
; Bank 2
SPIS == 0x0C ; SPI status register
SPIC == 0x0D ; SPI control register
SSE == 4 ; SPI shift enable bit
SPIR == 0x0E ; SPI read buffer
SPIW == 0x0F ; SPI write buffer
; Bank 4
PIOCRA == 0x0A ; PortA I/O control register
;-----------------------------------------------------------------
ORG 0x00
JMP Main
ORG 0X18 ; SPI interrupt vector
JMP SPI_INT ; To SPI interrupt program
ORG 0x20
;-----------------------------------------------------------------
SPI_INT:
; User code
; …
BC RF, SPIF
RETI
;-----------------------------------------------------------------
Main:
MOV A, @0x0F ; Disable WDT, TCC clock source is Fsub
MOV TWTCR, A ; Tcc 2s overflow
CLR TCC ; Clear TCC
CLR Data_Buf ; Clear data_buf
CLR PORTA ; Porta output logic "0"
MOV A, @0x01
MOV RE, A ; Enable TCC interrupt
Bank 4
MOV A, @0x10 ; Set PA4 (SI) as input pin
MOV PIOCRA, A ; SO,SCK output pin
Bank 2
MOV A, @00100000b ; Shift left, SDO delay time: 16clk,
MOV SPIS, A ; disable open-drain
MOV A, @01001100b ; Data shift out rising edge, is on hold during low
MOV SPIC, A ; Enable SPI mode, after data output sdo remain low
; Selecting SPI Baud Rate is Fosc/32
LOOP:
MOV A, Data_Buf ; To get data to transfer
CALL Data_Tbl
BANK 2
MOV SPIW, A ; Write data to buffer
BS SPIC, SSE ; Start to shift data
JBC SPIC, SSE ; Wait to finish shift data
JMP $-1
BANK 0
JBS RF, 0 ; Wait for 2s to shift next data
JMP $-1
CLR RF ; Clear TCC flag
INC Data_Buf
MOV A, @0x0A ; After shifting 10 bytes data, loop
SUB A, Data_Buf
JBC STATUS, C
CLR Data_Buf
JMP LOOP
;-----------------------------------
Data_Tbl:
ADD PC, A
RETL 0x0F ; 0
RETL 0xF0 ; 1
RETL 0x5A ; 2
RETL 0xA5 ; 3
RETL 0x5F ; 4
RETL 0xF5 ; 5
RETL 0xAF ; 6
RETL 0xFA ; 7
RETL 0x55 ; 8
RETL 0xAA ; 9
NOP
NOP
;-----------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -