📄 hdasghd.asm
字号:
CALL DEL20US
RET
;==========================================
;=========================================
;显示状态3的P及T中内容
DISPTT: MOV A , #31H ;显示P
MOV SBUF , A
CALL DEL20US
MOV A , #0FFH ;全灭
MOV SBUF , A
CALL DEL20US
MOV A , #0FFH ;全灭
MOV SBUF , A
CALL DEL20US
MOV R0 , #TTH;显示TH值
MOV A , @R0
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
MOV R0 , #TTL;显示TTL值;有小数点
MOV A , @R0
ANL A , #11110000B
SWAP A
MOV DPTR , #DISPTABDOT
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
MOV A , @R0;显示TL值
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
RET
;===================================================
;===================================================
;--------显示PASS0或PASS1,由PASS位来决定-----------
DPASS: MOV A , #31H;P
MOV SBUF , A
CALL DEL20US
MOV A , #11H;A
MOV SBUF , A
CALL DEL20US
MOV A , #49H;S
MOV SBUF , A
CALL DEL20US
MOV A , #49H;S
MOV SBUF , A
CALL DEL20US
MOV A , #0FFH;全灭
MOV SBUF , A
CALL DEL20US
;据PASS显示0或1
JB PASS , DP1
MOV A , #03H ;0
MOV SBUF , A
CALL DEL20US
RET
DP1: MOV A , #09FH ;1
MOV SBUF , A
CALL DEL20US
RET
;===============================================
;*****************************************************************************************
;*****************************保存数据************************************************************
;###############保存状态1循环数##############
SAVEFLOOP: NOP
MOV R0 , FLOOPNUMH
MOV ADDR , #10H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV R0 , FLOOPNUMM
MOV ADDR , #11H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV R0 , FLOOPNUML
MOV ADDR , #12H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
RET
;#######################################
;###############保存状态1运行数#########
SAVEFRUN: NOP
MOV R0 , FRUNNUMH
MOV ADDR , #13H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV R0 , FRUNNUMM
MOV ADDR , #14H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV R0 , FRUNNUML
MOV ADDR , #15H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
RET
;#######################################
;###############保存状态2循环数##############
SAVESLOOP: NOP
MOV R0 , SLOOPNUMH
MOV ADDR , #40H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV R0 , SLOOPNUMM
MOV ADDR , #41H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV R0 , SLOOPNUML
MOV ADDR , #42H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
RET
;#######################################
;###############保存状态2运行数#########
SAVESRUN: NOP
MOV R0 , SRUNNUMH
MOV ADDR , #43H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV R0 , SRUNNUMM
MOV ADDR , #44H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV R0 , SRUNNUML
MOV ADDR , #45H
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
RET
;#######################################
;##############保存FTI数据######################
;-------首地址放R1中,循环次数放在R2中,外存地址放R3中-------------
SAVEFT: MOV R1 , #FT1L
MOV R2 , #01H
MOV R3 , #00H
SAVEFTT:MOV A , @R1
MOV R0 , A
MOV ADDR , R3
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV A , R2
CJNE A , #10H , SFTJS
RET
SFTJS: INC R1
INC R2
INC R3
JMP SAVEFTT
;#######################################
;##############保存状态2TI数据############
;-------首地址放R1中,循环次数放在R2中,外存地址放R3中-------------
SAVEST: MOV R1 , #ST1L
MOV R2 , #01H
MOV R3 , #20H
SAVESTT:MOV A , @R1
MOV R0 , A
MOV ADDR , R3
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV A , R2
CJNE A , #14H , SSTJS
RET
SSTJS: INC R1
INC R2
INC R3
JMP SAVESTT
;#######################################
;###########保存状态2占三字节数据#############
;-------首地址放R0中,循环次数放在R2中,外存地址放R3中-------------
SAVESQ3: MOV R0 , #LITH1L ;SAVE SECOND QI TA 3 字节
MOV R2 , #01H
MOV R3 , #60H
MOV A , @R0
MOV R0 , A
MOV ADDR , R3
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV A , R2
CJNE A , #0FH , SSQ3OUT
INC R0
INC R2
INC R3
JMP SAVESQ3
SSQ3OUT: NOP
RET
;#######################################
;###########保存状态2占2字节数据#############
;-------首地址放R0中,循环次数放在R2中,外存地址放R3中-------------
SAVESQ1: MOV R0 , #LITHHL ;SAVE SECOND QI TA 1 字节数
MOV R2 , #01H
MOV R3 , #70H
MOV A , @R0
MOV R0 , A
MOV ADDR , R3
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV A , R2
CJNE A , #0FH , SSQ1OUT
INC R0
INC R2
INC R3
JMP SAVESQ1
SSQ1OUT: NOP
RET
;#####################################################
;##############保存状态3T,PT数据######################
;-------首地址放R1中,循环次数放在R2中,外存地址放R3中-------------
SAVETT: MOV R1 , #TT1L
MOV R2 , #01H
MOV R3 , #50H
SAVETT1: MOV A , @R1
MOV R0 , A
MOV ADDR , R3
CALL SENDDATA ;要发的数放于R0中,一次发一个,地址为:ADDR
MOV A , R2
CJNE A , #10H , STTJS
RET
STTJS: INC R1
INC R2
INC R3
JMP SAVETT1
;##################################################
;******************************************************************************************
;***********************************读出数据****************************************************
;###############读出状态1循环数####################
READFLOOP: NOP
MOV ADDR , #10H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FLOOPNUMH , R0
MOV ADDR , #11H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FLOOPNUMM , R0
MOV ADDR , #12H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FLOOPNUML , R0
RET
;#######################################
;###############读出状态2循环数##############
READSLOOP: NOP
MOV ADDR , #40H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV SLOOPNUMH , R0
MOV ADDR , #41H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV SLOOPNUMM , R0
MOV ADDR , #42H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV SLOOPNUML , R0
RET
;#######################################
;###############读出状态1运行数#########
READFRUN: NOP
MOV ADDR , #13H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FRUNNUMH , R0
MOV ADDR , #14H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FRUNNUMM , R0
MOV ADDR , #15H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FRUNNUML , R0
RET
;#######################################
;###############读出状态2运行数#########
READSRUN: NOP
MOV ADDR , #43H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FLOOPNUMH , R0
MOV ADDR , #44H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FLOOPNUMM , R0
MOV ADDR , #45H
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV FLOOPNUML , R0
RET
;#######################################
;############读出状态1TI的参数值######################
;-------首地址放R1中,循环次数放在R2中,外存地址放R3中-------------
READFT: MOV R1 , #FT1L
MOV R2 , #01H
MOV R3 , #00H
READFTT:MOV ADDR , R3
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV A , R0
MOV @R1 , A
MOV A , R2
CJNE A , #10H , RFTJS
RET
RFTJS: NOP
INC R1
INC R2
INC R3
JMP READFTT
;########################################
;############读出状态2TI的参数值######################
;-------首地址放R1中,循环次数放在R2中,外存地址放R3中-------------
READST: MOV R1 , #ST1L
MOV R2 , #01H
MOV R3 , #20H
READSTT:MOV ADDR , R3
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV A , R0
MOV @R1 , A
MOV A , R2
CJNE A , #14H , RSTJS ;读的数量
RET
RSTJS: NOP
INC R1
INC R2
INC R3
JMP READSTT
;########################################
;############读出状态3T,PT的参数值######################
;-------首地址放R1中,循环次数放在R2中,外存地址放R3中-------------
READTT: MOV R1 , #TT1L
MOV R2 , #01H
MOV R3 , #50H
READTTT:MOV ADDR , R3
CALL RCVDATA ;收到的数放于R0中,一次收一个,地址为:ADDR
MOV A , R0
MOV @R1 , A
MOV A , R2
CJNE A , #10H , RTTJS
RET
RTTJS: NOP
INC R1
INC R2
INC R3
JMP READTTT
;########################################
;*****************************************************************************
;*****************************************************************************
;===========低位BCD码加一;位地址放R0中===============
BOTTOMADD: MOV A , @R0
ANL A ,#00001111B
CJNE A ,#00001001B ,BOTADD ;循环数个位加1,如果为10复位
MOV A , @R0 ;复位
ANL A ,#11110000B
MOV @R0 , A
RET
BOTADD: INC @R0
RET
;=======================================
;========高位BCD码加一;位地址放R0中========
HIGHADD: MOV A , @R0
ANL A ,#11110000B
CJNE A ,#10010000B ,HIGADD ;循环数个位加1,如果为10复位
MOV A , @R0 ;复位
ANL A ,#00001111B
MOV @R0 , A
RET
HIGADD: MOV A , @R0
SWAP A;
INC A
SWAP A
MOV @R0 , A
RET
;======================================
;*****************************************************************************
;***********************************************************************
;*******************************主程序的子程序***************************
;************************************************************************
;%%%%%%%%%%%%%%%%%%%%%%%状态1%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FSTATE: NOP
;3字节BCD数直接以BCD码的方式存放在内存单元中
;入口条件:高字节在R3,中字节在R4,低字节在R5
CLR LEDT1 ;高电平不亮
SETB LEDT2 ;高电平不亮
SETB LEDT3 ;高电平不亮
CALL READFLOOP
CALL READFT ;读设置时间值
CALL DEL5
FRETURN: CALL READFRUN
MOV R3 , FRUNNUMH;
MOV R4 , FRUNNUMM;
MOV R5 , FRUNNUML;
CALL DP3N ;调显示三字节十六进制数 ,显示状态1运行计数
CALL DEL5
WAITFLOOKK: JB LOOKK , WAITFSETK ;
CALL DEL100
JB LOOKK , WAITFSETK ;
;CALL DEL100
CALL FSTATELOOK
WAITFSETK: JB SETK , WAITFRUNK ;
CALL DEL100
JB SETK , WAITFRUNK ;
CALL DEL50
CALL FSTATESET
WAITFRUNK: JB RUNK , WAITFCLRK ;
CALL DEL100
JB RUNK , WAITFCLRK ;
CALL FSTATERUN
WAITFCLRK: JB CLRK , WAITFSELK ;
CALL DEL100
JB CLRK , WAITFSELK ;
CALL FSTATECLR
WAITFSELK: JB SELK , FRETURN ;
CALL DEL100
JB SELK , FRETURN ;
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%状态2%%%%%%%%%%%%%%%%%%%%%%%%%%
SSTATE: NOP
SETB LEDT1 ;高电平不亮
CLR LEDT2 ;高电平不亮
SETB LEDT3 ;高电平不亮
CALL READSRUN
MOV R3 , SRUNNUMH;
MOV R4 , SRUNNUMM;
MOV R5 , SRUNNUML;
CALL DP3N ;调显示三字节十六进制数 ,显示状态2运行计数
WAITSLOOKK: JB LOOKK , WAITSSETK ;
CALL DEL100
JB LOOKK , WAITSSETK ;
CALL SSTATELOOK
WAITSSETK: JB SETK , WAITSRUNK ;
CALL DEL100
JB SETK , WAITSRUNK ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -