📄 h2_3.asm
字号:
$INCLUDE(H2_DEF.ASM)
;*****************************************************************************************
;START AND INITIALIZE
ORG 0000
JMP START
ORG 0003H ;外部中断0
RESTR
ORG 000BH ;定时器0溢出
JMP T0_INT
ORG 0013H ;外部中断1
RESTR
ORG 001BH ;定时器1溢出
JMP T1_INT
ORG 0023H ;串行口
JMP SP_INT
ORG 002BH ;定时器2溢出或T2EX端出现负调变
RESTR
ORG 050
START: MOV SP,#STACKTOP
CLR PSW.3
CLR PSW.4
MAX7219 DISPTEST,#1
CLR BUZR
MOV A,#OUTMOD
MOV C,ACC.0
MOV OUTMOD_M,C
JC OM0
CLR OUT_P1
CLR OUT_P2
CLR OUT_SH
CLR OUT_JI
JMP OM1
OM0: SETB OUT_P1
SETB OUT_P2
SETB OUT_SH
SETB OUT_JI
OM1: CLR LP1_BUZR_OK
CLR LP8_BUZR_OK
MOV P1,#0FFH
MOV P2,#0FFH
CLR SIGN
CLR SP_T_EN
CLR RCOM_EN
CLR RCOM_OK
CLR ALM_SH
CLR ALM_JI
CLR LED_SH
CLR LED_JI
CLR LED_ALM_P1
CLR LED_ALM_P2
CLR ALM_P1
CLR ALM_P2
CLR ALMSODEN
CLR BUZR
CLR ZS_EN
CLR OK_X
CLR ZS_EN1
SETB SEQADJ_SW
CLR ADJBUF_PS_OK
SETB DESKTOP
CLR OK_Y
CLR HH1
CLR HH2
CLR HH3
CLR M1
CLR FS
CLR F1
CLR LP1
CLR LP2
CLR LP3
CLR LP4
CLR LP5
CLR F2
CLR PD
CLR DIRS
CLR LC
CLR L1
CLR L2
CLR L3
CLR L4
CLR L5
CLR L6
CLR L7
CLR L8
CLR L9
CLR L10
CLR L11
CLR L12
CLR L13
CLR L14
CLR L15
CLR CHPD
CLR ADDR
CLR PDSUCCESS
CLR PDSUCCESS1
CLR PD1
CLR ED
CLR ED_INT
CLR ED_OK
CLR ED_ESC
CLR DIGIT1
CLR DIGIT2
CLR DIGIT3
CLR DIGIT4
CLR F3
CLR F4
CLR DA_H
CLR DA_L
CLR HU
CLR HD
CLR HL
MOV TWINBIT1CNT,#TWINKLEINTVL1
MOV TWINBIT2CNT1,#TWINBIT2ON
MOV TWINBIT2CNT2,#TWINBIT2OFF
MOV TWINBIT3CNT1,#TWINBIT3ON
MOV TWINBIT3CNT2,#TWINBIT3OFF
MOV KMTCNT1,#KMT
MOV KMTCNT2,#20
MOV SHIFTDLYCNT,#SHIFTDLY*2
MOV LP1_BUZRCNT1,#LP1_BUZRTIM
MOV LP1_BUZRCNT2,#20
MOV LP8_BUZRCNT1,#LP8_BUZRTIM
MOV LP8_BUZRCNT2,#20
MOV VIEWLIM_REG,#1
MOV F1SEL_REG,#1
MOV F2SEL_REG,#1
MOV HEIGHT_H,#0
MOV HEIGHT_L,#0
CALL INT5045
CALL DISPSERV
CALL INT7219
MOV RCAP2H,#HIGH(-36)
MOV RCAP2L,#LOW(-36)
SETB RCLK
SETB TCLK
SETB TR2
SETB ES
SETB PS
MOV SCON,#50H
MOV TMOD,#11H
SETB PT1
MOV TH0,#HIGH(-SCANTIME) ;DEFINE INTERVAL OF INTERRUPTION
MOV TL0,#LOW(-SCANTIME)
SETB TR0
SETB ET0
MOV TH1,#HIGH(-5*SCANTIME) ;DEFINE INTERVAL OF INTERRUPTION
MOV TL1,#LOW(-5*SCANTIME)
SETB TR1
SETB ET1
SETB EA
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MAIN:
CALL CYCSET7219
CALL KEYCTRL
CALL RST_WDOG
CALL ENCODER
CALL CMPHEIGHT
CALL DESKTOPDISP
CALL RST_WDOG
CALL HEIGHTMONITOR
CALL DACONV
CALL RST_WDOG
CALL COMMUNICATION
CALL ZEROSETDLY1
CALL CSET
JMP MAIN
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
T0_INT: PROTECT
MOV TH0,#HIGH(-SCANTIME) ;DEFINE INTERVAL OF T0 INTERRUPTION
MOV TL0,#LOW(-SCANTIME)
CALL DISPSERV
CALL TWINK1
CALL TWINK2
CALL TWINK3
CALL ALARM
CALL ALARM1
RESUME
RETI
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
T1_INT: PUSH PSW
MOV TH1,#HIGH(-5*SCANTIME) ;DEFINE INTERVAL OF T1 INTERRUPTION
MOV TL1,#LOW(-5*SCANTIME)
CALL KEYMONITOR
CALL SEQADJ
CALL ZEROSETDLY
CALL LP1_BUZR_DLY
CALL LP8_BUZR_DLY
POP PSW
RETI
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
SP_INT: PUSH PSW
PUSH AR0
PUSH ACC
CALL RINT
POP ACC
POP AR0
POP PSW
RETI
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;COMMUNICATION
RINT: JB RI,RINT0
RET
RINT0: CLR RI
MOV A,SBUF
JB RCOM_OK,RINT2
JB RCOM_EN,RINT3
RINT1: CJNE A,#'#',RINT2
MOV RDADR,#80H
MOV RDCNT,#4
SETB RCOM_EN
RINT2: RET
RINT3: MOV R0,RDADR
MOV @R0,A
DJNZ RDCNT,RINT4
CLR RCOM_EN ;命令执行之前拒绝接收新命令
SETB RCOM_OK
RET
RINT4: INC RDADR
RET
;***************************************************************************************
COMMUNICATION:
JB RCOM_OK,COMM0
RET
COMMOUT: CLR RCOM_OK
RET
COMM0: MOV DPTR,#ADDRSET_M
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,COMMOUT
MOV DPTR,#ADDRSET_ADR
CALL BYTRD_VERIFY
MOV R0,#80H
MOV AR1,@R0
CJNE A,AR1,COMMOUT
INC R0
MOV A,@R0
CJNE A,#00,COMM1
CALL COMD00
RET
COMM1: CJNE A,#01,COMM2
CALL COMD01
RET
COMM2: CJNE A,#03,COMM3
CALL COMD03
RET
COMM3: CJNE A,#05,COMM4
CALL COMD05
RET
COMM4: CJNE A,#07,COMM12
CALL COMD07
RET
COMM12: JMP COMMOUT
;***************************************************************************************
COMD01: MOV DPTR,#LP6_L ;读高度上限U1
CALL BYTRD_VERIFY
MOV R1,A
MOV DPTR,#LP6_H
CALL BYTRD_VERIFY
MOV R0,A
MOV R2,#0
MOV R3,AR0
MOV R4,AR1
CALL BCDBIN
MOV R0,#90H
MOV @R0,AR7
INC R0
MOV @R0,AR6
CALL TDATA
RET
;---------------------------------------------------------------------------------------
COMD00: MOV R0,#90H
MOV A,HEIGHT_L ;读高度
MOV @R0,A
MOV A,HEIGHT_H
INC R0
MOV @R0,A
CALL TDATA
RET
;----------------------------------------------------------------------------------------
COMD03:
MOV DPTR,#LP7_L
CALL BYTRD_VERIFY
MOV R1,A
MOV DPTR,#LP7_H ;读高度上限U2
CALL BYTRD_VERIFY
MOV R0,A
MOV R2,#0
MOV R3,AR0
MOV R4,AR1
CALL BCDBIN
MOV R0,#90H
MOV @R0,AR7
INC R0
MOV @R0,AR6
CALL TDATA
RET
;---------------------------------------------------------------------------------------
COMD05: MOV DPTR,#LP8_L
CALL BYTRD_VERIFY
MOV R1,A
MOV DPTR,#LP8_H ;读高度上限U3
CALL BYTRD_VERIFY
MOV R0,A
MOV R2,#0
MOV R3,AR0
MOV R4,AR1
CALL BCDBIN
MOV R0,#90H
MOV @R0,AR7
INC R0
MOV @R0,AR6
CALL TDATA
RET
;---------------------------------------------------------------------------------------
COMD07: MOV DPTR,#LP1_L
CALL BYTRD_VERIFY
MOV R1,A
MOV DPTR,#LP1_H ;读高度下限L1
CALL BYTRD_VERIFY
MOV R0,A
MOV R2,#0
MOV R3,AR0
MOV R4,AR1
CALL BCDBIN
MOV R0,#90H
MOV @R0,AR7
INC R0
MOV @R0,AR6
CALL TDATA
RET
;*******************************************************************************************
TDATA: SETB SP_T_EN
MOV R0,#90H
MOV SBUF,@R0
JNB TI,$
CLR TI
INC R0
MOV SBUF,@R0
JNB TI,$
CLR TI
CLR SP_T_EN
CLR RCOM_OK
TDOUT: RET
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DACONV: CALL CMPDA
CALL TLC5615
RET
CMPDA: MOV DPTR,#DA_L_M
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,CMPDA0
MOV DPTR,#DA_H_M
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,CMPDA0
JMP CMPDA2
CMPDA0: MOV R6,#0
MOV R7,#0
RET
CMPDA1: MOV R6,#HIGH(1023)
MOV R7,#LOW(1023)
RET
CMPDA2: MOV DPTR,#DA_L_H
CALL BYTRD_VERIFY
MOV R0,A
MOV DPTR,#DA_L_L
CALL BYTRD_VERIFY
MOV R2,#0
MOV R3,AR0
MOV R4,A
CALL BCDBIN
MOV R0,AR6
MOV R1,AR7
CLR C
MOV A,HEIGHT_L
SUBB A,R1
MOV A,HEIGHT_H
SUBB A,R0
JC CMPDA0
MOV DPTR,#DA_H_H
CALL BYTRD_VERIFY
MOV R6,A
MOV DPTR,#DA_H_L
CALL BYTRD_VERIFY
MOV R2,#0
MOV R3,AR6
MOV R4,A
CALL BCDBIN
CLR C
MOV A,R7
SUBB A,HEIGHT_L
MOV A,R6
SUBB A,HEIGHT_H
JC CMPDA1
MOV A,R7
SUBB A,R1
MOV R7,A
MOV A,R6
SUBB A,R0
MOV R6,A
JC CMPDA0
MOV A,HEIGHT_L
SUBB A,R1
MOV R5,A
MOV A,HEIGHT_H
SUBB A,R0
MOV R4,A
MOV R2,#HIGH(1023)
MOV R3,#LOW(1023)
CALL SCALE
MOV R6,AR4
MOV R7,AR5
RET
TLC5615: CLR ET0
CLR SCK
CLR CS5615
MOV R0,#2
CLR C
T5615_0: MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
DJNZ R0,T5615_0
SWAP A
MOV R0,#4
T5615_1: RLC A
MOV SI,C
SETB SCK
CLR SCK
DJNZ R0,T5615_1
MOV R0,#8
MOV A,R7
T5615_2: RLC A
MOV SI,C
SETB SCK
CLR SCK
DJNZ R0,T5615_2
SETB CS5615
SETB ET0
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;COMPUTE HEIGHT
CMPHEIGHT:
MOV DPTR,#Z0_M
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,CP0
MOV DPTR,#Z1_M
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,CP0
JMP CP1
CP0: MOV HEIGHT_H,#0
MOV HEIGHT_L,#0
RET
CP1: MOV DPTR,#Z0_1
CALL BYTRD_VERIFY
MOV R0,A
MOV DPTR,#Z0_2
CALL BYTRD_VERIFY
MOV R1,A
MOV DPTR,#Z0_3
CALL BYTRD_VERIFY
MOV R6,A
MOV DPTR,#Z0_4
CALL BYTRD_VERIFY
MOV R7,A ;R0R1R6R7=Z0
CP1_0: CLR C
MOV A,ENCODER_BUF4
SUBB A,R7
MOV R5,A
MOV A,ENCODER_BUF3
SUBB A,R6
MOV R4,A
MOV A,ENCODER_BUF2
SUBB A,R1
MOV R3,A
MOV A,ENCODER_BUF1
SUBB A,R0
MOV R2,A
JNC CP2
SETB SIGN
MOV DPTR,#A1_L
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -