📄 hdasghd.asm
字号:
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
DJNZ BITCNT,SENTB ;数据位计数器
NOP
NOP
nop
SETB SDA
NOP
NOP
nop
SETB SCL
NOP
NOP
nop
CLR F0
JNB SDA,ACKEND
SETB F0
ACKEND: NOP
CLR SCL
nop
RET
;--------------------
;NAME:RCVBYTE ;字节数据接收子程序
;--------------------
RCVBYTE: SETB SDA
MOV BITCNT,#08H ;数据位计数器
RCV: nop
NOP
CLR SCL
NOP
nop
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
nop
CLR C
JNB SDA,RCV0
SETB C
RCV0: RLC A
NOP
NOP
nop
DJNZ BITCNT,RCV ;数据位计数器
CLR SCL
NOP
NOP
nop
NOP
CLR SDA
JNB ACK,SENTACKB ;I2C器件非应答信号
SETB SDA
SENTACKB: nop
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
CLR ACK ;I2C器件非应答信号
RET
;**********************************************************************
;*************************显示*************************************************************
;==========================================================
;BCDH功能:单字节BCD码整数转换成单字节十六进制整数
;入口条件:待转换的单字节BCD码整数在累加器A中。
;出口信息:转换后的单字节十六进制整数仍在累加器A中。
;影响资源:PSW、A、B、R4 堆栈需求: 2字节
BCDH: MOV B,#10H ;分离十位和个位
DIV AB
MOV R4,B ;暂存个位
MOV B,#10 ;将十位转换成十六进制
MUL AB
ADD A,R4 ;按十六进制加上个位
RET
;==================================================================
;========================单字节十六进制整数转BCD==================
;标号:HBCD1 功能:单字节十六进制整数转换成单字节BCD码整数
;入口条件:待转换的单字节十六进制整数在累加器A中。
;出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
;影响资源:PSW、A、B、R3 堆栈需求: 2字节
HBCD1: MOV B,#100 ;;分离出百位,存放在R3中
DIV AB
MOV R3,A
MOV A,#10 ;;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
ORL A,B ;;将十位和个位拼装成BCD码
RET
;=========================================================================
;==========================================================
;标号: BH2 功能:双字节BCD码整数转换成双字节十六进制整数
;入口条件:待转换的双字节BCD码整数在R2、R3中。
;出口信息:转换后的双字节十六进制整数仍在R2、R3中。
;影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 4字节
BH2: MOV A,R3 ;将低字节转换成十六进制
LCALL BCDH
MOV R3,A
MOV A,R2 ;将高字节转换成十六进制
LCALL BCDH
MOV B,#100 ;扩大一百倍
MUL AB
ADD A,R3 ;和低字节按十六进制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
;===========================================================
;==============================显示2字节BCD数=====================
;DP2N,显示2字节BCD数,2字节BCD数直接以BCD码的方式存放在内存单元中
;入口条件:高字节在R4,低字节在R5
DP2N: NOP
;----------- ;十万位
MOV A , #0FFH;全灭
MOV SBUF , A
CALL DEL20US
;----------- ;万位
MOV A , #0FFH;全灭
MOV SBUF , A
CALL DEL20US
;----------- ;千位
MOV A , #0FFH;全灭
MOV SBUF , A
CALL DEL20US
;----------- ;百位
MOV A , R4
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;--------- ;十位
MOV A , R5
ANL A , #11110000B
SWAP A
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;-------------- ;个位
MOV A , R5
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;--------------
RET
;===================================================================
;==============================显示3字节BCD数=====================
;3字节BCD数直接以BCD码的方式存放在内存单元中
;入口条件:高字节在R3,中字节在R4,低字节在R5
DP3N: NOP
;----------- ;十万位
MOV A , R3
ANL A , #11110000B
SWAP A
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;----------- ;万位
MOV A , R3
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;----------- ;千位
MOV A , R4
ANL A , #11110000B
SWAP A
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;----------- ;百位
MOV A , R4
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;--------- ;十位
MOV A , R5
ANL A , #11110000B
SWAP A
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;-------------- ;个位
MOV A , R5
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
;--------------
RET
;=============================================================
;=========================显示部分3字节BCD数=====================
;3字节BCD数直接以BCD码的方式存放在内存单元中
;入口条件:高字节在R3,中字节在R4,低字节在R5,不显示的位在R6中
DPBF3N: NOP
CALL DFLB6
CALL DFLB5
CALL DFLB4
CALL DFLB3
CALL DFLB2
CALL DFLB1
RET
;====================================
DFLB6: CJNE R6 , #6 , DFLB6A
MOV A , #0FFH
MOV SBUF , A
CALL DEL20US
RET
DFLB6A: NOP ;----------- ;十万位
MOV A , R3
ANL A , #11110000B
SWAP A
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
RET
;----------------------------------
DFLB5: CJNE R6 , #5 , DFLB5A
MOV A , #0FFH
MOV SBUF , A
CALL DEL20US
RET
DFLB5A: NOP
;----------- ;万位
MOV A , R3
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
RET
;---------------------------------
DFLB4: CJNE R6 , #4 , DFLB4A
MOV A , #0FFH
MOV SBUF , A
CALL DEL20US
RET
DFLB4A: NOP
;----------- ;千位
MOV A , R4
ANL A , #11110000B
SWAP A
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
RET
;----------------------------------
DFLB3: CJNE R6 , #3 , DFLB3A
MOV A , #0FFH
MOV SBUF , A
CALL DEL20US
RET
DFLB3A: NOP
;----------- ;百位
MOV A , R4
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
RET
;----------------------------------
DFLB2: CJNE R6 , #2 , DFLB2A
MOV A , #0FFH
MOV SBUF , A
CALL DEL20US
RET
DFLB2A: NOP
;--------- ;十位
MOV A , R5
ANL A , #11110000B
SWAP A
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
RET
;------------------------------------
DFLB1: CJNE R6 , #1 , DFLB1A
MOV A , #0FFH
MOV SBUF , A
CALL DEL20US
RET
DFLB1A: NOP
;-------------- ;个位
MOV A , R5
ANL A , #00001111B
MOV DPTR , #DISPTAB
MOVC A , @A+DPTR
MOV SBUF , A
CALL DEL20US
RET
;=============================================================
;##################显示指示灯(6只小灯LRUN、L1~L5)##########
;3 移位寄存器方式串行发送时时钟高电平状态下进行数据发送准备在移位脉冲的下降沿将数据发送出去
;4 移位寄存器方式串行接收时在移位脉冲低电平检测串行数据线上的状态并接收该数
;VRXD 数据线以替代 RXD,即P3.6
;VTXD 时钟线以替代 TXD,即P3.5
;=========以下为发送显示指示灯的程序(发送字节数据入BITDISP中,占用R3,A)==========
DISPLED:MOV R3 , #08H ;一帧中的发送位数8
MOV A , BITDISP
TSTA: MOV C , ACC.0
MOV VDATA , C ;发送1/0
NOP
CLR VCLK
NOP
NOP
SETB VCLK
NOP
RR A ;发送完一位指向下一位
DJNZ R3 , TSTA ;一帧发送完毕未完继续
RET
;====================================================
;####################################################
;================DISPFSET======================
;显示TI及TI中内容,TIL放R3中,TIH放R4中 ,I放R5中,位放R6,TI放R7
DISPFSET: CJNE R7,#00H,DISPFT1
;-----------显示循环数---------------
;入口信息:三字节的循环数BCD码数在R3、R4、R5中。
MOV R3 , FLOOPNUMH;
MOV R4 , FLOOPNUMM;
MOV R5 , FLOOPNUML;
JB FLAGT500 , DFL;DISP FIRST LOOP NUMBER
CALL DPBF3N
RET
DFL: CALL DP3N ;调显示三字节十六进制数 ,显示状态1循环数
RET
;-----------------------------
DISPFT1: CJNE R7,#01H,DISPFT2
MOV R5 , #01H;I放R5中
MOV R0 , #FT1H
MOV A , @R0
MOV R4 , A
MOV R0 , #FT1L
MOV A , @R0
MOV R3 , A
JB FLAGT500 , DFT1
CALL DBFTI
RET
DFT1: CALL DTI
RET
DISPFT2: CJNE R7,#02H,DISPFT3
MOV R5 , #02H;显示TI及TI中内容,TIL放R3中,TIH放R4中 ,I放R5中,位放R6,TI放R7
MOV R0 , #FT2H
MOV A , @R0
MOV R4 , A
MOV R0 , #FT2L
MOV A , @R0
MOV R3 , A
JB FLAGT500 , DFT2
CALL DBFTI
RET
DFT2: CALL DTI
RET
DISPFT3: CJNE R7,#03H,DISPFT4
MOV R5 , #03H;显示TI及TI中内容,TIL放R3中,TIH放R4中 ,I放R5中,位放R6,TI放R7
MOV R0 , #FT3H
MOV A , @R0
MOV R4 , A
MOV R0 , #FT3L
MOV A , @R0
MOV R3 , A
JB FLAGT500 , DFT3
CALL DBFTI
RET
DFT3: CALL DTI
RET
DISPFT4: CJNE R7,#04H,DISPFT5
MOV R5 , #04H;显示TI及TI中内容,TIL放R3中,TIH放R4中 ,I放R5中,位放R6,TI放R7
MOV R0 , #FT4H
MOV A , @R0
MOV R4 , A
MOV R0 , #FT4L
MOV A , @R0
MOV R3 , A
JB FLAGT500 , DFT4
CALL DBFTI
RET
DFT4: CALL DTI
RET
DISPFT5: CJNE R7,#05H,DISPFT6
MOV R5 , #05H;显示TI及TI中内容,TIL放R3中,TIH放R4中 ,I放R5中,位放R6,TI放R7
MOV R0 , #FT5H
MOV A , @R0
MOV R4 , A
MOV R0 , #FT5L
MOV A , @R0
MOV R3 , A
JB FLAGT500 , DFT5
CALL DBFTI
RET
DFT5: CALL DTI
RET
DISPFT6: CJNE R7,#06H,DISPFT7
MOV R5 , #06H;显示TI及TI中内容,TIL放R3中,TIH放R4中 ,I放R5中,位放R6,TI放R7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -