📄 mnapp.asm
字号:
; mov a,countfreql4
; add countfreql,a
; mov a,countfreqh4
; adc countfreqh,a
mov a,#countfreql1$m
mov ww0,a
mov a,#countfreql1$l
mov ww1,a
mov a,#3
mov temp9,a
call givemm
mov a,temp0
mov countfreql,a
mov a,temp1
mov countfreqh,a
b0bclr fc
rrcm countfreqh
rrcm countfreql
humidretp25:
b0bclr t250msflag
b0bclr firsrecflag
b0bclr firsrecflag2
b0bset humidcomflag
b0bclr fc
rlcm countfreql
rlcm countfreqh
b0bclr fc
rlcm countfreql
rlcm countfreqh
mov a,#0ch ;260ch=9740
sub a,countfreql ;FOUT=9740-18*RH
mov r0,a
mov a,#26h
sbc a,countfreqh
mov r1,a
mov a,#18
mov r2,a
clr r3
call DIV_HEX2B
mov a,r5
mov r2,a
call CHA_HEXD1BTOBCD
mov a,r2
mov humid_dis_d,a
mov a,r6
mov r0,a
call CHA_HEX1BTOBCD
mov a,r2
mov humid_dis_i,a
b0bclr temphumiflag
b0bts1 humidfirflag
jmp humidretp40
mov a,humid_dis_iold
sub a,humid_dis_i
b0bts1 fc
jmp humidretp30
sub a,#2
b0bts1 fc
jmp humidretp39
jmp humidretp35
humidretp30:
mov a,humid_dis_i
sub a,humid_dis_iold
sub a,#2
b0bts1 fc
jmp humidretp39
humidretp35:
mov a,humidcount
sub a,#6
b0bts0 fc
jmp humidretp39
incms humidcount
nop
mov a,humid_dis_iold
mov humid_dis_i,a
mov a,humid_dis_dold
mov humid_dis_d,a
jmp humidretp40
humidretp39:
clr humidcount
humidretp40:
b0mov y,#lcdstable$m
b0mov z,#lcdstable$l
swap humid_dis_i
and a,#0fh
add z,a
movc
mov seg7,a
mov a,r
or a,#10000000b
mov seg8,a
b0mov y,#lcdstable$m
b0mov z,#lcdstable$l
mov a,humid_dis_i
and a,#0fh
add z,a
movc
mov seg9,a
mov a,r
or a,#10000000b
mov seg10,a
b0mov y,#lcdstable$m
b0mov z,#lcdstable$l
mov a,humid_dis_d
and a,#0fh
add z,a
movc
mov seg11,a
mov a,r
or a,#10000000b
mov seg12,a
mov a,humid_dis_i
mov humid_dis_iold,a
mov a,humid_dis_d
mov humid_dis_dold,a
b0bts1 startdisflag
jmp humidretp80
b0bset humidfirflag
humidretp80:
b0bset startdisflag
humidretp90:
ret
;*********************************************************************************
;NAME: DIV_HEX2B
;INPUT: 被除数放在R1,R0(R1R0)中,除数放在R3,R2(R3R2)中
;FUNCTION: 二进制双字节除法
;DESCRIBE: (R7R6.R5R4)=(R1R0)÷(R3R2)
; 选取:DIV_HEX2B_KEY EQU 1
;CALL SUBPROGRAM: CPL_FC
;USING RESOURCE: A,R0~R7,WK00
;STACK NEED: 1
;OUTPUT: 商的整数放在R7、R6中,商的小数放在R5,R4中(R7R6.R5R4)
;ROM SIZE: 65+(6) BYTE
;*****************************************************************
DIV_HEX2B:
MOV A,#0
B0MOV R7,A
B0MOV R6,A
B0MOV R5,A
B0MOV R4,A
OR A,R2
OR A,R3
B0BTS0 FZ ;If acc==0,then FZ=1
RET ;Acc=0
DIV_HEX2B10: ;整数部分求解
MOV_ WK00,#16
B0BCLR FC
DIV_HEX2B20:
RLCM R0
RLCM R1
RLCM R6
RLCM R7
;CPL_F FC ;注意CY标志位
; CALL CPL_FC ;MODIFY BY CHENZG IN 04/05/09
MOV A,R6
; Sbc A,R2
Sub A,R2
B0MOV R6,A
MOV A,R7
SBC A,R3
B0MOV R7,A
B0BTS0 FC
JMP DIV_HEX2B30 ;CY==1
MOV A,R2 ;CY==0
ADd R6,A
MOV A,R3
ADC R7,A
;CPL_F FC ;MODIFY BY CHENZG IN 04/05/09
CALL CPL_FC
; b0bclr fc
DIV_HEX2B30:
DJNZ WK00,DIV_HEX2B20
B0MOV A,R0
B0XCH A,R6
B0MOV R0,A
B0MOV A,R1
B0XCH A,R7
B0MOV R1,A
RLCM R6 ;INT PART
RLCM R7
;---------------------------------------------------------------------------------
MOV_ WK00,#16
DIV_HEX2B40: ;小数部分求解
RLCM R4
RLCM R5
RLCM R0
RLCM R1
;CPL_F FC ;注意CY标志位
; CALL CPL_FC ;MODIFY BY CHENZG IN 04/05/09
B0MOV A,R0
Sub A,R2
B0MOV R0,A
B0MOV A,R1
SBC A,R3
B0MOV R1,A
B0BTS0 FC
JMP DIV_HEX2B50 ;CY==1
B0MOV A,R2 ;CY==0
ADD R0,A
B0MOV A,R3
ADC R1,A
b0bclr fc
;CPL_F FC
; CALL CPL_FC ;MODIFY BY CHENZG IN 04/05/09
DIV_HEX2B50:
DJNZ WK00,DIV_HEX2B40
RLCM R4 ;DOT PART
RLCM R5
RET
;*********************************************************************************
;NAME: CPL_FC
;INPUT: FC
;FUNCTION: FC=/FC
;DESCRIBE: NONE
;CALL SUBPROGRAM: NONE
;USING RESOURCE: FC
;STACK NEED: 0
;OUTPUT: /FC
;*********************************************************************************
CPL_FC:
BTS0 FC
JMP CPL_FC30
BSET FC
JMP CPL_FC90
CPL_FC30:
BCLR FC
CPL_FC90:
RET
;*********************************************************************************
;NAME: CHA_HEX1BTOBCD
;INPUT: R0(HEX)
;FUNCTION: 单字节十六进制数转换为BCD
;DESCRIBE: (R0)hex->(R1R2)bcd
; 选取:CHA_HEX1BTOBCD_KEY EQU 1
;CALL SUBPROGRAM: NONE
;USING RESOURCE: A,R0,R1,R2
;STACK NEED: 0
;OUTPUT: R1(空位,百位),R2(十位,个位)
;*********************************************************************************
CHA_HEX1BTOBCD:
CLR R1
CLR R2
BCD1B10:
MOV A,R0
SUB A,#100
B0BTS1 FC
JMP BCD1B20
MOV R0,A
INCMS R1
NOP
JMP BCD1B10
BCD1B20:
BCD1B30:
MOV A,R0
SUB A,#10
B0BTS1 FC
JMP BCD1B40
MOV R0,A
INCMS R2
nop
JMP BCD1B30
BCD1B40:
SWAPM R2
MOV A,R0
OR R2,A
BCD1B90:
RET
;*********************************************************************************
;NAME: CHA_HEXD1BTOBCD
;INPUT: R2(HEX)
;FUNCTION: 十六进制数小数转换为BCD小数
;DESCRIBE: (.R2)hex->(.R2)bcd
; 选取:CHA_HEXD2BTOBCD_KEY EQU 1
; 快速乘法(ROM较多): FAST_CALCULATE EQU 1
;CALL SUBPROGRAM: NONE
;USING RESOURCE: A,R0~R7,R,WK00,WK01,Y,Z
;STACK NEED: 0
;OUTPUT: 压缩BCD:R2(十分位,百分位)
;**********************************************************
CHA_HEXD1BTOBCD:
MOV_ R0,#9
MOV_ WK00,R2 ;L
CLR R
CHA_HEXD1BTOBCD30:
B0MOV A,WK00
ADD R2,A
MOV A,#00
ADC R,A
DJNZ R0,CHA_HEXD1BTOBCD30
MOV A,R
mov r2,a
CHA_HEXD1BTOBCD90:
RET
;*****************************************************
;去最大最小值
;比较块的首址ww0,ww1,比较次数temp9,temp5,求和结果放temp1,temp0(l)
;min:temp0,temp1
;max:temp2,temp3
givemm:
@rst_wdt
mov a,temp9
mov temp5,a
mov a,ww0
mov y,a
mov a,ww1
mov z,a
mov r6,a
mov r7,a
mov a,@yz
mov temp2,a
mov temp0,a
incms z
jmp givemm400
incms y
nop
givemm400:
mov a,@yz
mov temp3,a
mov temp1,a
givemmlop:
incms z
jmp givemm420
incms y
nop
givemm420:
mov a,@yz
mov WK00,a
incms z
jmp givemm430
incms y
nop
givemm430:
mov a,@yz
mov WK01,a
mov a,WK00
sub a,temp2
mov a,WK01
sbc a,temp3
b0bts1 fc
jmp givemm460
givemm450:
decs z
nop
mov r6,a
MOV_ temp3,WK01 ;保存最大值
MOV_ temp2,WK00
;----------------------------------------------------------
givemm460:
mov a,WK00
sub a,temp0
mov a,WK01
sbc a,temp1
b0bts0 fc
jmp givemm485
givemm480:
decs z
nop
mov r7,a
MOV_ temp1,WK01 ;保存最小值
MOV_ temp0,WK00
givemm485:
decms temp9
jmp givemmlop
b0mov y,#00h
mov a,r6
b0mov z,a
clr @yz
incms z
nop
clr @yz
mov a,r7
b0mov z,a
clr @yz
incms z
nop
clr @yz
mov a,ww0
mov y,a
mov a,ww1
mov z,a
mov a,@yz
mov temp0,a
incms z
nop
mov a,@yz
mov temp1,a
sumlop:
incms z
nop
mov a,@yz
add temp0,a
incms z
nop
mov a,@yz
adc temp1,a
decms temp5
jmp sumlop
givemm90:
ret
RxTable:
dw 022bh; 02bbh ;0~10
dw 021bh; 029eh
dw 0212h; 0282h ;2
dw 0203h; 0267h
dw 01f9h; 024eh
dw 01ddh; 0235h ;5
dw 01d5h; 021eh
dw 01cah; 0208h
dw 01beh; 01f2h ;8
dw 01a9h; 01deh
dw 01a1h; 01cbh ;10
dw 018eh; 01b9h ;11~20
dw 017eh; 01a7h
dw 0172h; 0197h
dw 0162h; 0187h ;14
dw 015ah; 0177h
dw 014fh; 0169h
dw 0147h; 015bh ;17
dw 013fh; 014eh
dw 0136h; 0141h
dw 012ah; 0135h ;20
dw 0120h; 0129h ;21~30
dw 0114h; 011eh ;22
dw 010dh; 0113h ;23
dw 0107h; 0109h
dw 00fch; 0100h ;25
dw 00f5h; 00f5h
dw 00efh; 00ech
dw 00e4h; 00e4h ;28
dw 00d9h; 00dbh
dw 00d3h; 00d3h
dw 00cdh; 00cch ;31~40
dw 00c6h; 00c9h
dw 00bfh; 00c0h
dw 00b9h; 00bdh ;34
dw 00b4h; 00b8h
dw 00afh; 00b1h
dw 00a9h; 00a9h ;37
dw 00a3h; 00a4h
dw 009eh; 0099h
dw 0099h; 0094h ;40
dw 0094h; 008fh ;41
dw 0088h; 008ah
;***********************************************
lcdwtable: ;abcfged
dw 0e0b0h ;0
dw 6000h ;1 ;00a0h
dw 0c070h ;2
dw 0e050h ;3
dw 60c0h ;4
dw 0a0d0h ;5
dw 0a0f0h ;6
dw 0e000h ;7
dw 0e0f0h ;8
dw 0e0d0h ;9
;***********************************************
lcdstable: ;cbadegf
dw 70d0h ;0
dw 6000h ;1 ;0050h
dw 30e0h ;2
dw 70a0h ;3
dw 6030h ;4
dw 50b0h ;5
dw 50f0h ;6
dw 7000h ;7
dw 70f0h ;8
dw 70b0h ;9
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -