📄 spi.asm
字号:
;*********************** SPI.ASM V1.1 ****************************
; INCLUDE 'POWER MODEM' RECIEVE AND TRANSLATE (1:1)
; Program by WAYNE of SUNRISE Technology Limited
; 89C52
; *********** Osc. freq = 11.0592MHz *************;--------------------------------------------------------------
;PIN DESCRIPTION
;--------------------------------------------------------------
CO EQU P1.0
CCLK EQU P1.1 ;NORMAL "1"
CI EQU P1.2 ;NORMAL "1"
SINT EQU P1.4 ;normal "1"
LCDCS EQU P1.7
SSCCS EQU P2.6 ;normal "1"
SSCRST EQU P2.7 ;normal "1"
KEY_PRESS EQU P3.7 ;NORMAL "1"
LEDCS0 EQU P3.6 ;NORMAL "1"
;--------------------------------------------------------------
;REGISTER DESCRIPTION
;--------------------------------------------------------------
;X EQU R0
;BC EQU R1
SPI_CNT EQU R5
HEAD_CNT EQU R6
DATA_CNT EQU R7
TIMER1 EQU 08H
TIMER2 EQU 09H
TIMER3 EQU 0AH
T5CNT EQU 0BH
T1SCNT EQU 0CH
SPI_DATA EQU 0DH
SPI_TMP EQU 0FH
RE_TX_CNT EQU 10H
MODE_CNTRL EQU 11H
;TR_DATA_LENGTH EQU 12H
;RE_TC_CNT EQU 13H
GRP_ADR_LSB EQU 12H
GRP_ADR_MSB EQU 13H
S_DEV_ADR_LSB EQU 14H
S_DEV_ADR_MSB EQU 15H
S_SYS_ADR_LSB EQU 16H
S_SYS_ADR_MSB EQU 17H
D_DEV_ADR_LSB EQU 18H
D_DEV_ADR_MSB EQU 19H
D_SYS_ADR_LSB EQU 1AH
D_SYS_ADR_MSB EQU 1BH
RTRBUF EQU 1CH ;TRBUF READ POINTER
;WTRBUF EQU 1DH ;TRBUF WRITE POINTER
RRCBUF EQU 1EH ;RCBUF READ POINTER
WRCBUF EQU 1FH ;RCBUF WRITE POINTER
TMFLAG EQU 20H
T5MS EQU TMFLAG.0
T500MS EQU TMFLAG.1
T1S EQU TMFLAG.2
T1 EQU TMFLAG.3
T2 EQU TMFLAG.4
T3 EQU TMFLAG.5
CI_IND EQU TMFLAG.6
PHYSTATE EQU 21H
PDLLST EQU PHYSTATE.0
RC_ERROR EQU PHYSTATE.1
RC_SUCC EQU PHYSTATE.2
WR_SUCC EQU PHYSTATE.3
WR_ERROR EQU PHYSTATE.4
WR_BUS_SUCC EQU PHYSTATE.5
RD_BUS_SUCC EQU PHYSTATE.6
RC_H_SUCC EQU PHYSTATE.7
USRFG2 EQU 22H
R_NEW_TH EQU USRFG2.0
T_NEW_TH EQU USRFG2.1
RE_TR EQU USRFG2.2
;RESET_ALL EQU USRFG2.3
RR4_REG EQU 23H
;RC_REFUSED EQU RR4_REG.0
;RC_OVERRUN EQU RR4_REG.1
RC_ADDR_DIFF EQU RR4_REG.2
IR_REG EQU 24H
RESET EQU IR_REG.0
;LINK_STATE EQU IR_REG.1
INTER_ER EQU IR_REG.2
;PHY_FAIL EQU IR_REG.3
RC_EXCEPT EQU IR_REG.4
TR_EXCEPT EQU IR_REG.5
TR_ATTN EQU IR_REG.6
RC_ATTN EQU IR_REG.7
CW_REG EQU 25H ;CONTROL WRITE REGISTER
;LINK_ENABLE EQU CW_REG.0
;ABORT_TRAN EQU CW_REG.2
;HOST_BUSY EQU CW_REG.3
;PATH_SELECT EQU CW_REG.7
USRFG1 EQU 26H
EMP_RC EQU USRFG1.0 ;RCBUF EMPTY FLAG
EMP_TR EQU USRFG1.1 ;TRBUF EMPTY FLAG
LEDONF EQU USRFG1.2
;END_TR_UART EQU USRFG1.3
KEYSCAN EQU USRFG1.4
KEYPRESSED EQU USRFG1.5
DEBOUNCE_COUNT EQU 30H
RR_DATA_LENGTH EQU 31H
;TMPBUF EQU 32H
;SR_REG EQU 33H
TRBUF EQU 34H ;OUT START ADDR
;INCLUDE 16 BYTE
RCBUF EQU 46H ;IN START ADDR
;INCLUDE 16 BYTE
LSTTMP EQU 59H
CNTRL_FIELD EQU 5AH
LCDBUF EQU 5BH
;LCDADD EQU 5CH
OUTTMP EQU 5DH
R_TH_BUF EQU 60H
;INCLUDE 7 BYTE
;--------------------------------------------------
;CONST DESCRIPTION
;--------------------------------------------------
LED_DATA EQU 00H
TIME_MODE EQU 11H
DEBOUNCE_VALUE EQU 03H
;---------------------------------------------------
;COMMANDS TO PM2300
;---------------------------------------------------
;FIE EQU 00H ;FORCE INTERFACE ERROR
RST EQU 01H ;RESET
LR EQU 02H ;LAYER MANAGEMENT READ
LW EQU 03H ;LAYER MANAGEMENT WRITE
IR EQU 04H ;INTERFACE_FLAG READ
CW EQU 05H ;COMMAND WRITE
;SR EQU 06H ;STATUS READ
;---------------07H
;PR EQU 08H ;PACKET RECIEVE
;PT EQU 09H ;PACKET TRANSMIT
RRI EQU 0AH ;READ RECIEVE INFORMATION
WTI EQU 0BH ;WRITE TRANSMIT INBOKE
RRH EQU 0CH ;READ RECIEVE HEADER
WTH EQU 0DH ;WRITE TRANSMIT HEADER
;---------0EH---045H
WR46 EQU 46H ;WRITE REGISTER 46
;---------47H---83H
RR4 EQU 84H ;READ REGISTER 4
;---------85H---0FFH
;IACK EQU 00H
;ACK_DATA EQU 01H
UNACK_DATA EQU 02H
;RESERVED EQU 03H
;FAILURE EQU 04H
ADD_ACK_DATA EQU 05H
;ADDR_IACK EQU 06H
;ADDR_UNACK EQU 07H
MODE_CONTROL EQU 08H
SRC_GROUP_LSB EQU 01H
SRC_GROUP_MSB EQU 00H
SRC_DEVICE_LSB EQU 01H
SRC_DEVICE_MSB EQU 00H
SRC_SYS_LSB EQU 01H
SRC_SYS_MSB EQU 00H
;DES_GROUP_LSB EQU 02H
;DES_GROUP_MSB EQU 00H
DES_DEVICE_LSB EQU 02H
DES_DEVICE_MSB EQU 00H
DES_SYS_LSB EQU 02H
DES_SYS_MSB EQU 00H
;------------------------------------------------
; Start from 0000
;------------------------------------------------
E87(AEDK51S)
ORG 0000H
LJMP START
ORG 0003H
LJMP EXTINT0
ORG 000BH
LJMP T0INT
ORG 0013H
LJMP EXTINT1
ORG 001BH
RETI
ORG 0023H
RETI
START: CLR EA
MOV SP,#6FH
MOV R1,#02H
CLRAM: CLR A
MOV @R1,A
INC R1
CJNE R1,#6EH,CLRAM
MOV R1,#07FH
CLRAM2: CLR A
MOV @R1,A
INC R1
CJNE R1,#0FFH,CLRAM2
ACALL INITILY
SETB EA
;---------------------------------------------------
;PROGRAM MAIN LOOP STARTS HERE
;---------------------------------------------------
;MAIN:
SETB TR0
LCALL INI_PM
CLR LEDONF
MAIN: LCALL LEDTSK
LCALL KEY_SCANING
JB PDLLST,MAIN01 ;ATTENTION SEQUENCE REQUIRED,
;NO GO ON
SETB LEDCS0 ;YES READ THE INTERFACE_STATUS
LCALL HOST_RD_IS
MAIN01:
LCALL HOST_READ_RR4 ;READ RECIEVE STATUS REGISTER
LCALL HOST_REC_PKTH ;READ PACKET HEAD
LCALL HOST_REC_PKT ;READ RECIEVE PACKET
;JB R_NEW_TH,SEND_LOOP
;AJMP MAIN02:
;SEND_LOOP:
;LCALL HOST_GET_LOOP
;CLR R_NEW_TH
;MAIN02:
LCALL HOST_GET_DATA
LCALL HOST_WR_TH
LCALL HOST_SEND_PKT
AJMP MAIN
;---------------------------------------------------------
;INITILY:
; INCLUDE PIN, SFR, REGISTER
;------------------------------------------------------
INITILY:
;------------------------------------------------------
; PIN INITILY
;------------------------------------------------------
MOV P1,#0FEH
MOV P2,#0FFH
SETB LCDCS
;-------------------------------------------------------
; SFR INITILY
;-------------------------------------------------------
MOV TCON,#03H ;INTI0&INTI1 INTERRUPT FAILING EDGE
MOV TMOD,#TIME_MODE ;T0 TIMER IS 16BIT COUNT (MODE 1)
MOV TH0,#0EFH ;1388H=5000*1uS=5MS
MOV TH0,#069H ;FFFF-1388=EC77
MOV SPI_DATA,#LED_DATA
;MOV SCON,#50H
MOV PCON,#80H
;MOV T2CON,#30H
MOV IE,#007H
MOV IP,#001H
CLR RS0
CLR RS1
;---------------------------------------------------------
; REGISTER INITILY
;---------------------------------------------------------
MOV PHYSTATE,#0FFH
MOV USRFG1,#0FFH
SETB EMP_TR
MOV DEBOUNCE_COUNT,#00H
MOV TMFLAG,#00H
MOV T5CNT,#64H ;64H=100
MOV T1SCNT,#0C8H ;C8H=200
MOV R1,#RTRBUF
MOV A,#TRBUF
LCALL PTRSUB
MOV R1,#RRCBUF
MOV A,#RCBUF
LCALL PTRSUB
MOV MODE_CNTRL,MODE_CONTROL
MOV GRP_ADR_LSB,#SRC_GROUP_LSB
MOV GRP_ADR_MSB,#SRC_GROUP_MSB
MOV S_DEV_ADR_LSB,#SRC_DEVICE_LSB
MOV S_DEV_ADR_MSB,#SRC_DEVICE_MSB
MOV S_SYS_ADR_LSB,#SRC_SYS_LSB
MOV S_SYS_ADR_MSB,#SRC_SYS_MSB
MOV D_DEV_ADR_LSB,#DES_DEVICE_LSB
MOV D_DEV_ADR_MSB,#DES_DEVICE_MSB
MOV D_SYS_ADR_LSB,#DES_SYS_LSB
MOV D_SYS_ADR_MSB,#DES_SYS_MSB
MOV CNTRL_FIELD,#UNACK_DATA
MOV OUTTMP,#00H
LCALL PREST
RET
;-----------------------------------------------
;PREST:
;-----------------------------------------------
PREST: MOV R1,#TRBUF
MOV DATA_CNT,#10H
PREST1: MOV A,OUTTMP
MOV @R1,A
INC R1
DJNZ DATA_CNT,PREST1
RET
;------------------------------------------------------
;INI_PM: INITIALIZATION THE PM2300
;------------------------------------------------------
INI_PM: MOV PHYSTATE,#0FFH
MOV IR_REG,#00H
CLR WR_BUS_SUCC
SETB WR_SUCC
;SETB END_TR_UART
CLR KEYPRESSED
INI_PM1:CLR SSCRST
NOP
NOP
NOP
SETB SSCRST
LCALL DLY30MS
;INI_PM100:
LCALL HOST_WR_RST
JB WR_BUS_SUCC,INI_PM10
AJMP INI_PM1
INI_PM10:
LCALL DLY30MS
LCALL HOST_READ_IR
JB WR_BUS_SUCC,INI_PM11
AJMP INI_PM1
INI_PM11:
JB RESET,INI_PM2
AJMP INI_PM1
INI_PM2:LCALL DLY10MS
MOV CW_REG,#08H
LCALL HOST_WR_CW
JB WR_BUS_SUCC,INI_PM3
SJMP INI_PM_1T1
INI_PM3:MOV TIMER1,#10H
CLR T1
INI_PM4:LCALL HOST_WR_LW
JB WR_BUS_SUCC,INI_PM5
JB T1,INI_PM_1T1
AJMP INI_PM4
INI_PM5:MOV TIMER1,#10H
CLR T1
INI_PM6:LCALL HOST_RD_LR
JB WR_BUS_SUCC,INI_PM7
JB T1,INI_PM_1T1
AJMP INI_PM6
INI_PM_1T1:
SJMP INI_PM1
INI_PM7:MOV TIMER1,#00H
LCALL CHECK_LS_EQU
MOV A,DATA_CNT
JZ INI_PM_A
SJMP INI_PM1
INI_PM_A:
MOV TIMER1,#10H
CLR T1
INI_PM_B:
LCALL HOST_WR_WR46
JB WR_BUS_SUCC,INI_PM_C
JB T1,INI_PM_1T1
AJMP INI_PM_B
INI_PM_C:
MOV TIMER1,#04H
CLR T1
INI_PM_D:
MOV CW_REG,#00H
LCALL HOST_WR_CW
JB WR_BUS_SUCC,INI_PM_X
JB T1,INI_PM_1T1
AJMP INI_PM_D
INI_PM_X:
MOV TIMER1,#00H
MOV RE_TX_CNT,#0FFH
MOV LCDBUF,#00H
;*MOV LCDADD,#00H
LCALL LCDON
LCALL DLY10MS
MOV LCDBUF,#0FFH
LCALL LCDON
RET
;-----------------------------------------------
;HOST_REC_PKT:
;-----------------------------------------------
HOST_REC_PKT:
JB RC_SUCC,HOST_REC_PKT0
RET
HOST_REC_PKT0:
JB SINT,HOST_REC_PKT1
RET
HOST_REC_PKT1:
MOV R1,#RCBUF
CLR SSCCS
MOV A,#RRI
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_REC_PKT2
AJMP HOST_REC_PKT5
HOST_REC_PKT2:
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_REC_PKT3
AJMP HOST_REC_PKT5
HOST_REC_PKT3:
MOV DATA_CNT,A
HOST_REC_PKT31:
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_REC_PKT4
AJMP HOST_REC_PKT5
HOST_REC_PKT4:
MOV @R1,A
INC R1
DJNZ DATA_CNT,HOST_REC_PKT31
SETB SSCCS
CLR EMP_RC
MOV WRCBUF,#LSTTMP
MOV RRCBUF,#RCBUF
CLR LEDCS0
CLR RC_SUCC
SETB R_NEW_TH
MOV R1,#RCBUF
MOV LCDBUF,@R1
LCALL LCDON
HOST_REC_PKT5:
SETB SSCCS
RET
;-----------------------------------------------
;HOST_REC_PKTH:
;-----------------------------------------------
HOST_REC_PKTH:
JB RC_H_SUCC,HOST_REC_PKTH0
RET
HOST_REC_PKTH0:
JB SINT,HOST_REC_PKTH1
RET
HOST_REC_PKTH1:
MOV R1,#R_TH_BUF
CLR SSCCS
MOV A,#RRH
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_REC_PKTH2
AJMP HOST_REC_PKTH5
HOST_REC_PKTH2:
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_REC_PKTH3
AJMP HOST_REC_PKTH5
HOST_REC_PKTH3:
MOV HEAD_CNT,A
HOST_REC_PKTH6:
LCALL HOSTRD
JB RD_BUS_SUCC,HOST_REC_PKTH4
AJMP HOST_REC_PKTH5
HOST_REC_PKTH4:
MOV @R1,A
INC R1
DJNZ HEAD_CNT,HOST_REC_PKTH6
CLR RC_H_SUCC
HOST_REC_PKTH5:
SETB SSCCS
RET
;-----------------------------------------------
;HOST_WR_CW:
;-----------------------------------------------
HOST_WR_CW:
CLR WR_BUS_SUCC
JB SINT,HOST_WR_CW1
RET
HOST_WR_CW1:
CLR SSCCS
MOV A,#CW
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_CW2
AJMP HOST_WR_CW5
HOST_WR_CW2:
MOV A,#02H
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_CW3
AJMP HOST_WR_CW5
HOST_WR_CW3:
MOV A,CW_REG
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_CW4
AJMP HOST_WR_CW5
HOST_WR_CW4:
MOV A,#00H
LCALL HOSTWR
HOST_WR_CW5:
SETB SSCCS
RET
;-----------------------------------------------
;HOST_WR_LW:
;-----------------------------------------------
HOST_WR_LW:
CLR WR_BUS_SUCC
JB SINT,HOST_WR_LW1
RET
HOST_WR_LW1:
CLR SSCCS
MOV A,#LW
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_LW11
AJMP HOST_WR_LW3
HOST_WR_LW11:
MOV A,#07H
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_LW12
AJMP HOST_WR_LW3
HOST_WR_LW12:
MOV R1,#MODE_CNTRL
MOV DATA_CNT,#07H
HOST_WR_LW2:
MOV A,@R1
INC R1
LCALL HOSTWR
JB WR_BUS_SUCC,HOST_WR_LW21
AJMP HOST_WR_LW3
HOST_WR_LW21:
DJNZ DATA_CNT,HOST_WR_LW2
HOST_WR_LW3:
SETB SSCCS
RET
;-----------------------------------------------
;HOST_WR_RST:
;-----------------------------------------------
HOST_WR_RST:
SETB PDLLST
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -