📄 ldxs.asm
字号:
MOV R7,#3
LCALL D457
MOV A,7BH
SUBB A,R3
MOV R3,A
SJMP YUT
RUB1: CLR C ;小于70时需要用70减去它然后再除以3结果再加上原数
MOV A,#70
MOV 7AH,R3
SUBB A,R3
MOV R5,A
MOV R4,#0
MOV R7,#3
LCALL D457
MOV A,R3
ADD A,7AH
MOV R3,A
; MOV 7FH,R3
YUT: MOV 7DH,R3 ;修正后的数据存7DH
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
MOV A,R6
JNZ XSA22 ;R6不为0则超过150CM转处理程序
CLR C
MOV A,R7
SUBB A,#34
JNC FAR1
MOV 30H,#0
MOV 31H,#0
SETB 00H ;0通道小于34CM标志
LJMP XSA2
SJMP JJ1 ;屏蔽两侧通道处理程序
FAR1: CLR C ;判断是否超过150CM?
MOV A,#150
SUBB A,R7
JNC JJ1 ;不超过150CM转
XSA22: MOV 30H,#10 ;超过150CM处理程序
MOV 31H,#10
CLR 02H
SETB 01H ;0通道大于150CM标志
SJMP XSA2
JJ1: ; CLR 00H
; CLR 01H
LCALL HB2
MOV A,R4
JNZ XSA1
MOV A,R5 ;显示十位和个位
ANL A,#0FH
MOV 31H,A
MOV A,R5
ANL A,#0F0H
SWAP A
MOV 30H,A
CLR 02H ;关闭小数点
SJMP XSA2
XSA1: MOV A,R5 ;显示百位和十位
ANL A,#0F0H
SWAP A
MOV 31H,A
MOV A,R4
ANL A,#0FH
MOV 30H,A
SETB 02H ;打开小数点
XSA2: JNB 03H,KKI
;MOV 32H,#0FFH ;无效数关闭灯
LJMP LOOP
KKI: JNB 01H,LD01 ;通道判断
MOV A,5CH
SETB ACC.6 ;左1超过150CM,关灯
SETB ACC.0
; CLR ACC.6
MOV 5CH,A ;全灭
SJMP LD1B
LD01: JNB 04H,LD02
MOV A,5CH ;左1超过90CM
CLR ACC.0
MOV 5CH,A ;左1绿
; LJMP LOOP
SJMP LD1B
LD02:MOV A,5CH ;关左1绿
SETB ACC.0
MOV 5CH,A
LD02B:JNB 00H,LD1
MOV A,5CH ;左1小于34CM
CLR ACC.6
MOV 5CH,A ;左1红
; LJMP LOOP
SJMP LD1B
LD1: ;CJNE A,#1,LD2
MOV A,5CH
CLR ACC.6 ;左1大于34CM小于90CM则亮黄灯
CLR ACC.0
MOV 5CH,A
LD1B: JNB 05H,LD11
MOV A,5CH ; 左2红
CLR ACC.4
MOV 5CH,A
; LJMP LOOP
SJMP LD2B
LD11: MOV A,5CH ;关左2红
SETB ACC.4
MOV 5CH,A
LD11B:JNB 06H,LD12
MOV 5CH,A ;左2灭
SETB ACC.4
SETB ACC.3
MOV 5CH,A
; LJMP LOOP
SJMP LD2B
LD12:JNB 07H,LD2
MOV A,5CH
CLR ACC.3
MOV 5CH,A ;左2绿
; LJMP LOOP
SJMP LD2B
LD2: MOV A,5CH ;左2黄
CLR ACC.4
CLR ACC.3
MOV 5CH,A
; CJNE A,#2,LD3
LD2B: JNB 08H,LD21
MOV A,5CH ;右1红
CLR ACC.1
MOV 5CH,A
; LJMP LOOP
SJMP LD3B
LD21: MOV A,5CH ;关右1红
SETB ACC.1
MOV 5CH,A
LD21B: JNB 09H,LD22
MOV A,5CH ;右1灭
SETB ACC.1
SETB ACC.7
MOV 5CH,A
; LJMP LOOP
SJMP LD3B
LD22: JNB 0AH,LD3 ;右1绿
MOV A,5CH
CLR ACC.7
MOV 5CH,A
; LJMP LOOP
SJMP LD3B
LD3: ; CJNE A,#3,LD4
MOV A,5CH ;右1黄
CLR ACC.7
CLR ACC.1
MOV 5CH,A
LD3B: JNB 0BH,LD31
MOV A,5CH ;右2红
CLR ACC.2
MOV 5CH,A
; LJMP LOOP
SJMP LD4B
LD31: MOV A,5CH ;关右2红
SETB ACC.2
MOV 5CH,A
LD31B:JNB 0CH,LD32
MOV A,5CH ;右2灭
SETB ACC.2
SETB ACC.5
MOV 5CH,A
; LJMP LOOP
SJMP LD4B
LD32: JNB 0DH,LD4
MOV A,5CH ;右2绿
CLR ACC.5
MOV 5CH,A
; LJMP LOOP
LJMP LOOP
LD4: MOV A,5CH ;关右2绿
CLR ACC.5
CLR ACC.2
MOV 5CH,A
LJMP LOOP
LD4B: LJMP LOOP
; 入口条件:被除数在R4、R5中,除数在R7中。
;出口信息:OV=0 时,单字节商在R3中,OV=1 时溢出。
;影响资源:PSW、A、R3~R7 堆栈需求: 2字节
D457: CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV ;商溢出
RET
DV50: MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51: MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52: CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四舍五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53: INC R3
DV54: CLR OV
RET
;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
;出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
;影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节
DIVD: CLR C ;比较被除数和除数
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ;溢出
RET
DVD1: MOV B,#10H ;计算双字节商
DVD2: CLR C ;部分商和余数同时左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;计算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;结果判断
JC DVD3
MOV R2,A ;够减,存放新的余数
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)
MOV A,R4 ;将商移到R2R3中
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV ;设立成功标志
RET
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2: CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;处理完16bit
RET
YSZ1: MOV 5FH,#20
YSZZ: MOV 5EH,#250
DJNZ 5EH,$
DJNZ 5FH,YSZZ
RET
TIMER: PUSH ACC
PUSH PSW
CLR TR0
JNB 00H,HOP2
SETB P3.1
SJMP KKK
HOP2: JNB 01H,HOP1
CLR P3.1
SJMP KKK
HOP1: DJNZ 7EH,KKK
MOV 7EH,#2
DJNZ 7FH,KKK
CPL P3.1
MOV 7FH,7DH
KKK: JB P3.7,NEXT1
SETB P3.4
SETB P3.7
MOV A,31H
MOV DPTR,#BRT
MOVC A,@A+DPTR
JNB 02H,XS1
CLR ACC.5
XS1: MOV P1,A
NOP
CLR P3.3
SJMP BAK1
NEXT1: JB P3.3,NEXT2
SETB P3.3
SETB P3.7
MOV A,32H
MOV P1,A
NOP
CLR P3.4
SJMP BAK1
NEXT2: JB P3.4,NEXT3
SETB P3.3
SETB P3.4
MOV A,30H
MOV DPTR,#BRT
MOVC A,@A+DPTR
; JNB 02H,XS2
; CLR ACC.5
SETB ACC.5
XS2: MOV P1,A
NOP
CLR P3.7
SJMP BAK1
NEXT3:
BAK1: POP PSW
POP ACC
MOV TH0,#0FAH
MOV TL0,#0AAH
SETB TR0
RETI
BRT: DB 24H
DB 0EEH
DB 0B0H
DB 0A2H
DB 6AH
DB 23H
DB 21H
DB 0AEH
DB 20H
DB 2AH
DB 0FBH ;-
DB 39H ;F
DB 75H ;L
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -