📄 spi.asm
字号:
CLR SSCCS
MOV A,#RST
LCALL HOSTWR
SETB SSCCS
RET
;-----------------------------------------------
;HOST_WR_TH:
;-----------------------------------------------
HOST_WR_TH:
JB WR_SUCC,HOST_WR_TH01
RET
HOST_WR_TH01:
JB T_NEW_TH,HOST_WR_TH0
RET
HOST_WR_TH0:
CLR WR_BUS_SUCC
JB SINT,HOST_WR_TH1
RET
HOST_WR_TH1:
CLR SSCCS
MOV A,#WTH
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_TH10
SJMP HOST_WR_TH4
HOST_WR_TH10:
MOV A,#09H
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_TH11
SJMP HOST_WR_TH4
HOST_WR_TH11:
MOV A,CNTRL_FIELD
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_TH12
SJMP HOST_WR_TH4
HOST_WR_TH12:
MOV DATA_CNT,#04H
MOV R1,#D_DEV_ADR_LSB
HOST_WR_TH15:
MOV A,@R1
INC R1
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_TH13
SJMP HOST_WR_TH4
HOST_WR_TH13:
DJNZ DATA_CNT,HOST_WR_TH15
MOV DATA_CNT,#04H
MOV R1,#S_DEV_ADR_LSB
HOST_WR_TH03:
MOV A,@R1
INC R1
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_TH14
AJMP HOST_WR_TH4
HOST_WR_TH14:
DJNZ DATA_CNT,HOST_WR_TH03
CLR T_NEW_TH
HOST_WR_TH4:
SETB SSCCS
RET
;-----------------------------------------------
;HOST_WR_WR46:
;-----------------------------------------------
HOST_WR_WR46:
CLR WR_BUS_SUCC
JB SINT,HOST_WR_WR461
RET
HOST_WR_WR461:
CLR SSCCS
MOV A,#WR46
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_WR462
AJMP HOST_WR_WR464
HOST_WR_WR462:
MOV A,#01H ;LENGTH
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_WR463
AJMP HOST_WR_WR464
HOST_WR_WR463:
MOV A,#0CFH ;DLL_ACCESS_CONTROL=11001111
LCALL HOSTWR
HOST_WR_WR464:
SETB SSCCS
RET
;-----------------------------------------------
;CHECK_LS_EQU:
;-----------------------------------------------
CHECK_LS_EQU:
MOV DATA_CNT,#07H
MOV R1,#MODE_CNTRL
MOV R0,#R_TH_BUF
C_LS_EQU0:
MOV A,@R0
XRL A,@R1
INC R0
JZ C_LS_EQU1
RET
C_LS_EQU1:
INC R1
DJNZ DATA_CNT,C_LS_EQU0
RET
;-----------------------------------------------
;HOST_RD_LR:
;-----------------------------------------------
HOST_RD_LR:
CLR WR_BUS_SUCC
JB SINT,HOST_RD_LR1
RET
HOST_RD_LR1:
MOV R1,#R_TH_BUF
CLR SSCCS
MOV A,#LR
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_RD_LR2
AJMP HOST_RD_LR4
HOST_RD_LR2:
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_RD_LR21
AJMP HOST_RD_LR4
HOST_RD_LR21:
MOV RR_DATA_LENGTH,A
MOV DATA_CNT,#07H
HOST_RD_LR3:
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_RD_LR31
AJMP HOST_RD_LR4
HOST_RD_LR31:
MOV @R1,A
INC R1
DJNZ DATA_CNT,HOST_RD_LR3
AJMP HOST_RD_LR41
HOST_RD_LR4:
CLR WR_BUS_SUCC
HOST_RD_LR41:
SETB SSCCS
RET
;-----------------------------------------------
;HOST_READ_IR:
;-----------------------------------------------
HOST_READ_IR:
CLR WR_BUS_SUCC
JB SINT,HOST_RD_IR1
RET
HOST_RD_IR1:
MOV IR_REG,#00H
CLR SSCCS
MOV A,#IR
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_RD_IR10
AJMP HOST_RD_IR13
HOST_RD_IR10:
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_RD_IR11
AJMP HOST_RD_IR13
HOST_RD_IR11:
MOV RR_DATA_LENGTH,SPI_TMP
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_RD_IR12
AJMP HOST_RD_IR13
HOST_RD_IR12:
MOV IR_REG,SPI_TMP
HOST_RD_IR13:
SETB SSCCS
RET
;-----------------------------------------------
;HOST_RD_IS:
;-----------------------------------------------
HOST_RD_IS:
SETB PDLLST
LCALL HOST_RD_IR1
;HOST_RD_IS1:
ACALL RC_IS_TEST
ACALL TR_IS_TEST
JB INTER_ER,HOST_RD_IS2
RET
HOST_RD_IS2:
SETB RC_SUCC
RET
;-----------------------------------------------
;RC_IS_TEST:
;-----------------------------------------------
RC_IS_TEST:
JB RC_ATTN,RC_IS_TEST1
JB RC_EXCEPT,RC_IS_TEST0
RET
RC_IS_TEST0:
SETB RC_ERROR
RET
RC_IS_TEST1:
JB RC_EXCEPT,RC_IS_TEST2
SETB RC_SUCC
RET
RC_IS_TEST2:
SETB RC_ERROR
RET
;-----------------------------------------------
;TR_IS_TEST:
;-----------------------------------------------
TR_IS_TEST:
JB TR_ATTN,TR_IS_TEST1
RET
TR_IS_TEST1:
JB TR_EXCEPT,TR_IS_TEST2
SETB WR_SUCC
MOV RE_TX_CNT,#0FFH
RET
TR_IS_TEST2:
SETB WR_ERROR
RET
;-----------------------------------------------
;HOST_READ_RR4:
;-----------------------------------------------
HOST_READ_RR4:
JB RC_ERROR,HOST_READ_RR40
RET
HOST_READ_RR40:
JB SINT,HOST_READ_RR41
RET
HOST_READ_RR41:
CLR SSCCS
MOV A,#RR4
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_READ_RR42
SJMP HOST_READ_RR47
HOST_READ_RR42:
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_READ_RR43
SJMP HOST_READ_RR47
HOST_READ_RR43:
MOV RR_DATA_LENGTH,A
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_READ_RR44
SJMP HOST_READ_RR47
HOST_READ_RR44:
MOV RR4_REG,A
CLR RC_ERROR
JB RC_ADDR_DIFF,HOST_READ_RR46
AJMP HOST_READ_RR47
HOST_READ_RR46:
SETB RC_SUCC
SETB RC_H_SUCC
HOST_READ_RR47:
SETB SSCCS
RET
;-----------------------------------------------
;HOST_GET_DATA:
;-----------------------------------------------
HOST_GET_DATA:
JB RE_TR,HOST_GET_EXIT
JB WR_SUCC,HOST_GET_DATA0
RET
HOST_GET_DATA0:
JB EMP_TR,HOST_GET_DATA1
RET
HOST_GET_DATA1:
JB KEYPRESSED,HOST_GET_DATA3
RET
HOST_GET_DATA3:
CLR KEYPRESSED
LCALL PREST
MOV A,OUTTMP
INC A
MOV OUTTMP,A
CLR EMP_TR
;HOST_GET_DATA2:
SETB T_NEW_TH
MOV CNTRL_FIELD,#ADD_ACK_DATA
HOST_GET_EXIT:
RET
;-----------------------------------------------
;HOST_SEND_PKT:
;-----------------------------------------------
HOST_SEND_PKT:
JB RE_TR,HOST_SEND_PKT0
JB EMP_TR,HOST_SEND_PKT3
JB WR_SUCC,HOST_SEND_PKT0
RET
HOST_SEND_PKT0:
JB SINT,HOST_SEND_PKT1
RET
HOST_SEND_PKT1:
CLR SSCCS
MOV A,#WTI
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_SD_PKT10
SJMP HOST_SEND_PKT3
HOST_SD_PKT10:
MOV A,#10H
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_SD_PKT11
SJMP HOST_SEND_PKT3
HOST_SD_PKT11:
MOV DATA_CNT,#10H
MOV R1,#TRBUF
HOST_SEND_PKT2:
MOV A,@R1
INC R1
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_SD_PKT21
SJMP HOST_SEND_PKT3
HOST_SD_PKT21:
DJNZ DATA_CNT,HOST_SEND_PKT2
SETB EMP_TR
CLR WR_SUCC
CLR RE_TR
HOST_SEND_PKT3:
SETB SSCCS
RET
;------------------------------------------------------
; HOSTWR: THE SEND DATA IN "A"
;------------------------------------------------------
HOSTWR: SETB WR_BUS_SUCC
;MOV A,SPI_DATA
LCALL WT_SPI
MOV TIMER3,#04H
CLR T3
HOSTWRC:JB T3,HOSTWR1
JB PDLLST,HOSTWRC
MOV TIMER3,#00H
SETB PDLLST
RET
HOSTWR1:CLR WR_BUS_SUCC ;SET UNSUCCEESEFUL INDICATOR
RET
;---------------------------------------------------------
; HOSTRD: THE RECIEVED DATA IN "SPI_TMP, A "
;---------------------------------------------------------
HOSTRD: SETB PDLLST
SETB RD_BUS_SUCC
;MOV A,#00H
LCALL RD_SPI
MOV TIMER3,#02H
CLR T3
HOSTRDC:JB T3,HOSTRD1
JB PDLLST,HOSTRDC
MOV TIMER3,#00H
SETB PDLLST
RET
HOSTRD1:CLR RD_BUS_SUCC
RET
;------------------------------------------------------------
; WRITE TI VIRTUAL SPI PORT
; IN:THE DATA YOU WANT SEND TO INCLUDED IN "A"
;------------------------------------------------------------
WT_SPI: ;CLR EA
CLR TR0
CLR C
MOV SPI_CNT,#08H
MOV SPI_TMP,A
SPI_CO: MOV A,SPI_TMP
RLC A
MOV CO,C
MOV SPI_TMP,A
CLR CCLK
NOP
NOP
SETB CCLK
DJNZ SPI_CNT,SPI_CO
;SETB EA
SETB TR0
CLR CO
RET
;-------------------------------------------------------
; READ FORM VIRTUAL SPI PORT
; OUT:RECIEVED DATA INCLUDED IN "SPI_TMP"
;--------------------------------------------------------
RD_SPI: ;CLR EA
CLR TR0
MOV A,#00H
MOV SPI_CNT,#08H
SPI_CI: SETB CI_IND
CLR CCLK
NOP
NOP
NOP
NOP
SETB CCLK
MOV C,CI
;SPI_CI1:
MOV A,SPI_TMP
RLC A
MOV SPI_TMP,A
DJNZ SPI_CNT,SPI_CI
;SETB EA
SETB TR0
RET
;-----------------------------------------------
;PTRSUB:
;-----------------------------------------------
PTRSUB: MOV @R1,A
MOV A,@R1
INC R1
MOV @R1,A
RET
;----------------------------------------------------------
;EXTERNAL INTERRUPT0 SERVICE PROGRAM
;----------------------------------------------------------
EXTINT0:PUSH ACC
CLR PDLLST
POP ACC
RETI
;----------------------------------------------------------
;EXTERNAL INTERRUPT1 SERVICE PROGRAM
;----------------------------------------------------------
EXTINT1:;PUSH ACC
CLR CI_IND
;POP ACC
RETI
;----------------------------------------------------------
;TIMER0/COUNTER0 INTERRUPT
;----------------------------------------------------------
T0INT: CLR TR0 ;TURN OFF T0
PUSH ACC
;MOV A,B
;PUSH ACC
MOV TH0,#0EFH
MOV TL0,#069H
SETB T5MS
SETB KEYSCAN
MOV A,T5CNT
DEC A
MOV T5CNT,A
JNZ INTTM1
SETB T500MS
MOV T5CNT,#64H
INTTM1:MOV A,TIMER1
JNZ INTTM01
AJMP INTTM3
INTTM01:DEC A
MOV TIMER1,A
JNZ INTTM3
SETB T1
INTTM3:MOV A,TIMER3
JNZ INTTM03
AJMP INTTM4
INTTM03:DEC A
MOV TIMER3,A
JNZ INTTM4
SETB T3
INTTM4:DJNZ T1SCNT,INTTM2
MOV T1SCNT,#0C8H
SETB T1S
INTTM2:MOV A,TIMER2
JNZ INTTM02
SJMP RESTORE
INTTM02:DEC A
MOV TIMER2,A
JNZ RESTORE
SETB T2
RESTORE:POP ACC
;MOV B,A
;POP ACC
SETB TR0
RETI
;-------------------------------------------------
;KEY_SCANING:
;-------------------------------------------------
KEY_SCANING:
JB KEYSCAN,KEY_SCAN0 ;KEYSCAN IS SET EVERY 5MS
RET
KEY_SCAN0:
CLR KEYSCAN ;CLEAR KEYSCAN FLAG
JB KEY_PRESS,KEY_SCAN2 ;IF NO KEY IS PRESSED
;OR KEY IS RELEASED
;KEY_SCAN1: ;KEY IS PRESSED
INC DEBOUNCE_COUNT ;COUNT INC 1
AJMP KEY_SCAN_EXIT
KEY_SCAN2:
MOV A,DEBOUNCE_COUNT
JZ KEY_SCAN_EXIT ;NO ANY KEY EVER PRESSED
CLR C
SUBB A,#DEBOUNCE_VALUE
JNC KEY_SCAN4 ;IF A AVAILABLE KEY PRESSED
AJMP KEY_SCAN5
KEY_SCAN4:
SETB KEYPRESSED ;SET KEYPRESSED FLAG
KEY_SCAN5:
MOV DEBOUNCE_COUNT,#00H
KEY_SCAN_EXIT:
RET
;-------------------------------------------------------------
;LEDTSK:
; LED ON/TOGGLE
; ENTER:LEDONF INDICATE THE STAE OF LED
; IF PROGRAM IS IN ACTIVE STATE, TURN THE LED ON
;-------------------------------------------------------------
LEDTSK: JB T500MS,LEDTS2
RET
LEDTS2: CLR T500MS
;TOGLED:
JB LEDONF,OFFLED
;ONLED:
CLR LEDCS0
SETB LEDONF
RET
OFFLED: SETB LEDCS0
CLR LEDONF
RET
;--------------------------------------------------------------------
;LIGHT LCD ON
; ENTER:LCDBUF CONTAIN THE CONTENTS WANTED SHOW
; LCDADD CONTAIN THE ADDRESS THERE THE LCDBUF WANTED SHOW
;--------------------------------------------------------------------
LCDON: ;CLR LCDCS
MOV A,LCDBUF
LCALL WT_SPI
;SETB LCDCS
SETB LCDCS
NOP
NOP
CLR LCDCS
RET
;-----------------------------------------------
;DELAY 30MS
;-----------------------------------------------
DLY30MS:MOV TIMER1,#06H
CLR T1
DLY301: JB T1,DLY302
AJMP DLY301
DLY302: RET
;-------------------------------------------------
;DELAY 10MS
;-------------------------------------------------
DLY10MS:MOV TIMER1,#02H
CLR T1
DLY101: JB T1,DLY102
AJMP DLY101
DLY102: RET
;------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -