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