📄 9821h621.lst
字号:
0869 0239 A241 GOTO L_CalcHeft43 ;[R_PubCnt3]≥80H 转
0870 023A 1290 DECF R_PubCnt3,1 ;[R_PubCnt3]-1->R_PubCnt3
0871 023B C204 BCF STATUS,C ;0->Cy
0872 023C 3E8A RRF R_PubReg3,1 ;\
0873 023D 3E89 RRF R_PubReg2,1 ; | [R_PubReg3:R_PubReg0]右移1位
0874 023E 3E88 RRF R_PubReg1,1 ; | ->R_PubReg3:R_PubReg0
0875 023F 3E87 RRF R_PubReg0,1 ;/
0876 0240 A234 GOTO L_CalcHeft4L1
0877 L_CalcHeft43:
0878 0241 4001 MOVLW 1
0879 0242 2284 MOVWF R_Count ;1->R_Count
0880 0243 8419 CALL S_RL1Bit ;[R_PubCnt3]+1->R_PubCnt3,[R_PubReg3:R_PubReg0]左移1位->R_PubReg3:R_PubReg0
0881 0244 A234 GOTO L_CalcHeft4L1
0882 L_DispHeft:
0883 0245 EA86 BTFSC R_PubFlag1,5
0884 0246 A24E GOTO L_DispHeft_11 ;[R_PubFlag1].5=1 (计量单位=lb) 转
0885 0247 4080 MOVLW 80H ;\
0886 0248 0488 ADDWF R_PubReg1,0 ; | 计量单位=kg,分度值=1
0887 0249 4000 MOVLW 0 ; | [R_PubReg3:R_PubReg2]+0.5
0888 024A 2689 ADDWFC R_PubReg2,1 ; | ->R_PubReg3:R_PubReg2
0889 024B 4000 MOVLW 0 ; | (四舍五入)
0890 024C 268A ADDWFC R_PubReg3,1 ;/
0891 024D A253 GOTO L_DispHeft_12
0892 L_DispHeft_11:
0893 024E 4001 MOVLW 1 ;\ 计量单位=lb,分度值=2
0894 024F 0689 ADDWF R_PubReg2,1 ; | [R_PubReg3:R_PubReg2]+1
0895 0250 4000 MOVLW 0 ; | ->R_PubReg3:R_PubReg2
0896 0251 268A ADDWFC R_PubReg3,1 ;/ (四舍五入)
0897 0252 C089 BCF R_PubReg2,0 ;0->R_PubReg2.0
0898 L_DispHeft_12:
0899 0253 4001 MOVLW D_DecimalDigits
0900 0254 22C9 MOVWF R_DispMode ;D_DecimalDigits(小数位数)->R_DispMode
0901 0255 D4C9 BSF R_DispMode,2 ;1->R_DispMode.2 显示计量单位
0902 0256 F286 BTFSS R_PubFlag1,1
0903 0257 A25F GOTO L_DispHeft_2 ;[R_PubFlag1].1=0(未锁定) 转
0904 0258 D8CF BSF R_DispFlag,4 ;[R_PubFlag1].1=1(称重数据锁定),1->R_DispFlag.4 显示锁符
0905 0259 40A0 MOVLW 0A0H
0906 025A 228E MOVWF R_PubCnt1 ;0A0H->R_PubCnt1,定时10秒
0907 025B 40C0 MOVLW 0C0H
0908 025C 2282 MOVWF R_WorkStatus ;0C0H->R_WorkStatus,2秒后关机
0909 025D C81C BCF NETE,ENVS ;0->NETE.ENVS 关VS输出
0910 025E C424 BCF PT2,2 ;0->PT2.2 关传感器电源
0911 L_DispHeft_2:
0912 025F 8521 CALL S_Hex2BCD ;将[R_PubReg3:R_PubReg2]转换为5位BCD码->R_DispBuff4:R_DispBuff0
0913 0260 A4A3 GOTO S_Display ;去显示
0914 L_CalcHeftRet:
0915 0261 0003 RETURN
0916 ;
0917 S_RdMinDispV: ;读最小显示值
0918 0262 0008 ADDPCW
0919 0263 4802 RETLW 2 ;D_P21=0,最小显示值=0.2KG
0920 0264 4804 RETLW 4 ;D_P21=1,最小显示值=0.4KG
0921 0265 4805 RETLW 5 ;D_P21=2,最小显示值=0.5KG
0922 0266 4808 RETLW 8 ;D_P21=3,最小显示值=0.8KG
0923 0267 480A RETLW 10 ;D_P21=4,最小显示值=1.0KG
0924 0268 480C RETLW 12 ;D_P21=5,最小显示值=1.2KG
0925 0269 480F RETLW 15 ;D_P21=6,最小显示值=1.5KG
0926 026A 4814 RETLW 20 ;D_P21=7,最小显示值=2.0KG
0927 026B 4819 RETLW 25 ;D_P21=8,最小显示值=2.5KG
0928 026C 4832 RETLW 50 ;D_P21=9,最小显示值=5.0KG
0929 ;
0930 L_DispOverErr: ;显示超载错误
0931 026D 8487 CALL S_ClrDisp
0932 026E 400F MOVLW 0FH
0933 026F 22CD MOVWF R_DispBuff3 ;0FH("F")->R_DispBuff3
0934 0270 22CC MOVWF R_DispBuff2 ;0FH("F")->R_DispBuff2
0935 0271 22CB MOVWF R_DispBuff1 ;0FH("F")->R_DispBuff1
0936 0272 22CA MOVWF R_DispBuff0 ;0FH("F")->R_DispBuff0
0937 0273 4008 MOVLW 08H
0938 0274 22C9 MOVWF R_DispMode ;08H->R_DispMode,无小数点,16进制显示方式
0939 0275 A4A3 GOTO S_Display ;去显示
0940 ;------------------------------------------------------------------------------
0941 L_CaliProc: ;标定处理
0942 0276 4080 MOVLW 80H
0943 0277 2ACF ANDWF R_DispFlag,1 ;0->R_DispFlag.6:0
0944 0278 E682 BTFSC R_WorkStatus,3
0945 0279 A2E8 GOTO L_CaliOver ;[R_WorkStatus].3=1(标定完成) 转
0946 027A EE92 BTFSC R_KeyStatus,7
0947 027B A284 GOTO L_CaliProc_1 ;[R_KeyStatus].7=1 转
0948 027C E892 BTFSC R_KeyStatus,4 ;[R_KeyStatus].7=0
0949 027D A2FC GOTO L_DispCaliCode ;[R_KeyStatus].4=1 转去显示内码
0950 027E 2093 MOVFW R_KeyCode
0951 027F 680F ANDLW 0FH
0952 0280 5806 SUBLW 06H
0953 0281 E004 BTFSC STATUS,Z
0954 0282 A30B GOTO L_DispDate ;[R_KeyCode].2:0=6("TARE"键按下)转去显示日期
0955 0283 A2FC GOTO L_DispCaliCode ;去显示内码
0956 L_CaliProc_1:
0957 0284 400C MOVLW 0CH
0958 0285 1893 SUBWF R_KeyCode,0
0959 0286 F004 BTFSS STATUS,Z
0960 0287 A2FB GOTO L_CaliProcRet ;[R_KeyCode]≠0CH(不是"Cali"键短键释放) 转,返回
0961 0288 4070 MOVLW 70H
0962 0289 2E92 IORWF R_KeyStatus,1 ;7->R_KeyStatus.7:4
0963 028A E082 BTFSC R_WorkStatus,0
0964 028B A29A GOTO L_CaliProc_3 ;[R_WorkStatus].0=1 转
0965 028C 209E MOVFW R_ZeroCodeL ;\
0966 028D 22D1 MOVWF R_CaliCode0L ; | [R_ZeroCodeH:R_ZeroCodeL]
0967 028E 209F MOVFW R_ZeroCodeH ; | ->R_CaliCode0H:R_CaliCode0L
0968 028F 22D2 MOVWF R_CaliCode0H ;/ 暂存零点内码
0969 0290 D082 BSF R_WorkStatus,0 ;1->R_WorkStatus.0
0970 0291 8487 CALL S_ClrDisp ;清显示,然后显示“0.0KG”
0971 L_CaliProc_2:
0972 0292 02CA CLRF R_DispBuff0 ;0->R_DispBuff0
0973 0293 02CB CLRF R_DispBuff1 ;0->R_DispBuff1
0974 0294 4005 MOVLW 05H
0975 0295 22C9 MOVWF R_DispMode ;05H->R_DispMode(显示计量单位、1位小数)
0976 0296 4010 MOVLW 10H
0977 0297 228E MOVWF R_PubCnt1 ;10H->R_PubCnt1,定时1秒
0978 0298 DE82 BSF R_WorkStatus,7 ;1->R_WorkStatus.7
0979 0299 A4A3 GOTO S_Display
0980 L_CaliProc_3:
0981 029A 40D1 MOVLW R_CaliCode0L
0982 029B 2202 MOVWF FSR0
0983 029C F282 BTFSS R_WorkStatus,1
0984 029D A2A4 GOTO L_CaliProc_31 ;[R_WorkStatus].1=0 转
0985 029E 0A02 INCF FSR0,1 ;[FSR0]+1->FSR
0986 029F 0A02 INCF FSR0,1 ;[FSR0]+1->FSR
0987 02A0 F482 BTFSS R_WorkStatus,2
0988 02A1 A2A4 GOTO L_CaliProc_31 ;[R_WorkStatus].2=0 转
0989 02A2 0A02 INCF FSR0,1 ;[FSR0]+1->FSR
0990 02A3 0A02 INCF FSR0,1 ;[FSR0]+1->FSR
0991 L_CaliProc_31:
0992 02A4 2000 MOVFW IND0
0993 02A5 2287 MOVWF R_PubReg0 ;[IND0]->R_PubReg0
0994 02A6 0A02 INCF FSR0,1 ;[FSR0]+1->FSR
0995 02A7 2000 MOVFW IND0
0996 02A8 2288 MOVWF R_PubReg1 ;[IND0]->R_PubReg1
0997 02A9 E482 BTFSC R_WorkStatus,2
0998 02AA A2B1 GOTO L_CaliProc_30 ;[R_WorkStatus].2=1(标定120KG) 转
0999 02AB 0A02 INCF FSR0,1 ;[FSR0]+1->FSR
1000 02AC 209E MOVFW R_ZeroCodeL
1001 02AD 2200 MOVWF IND0 ;保存标定内码低字节
1002 02AE 0A02 INCF FSR0,1 ;[FSR0]+1->FSR
1003 02AF 209F MOVFW R_ZeroCodeH
1004 02B0 2200 MOVWF IND0 ;保存标定内码高字节
1005 L_CaliProc_30:
1006 02B1 209E MOVFW R_ZeroCodeL ;\
1007 02B2 228B MOVWF R_PubReg4 ; | [R_ZeroCodeH:R_ZeroCodeL]
1008 02B3 209F MOVFW R_ZeroCodeH ; | ->R_PubReg5:R_PubReg4
1009 02B4 228C MOVWF R_PubReg5 ;/
1010 02B5 83F7 CALL S_CalcABS ;计算[R_PubReg5:R_PubReg4]-[R_PubReg1:R_PubReg0]绝对值->R_PubReg5:R_PubReg4
1011 02B6 E686 BTFSC R_PubFlag1,3
1012 02B7 A2FB GOTO L_CaliProcErr ;[R_PubFlag1].3=1(减法结果为负数) 转 标定错误处理
1013 02B8 4090 MOVLW 90H ;\
1014 02B9 2289 MOVWF R_PubReg2 ; | 0190H->R_PubReg3:R_PubReg2
1015 02BA 4001 MOVLW 01H ; | 400->R_PubReg3:R_PubReg2
1016 02BB 228A MOVWF R_PubReg3 ;/
1017 02BC 208B MOVFW R_PubReg4
1018 02BD 1889 SUBWF R_PubReg2,0
1019 02BE 208C MOVFW R_PubReg5
1020 02BF 388A SUBWFC R_PubReg3,0
1021 02C0 E204 BTFSC STATUS,C
1022 02C1 A2FB GOTO L_CaliProcErr ;[R_PubReg3:R_PubReg2]≥[R_PubReg5:R_PubReg4] 转,返回
1023 02C2 8505 CALL S_Divis ;[R_PubReg3:R_PubReg2]×65536÷[R_PubReg5:R_PubReg4]->R_PubReg1:R_PubReg0
1024 02C3 EE88 BTFSC R_PubReg1,7
1025 02C4 A2FB GOTO L_CaliProcErr ;[R_PubReg1]≥80H(每个内码对应的重量≥0.5d) 转,返回
1026 02C5 E482 BTFSC R_WorkStatus,2
1027 02C6 A2DD GOTO L_CaliProc_33 ;[R_WorkStatus].2=1(标定120KG) 转
1028 02C7 E282 BTFSC R_WorkStatus,1
1029 02C8 A2D4 GOTO L_CaliProc_32 ;[R_WorkStatus].1=1(标定80KG) 转
1030 02C9 F082 BTFSS R_WorkStatus,0
1031 02CA A2FB GOTO L_CaliProcErr ;[R_WorkStatus].0=0(不是标定40KG) 转
1032 02CB 2087 MOVFW R_PubReg0 ;\
1033 02CC 22D7 MOVWF R_CaliData1L ; | [R_PubReg1:R_PubReg0]->R_CaliData1H:R_CaliData1L
1034 02CD 2088 MOVFW R_PubReg1 ; | 保存 40KG 标定数据
1035 02CE 22D8 MOVWF R_CaliData1H ;/
1036 02CF 8487 CALL S_ClrDisp
1037 02D0 4004 MOVLW 04H
1038 02D1 22CC MOVWF R_DispBuff2 ;4->R_DispBuff2 ;显示“40.0KG”
1039 02D2 D282 BSF R_WorkStatus,1 ;1->R_WorkStatus.1
1040 02D3 A292 GOTO L_CaliProc_2
1041 L_CaliProc_32:
1042 02D4 2087 MOVFW R_PubReg0 ;\
1043 02D5 22D9 MOVWF R_CaliData2L ; | [R_PubReg1:R_PubReg0]->R_CaliData2H:R_CaliData2L
1044 02D6 2088 MOVFW R_PubReg1 ; | 保存 80KG 标定数据
1045 02D7 22DA MOVWF R_CaliData2H ;/
1046 02D8 8487 CALL S_ClrDisp
1047 02D9 4008 MOVLW 08H
1048 02DA 22CC MOVWF R_DispBuff2 ;8->R_DispBuff2 ;显示“80.0KG”
1049 02DB D482 BSF R_WorkStatus,2 ;1->R_WorkStatus.2
1050 02DC A292 GOTO L_CaliProc_2
1051 L_CaliProc_33:
1052 02DD 2087 MOVFW R_PubReg0 ;\
1053 02DE 22DB MOVWF R_CaliData3L ; | [R_PubReg1:R_PubReg0]->R_CaliData3H:R_CaliData3L
1054 02DF 2088 MOVFW R_PubReg1 ; | 保存 120KG 标定数据
1055 02E0 22DC MOVWF R_CaliData3H ;/
1056 02E1 8487 CALL S_ClrDisp
1057 02E2 4002 MOVLW 02H
1058 02E3 22CC MOVWF R_DispBuff2 ;2->R_DispBuff2
1059 02E4 4001 MOVLW 01H
1060 02E5 22CD MOVWF R_DispBuff3 ;1->R_DispBuff3 ;显示“120.0KG”
1061 02E6 D682 BSF R_WorkStatus,3 ;1->R_WorkStatus.3
1062 02E7 A292 GOTO L_CaliProc_2
1063 ;
1064 L_CaliOver: ;标定完成处理
1065 02E8 8487 CALL S_ClrDisp ;清LCD显示缓冲区LCD1-LCD6
1066 02E9 40A5 MOVLW D_CaliMark
1067 02EA 22DD MOVWF R_CaliFlag ;D_CaliMark->R_CaliFlag
1068 02EB 85E9 CALL S_WrCaliData ;将[R_CaliChksumH:R_CaliPara]的8个16位数据写入到93LC46的00H-07H中
1069 02EC 4020 MOVLW 20H
1070 02ED 228E MOVWF R_PubCnt1 ;20H->R_PubCnt1,定时2秒
1071 02EE 40C1 MOVLW 0C1H
1072 02EF 2282 MOVWF R_WorkStatus ;0C1H->R_WorkStatus,显示版本号2秒后再显示修改日期2秒后关机。
1073 02F0 4015 MOVLW 15H ;"H" ;\
1074 02F1 22CD MOVWF R_DispBuff3 ;15H("H")->R_DispBuff3 ; |
1075 02F2 4006 MOVLW 06H ; | 显示版本号
1076 02F3 22CC MOVWF R_DispBuff2 ;06H("6")->R_DispBuff2 ; | "H621 "
1077 02F4 4002 MOVLW 02H ; |
1078 02F5 22CB MOVWF R_DispBuff1 ;02H("2")->R_DispBuff1 ; |
1079 02F6 4001 MOVLW 01H ; |
1080 02F7 22CA MOVWF R_DispBuff0 ;01H("0")->R_DispBuff0 ;/
1081 02F8 4008 MOVLW 08H
1082 02F9 22C9 MOVWF R_DispMode ;08H->R_DispMode,无小数点,16进制显示方式
1083 02FA A4A3 GOTO S_Display ;去显示
1084 L_CaliProcErr: ;标定
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -