📄 9821h620.lst
字号:
0905 L_DispCaliP_0:
0906 0260 F491 BTFSS R_TimerCnt,2
0907 0261 A269 GOTO L_DispCaliPara ;[R_TimerCnt].2=0 转 显示标定参数
0908 0262 208E MOVFW R_PubCnt1
0909 0263 6803 ANDLW 03H
0910 0264 58CD SUBLW R_DispBuff3
0911 0265 2202 MOVWF FSR0
0912 0266 4010 MOVLW 10H ;" "
0913 0267 2200 MOVWF IND0 ;10H(" ")->IND0
0914 0268 A27E GOTO L_DispCaliPa_1
0915 L_DispCaliPara: ;显示当前标定的参数
0916 0269 3C8E RRF R_PubCnt1,0
0917 026A 3C05 RRF WORK,0
0918 026B 3C05 RRF WORK,0
0919 026C 6806 ANDLW 06H
0920 026D 44D0 ADDLW R_CaliMarkL
0921 026E 2202 MOVWF FSR0 ;根据[R_PubCnt1].5:4计算出当前参数的地址->FSR0
0922 026F 2000 MOVFW IND0
0923 0270 680F ANDLW 0FH
0924 0271 22CA MOVWF R_DispBuff0
0925 0272 2000 MOVFW IND0
0926 0273 833A CALL S_RR4Work ;[WORK]右移4位->WORK,0->WORK.7:4
0927 0274 22CB MOVWF R_DispBuff1
0928 0275 0A02 INCF FSR0,1
0929 0276 2000 MOVFW IND0
0930 0277 680F ANDLW 0FH
0931 0278 22CC MOVWF R_DispBuff2
0932 0279 2000 MOVFW IND0
0933 027A 833A CALL S_RR4Work ;[WORK]右移4位->WORK,0->WORK.7:4
0934 027B 22CD MOVWF R_DispBuff3
0935 027C 4010 MOVLW 10H
0936 027D 22CE MOVWF R_DispBuff4 ;10H(" ")->R_DispBuff4
0937 L_DispCaliPa_1:
0938 027E 4008 MOVLW 08H
0939 027F 22C9 MOVWF R_DispMode ;08H->R_DispMode,无小数点,16进制显示方式
0940 0280 A4C0 GOTO S_Display ;去显示
0941 ;
0942 L_SeleParaBit: ;"TARE"键按下,选择标定数据位
0943 0281 0A8E INCF R_PubCnt1,1 ;[R_PubCnt1]+1->R_PubCnt1
0944 0282 C48E BCF R_PubCnt1,2 ;0->R_PubCnt1.2,[R_PubCnt1]=0-3
0945 0283 A269 GOTO L_DispCaliPara ;去显示当前标定的参数
0946 ;
0947 L_AdjustPara: ;UNIT"键按下或"OFF"短键释放,调整标定值
0948 0284 3C8E RRF R_PubCnt1,0
0949 0285 3C05 RRF WORK,0
0950 0286 3C05 RRF WORK,0
0951 0287 6806 ANDLW 06H
0952 0288 44D0 ADDLW R_CaliMarkL
0953 0289 2202 MOVWF FSR0 ;根据[R_PubCnt1].5:4计算出当前参数的地址->FSR0
0954 028A F28E BTFSS R_PubCnt1,1
0955 028B 0A02 INCF FSR0,1
0956 028C 400F MOVLW 0FH ;0FH->WORK
0957 028D F08E BTFSS R_PubCnt1,0
0958 028E 40F0 MOVLW 0F0H ;[R_PubCnt1].0=0,0F0H->WORK
0959 028F 2288 MOVWF R_PubReg1 ;[WORK]->R_PubReg1
0960 0290 4001 MOVLW 01H ;01H->WORK
0961 0291 F08E BTFSS R_PubCnt1,0
0962 0292 4010 MOVLW 10H ;[R_PubCnt1].0=0,10H->WORK
0963 0293 0600 ADDWF IND0,1 ;[IND0]+[WORK]->IND0
0964 0294 F08E BTFSS R_PubCnt1,0
0965 0295 A29C GOTO L_AdjPara_1 ;[R_PubCnt1].0=0 转
0966 0296 2000 MOVFW IND0 ;[R_PubCnt1].1=1
0967 0297 680F ANDLW 0FH
0968 0298 F004 BTFSS STATUS,Z
0969 0299 A29C GOTO L_AdjPara_1 ;[IND0].3:0>0 转
0970 029A 4010 MOVLW 10H
0971 029B 1A00 SUBWF IND0,1 ;[IND0]-10H->IND0
0972 L_AdjPara_1:
0973 029C 40D0 MOVLW R_CaliMarkL
0974 029D 1802 SUBWF FSR0,0
0975 029E 8333 CALL S_RdParaMaxV ;读出当前参数的最大值
0976 029F 2888 ANDWF R_PubReg1,0
0977 02A0 2287 MOVWF R_PubReg0
0978 02A1 2088 MOVFW R_PubReg1
0979 02A2 2800 ANDWF IND0,0
0980 02A3 1887 SUBWF R_PubReg0,0
0981 02A4 E204 BTFSC STATUS,C
0982 02A5 A269 GOTO L_DispCaliPara ;当前设定的参数未超过最大值,去显示当前标定的参数
0983 02A6 1C88 COMF R_PubReg1,0
0984 02A7 2A00 ANDWF IND0,1 ;超过最大值,当前设定值清0
0985 02A8 A269 GOTO L_DispCaliPara ;当前设定的参数未超过最大值,去显示当前标定的参数
0986 ;
0987 L_CaliNextPara: ;"OFF"键按下2秒,进入下一个项目
0988 02A9 D892 BSF R_KeyStatus,4 ;1->R_KeyStatus.4
0989 02AA DA92 BSF R_KeyStatus,5 ;1->R_KeyStatus.5
0990 02AB 40F0 MOVLW 0F0H
0991 02AC 288E ANDWF R_PubCnt1,0
0992 02AD E004 BTFSC STATUS,Z
0993 02AE 82F1 CALL S_CaliCodeProc ;[R_PubCnt1].7:4=0 处理重量标定数据
0994 02AF 4020 MOVLW 20H
0995 02B0 188E SUBWF R_PubCnt1,0
0996 02B1 E204 BTFSC STATUS,C
0997 02B2 A2B8 GOTO L_CaliParaOver ;[R_PubCnt1].7:4≥2 转 标定完成处理
0998 02B3 208E MOVFW R_PubCnt1
0999 02B4 4410 ADDLW 10H
1000 02B5 6830 ANDLW 30H
1001 02B6 228E MOVWF R_PubCnt1
1002 02B7 A269 GOTO L_DispCaliPara ;去显示下一个标定参数
1003 L_CaliParaOver: ;标定完成处理
1004 02B8 84A4 CALL S_ClrDisp ;清LCD显示缓冲区LCD1-LCD6
1005 02B9 405A MOVLW D_CaliMark1
1006 02BA 22D8 MOVWF R_CaliParaFlag ;D_CaliMark1->R_CaliParaFlag
1007 02BB 8612 CALL S_WrCaliData ;将[R_CaliChksumH:R_CaliMarkL]的8个16位数据写入到93LC46的00H-07H中
1008 02BC 4020 MOVLW 20H
1009 02BD 228E MOVWF R_PubCnt1 ;20H->R_PubCnt1,定时2秒
1010 02BE 40C0 MOVLW 0C0H
1011 02BF 2282 MOVWF R_WorkStatus ;0C0H->R_WorkStatus,2秒后关机。
1012 02C0 4015 MOVLW 15H ;"H" ;\
1013 02C1 22CE MOVWF R_DispBuff4 ;15H("H")->R_DispBuff4 ; |
1014 02C2 4006 MOVLW 06H ; | 显示版本号
1015 02C3 22CD MOVWF R_DispBuff3 ;06H("6")->R_DispBuff3 ; | "H620 "
1016 02C4 4002 MOVLW 02H ; |
1017 02C5 22CC MOVWF R_DispBuff2 ;02H("2")->R_DispBuff2 ; |
1018 02C6 4000 MOVLW 00H ; |
1019 02C7 22CB MOVWF R_DispBuff1 ;00H("0")->R_DispBuff1 ;/
1020 02C8 4008 MOVLW 08H
1021 02C9 22C9 MOVWF R_DispMode ;08H->R_DispMode,无小数点,16进制显示方式
1022 02CA A4C0 GOTO S_Display ;去显示
1023 L_CaliProcRet:
1024 02CB 0003 RETURN
1025 ;
1026 S_DispCaliCode: ;显示内码
1027 L_DispCaliCode: ;显示内码
1028 02CC F885 BTFSS R_PubFlag0,4
1029 02CD A2CB GOTO L_CaliProcRet ;[R_PubFlag0].4=0(未得到新的有效内码) 转,返回
1030 02CE C6CF BCF R_DispFlag,3 ;0->R_DispFlag.3
1031 02CF EA85 BTFSC R_PubFlag0,5
1032 02D0 D6CF BSF R_DispFlag,3 ;[R_PubFlag0].5=1(称重数据稳定),1->R_DispFlag.3 显示锁符
1033 ; MOVLW 1
1034 ; CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
1035 ; MOVFW R_PubReg0 ;\
1036 ; MOVWF R_PubReg2 ; | [R_PubReg1:R_PubReg0]
1037 ; MOVFW R_PubReg1 ; | ->R_PubReg3:R_PubReg2
1038 ; MOVWF R_PubReg3 ;/
1039 02D1 209A MOVFW R_LastAverageL ;\
1040 02D2 2289 MOVWF R_PubReg2 ; | [R_LastAverageH:R_LastAverageL]
1041 02D3 209B MOVFW R_LastAverageH ; | ->R_PubReg3:R_PubReg2
1042 02D4 228A MOVWF R_PubReg3 ;/
1043 02D5 8546 CALL S_Hex2BCD ;将[R_PubReg3:R_PubReg2]转换为5位BCD码->R_DispBuff4:R_DispBuff0
1044 02D6 4008 MOVLW 08H
1045 02D7 22C9 MOVWF R_DispMode ;08H->R_DispMode,无小数点,16进制显示方式
1046 02D8 E691 BTFSC R_TimerCnt,3
1047 02D9 D0C9 BSF R_DispMode,0
1048 02DA A4C0 GOTO S_Display ;去显示
1049 ;
1050 L_DispDate: ;显示日期
1051 02DB 4000 MOVLW D_MonthH ;修改日期的月十位
1052 02DC 22CE MOVWF R_DispBuff4 ;->R_DispBuff4
1053 02DD 4009 MOVLW D_MonthL ;修改日期的月个位
1054 02DE 22CD MOVWF R_DispBuff3 ;->R_DispBuff3
1055 02DF 4011 MOVLW 11H
1056 02E0 22CC MOVWF R_DispBuff2 ;11H("-")->R_DispBuff2
1057 02E1 4002 MOVLW D_DayH ;修改日期的日十位
1058 02E2 22CB MOVWF R_DispBuff1 ;->R_DispBuff1
1059 02E3 4005 MOVLW D_DayL ;修改日期的日个位
1060 02E4 22CA MOVWF R_DispBuff0 ;->R_DispBuff0
1061 02E5 02C9 CLRF R_DispMode ;0->R_DispMode,无小数点,10进制数显示
1062 02E6 A4C0 GOTO S_Display ;去显示
1063 ;------------------------------------------------------------------------------
1064 L_OFF_Proc: ;关机处理
1065 02E7 0207 CLRF INTE ;关所有中断
1066 02E8 84A4 CALL S_ClrDisp ;清LCD显示缓冲区LCD1-LCD6
1067 02E9 CA54 BCF LCDENR,LCDEN ;关LCD输出
1068 L_OFF_Wait:
1069 02EA 4000 MOVLW 00H
1070 02EB 2224 MOVWF PT2 ;07H->PT2
1071 02EC 4000 MOVLW 00H
1072 02ED 2220 MOVWF PT1 ;00H->PT1
1073 02EE 0000 NOP
1074 02EF A2EA GOTO L_OFF_Wait
1075 02F0 0003 RETURN
1076 ;------------------------------------------------------------------------------
1077 ;子程序S_CaliCodeProc ;[R_PubCnt1].7:4=0 处理重量标定数据
1078 ;Input: R_CaliMarkH:R_CaliMarkL
1079 ; R_CaliCode0H:R_CaliCode0L
1080 ; R_SteadyCodeH:R_SteadyCodeL
1081 ;Output: R_CaliDataH:R_CaliDataL
1082 ;Call: S_AddSub1,S_Mul2Sub1
1083 ; S_CalcABS
1084 ; S_Divis
1085 ;Use RAM: WORK,R_Count,R_PubCnt0
1086 ; R_PubReg1:R_PubReg0,R_PubReg3:R_PubReg2,R_PubReg5:R_PubReg4
1087 S_CaliCodeProc:
1088 02F1 20D0 MOVFW R_CaliMarkL ;\
1089 02F2 2287 MOVWF R_PubReg0 ; | [R_CaliMarkH:R_CaliMarkL]
1090 02F3 20D1 MOVFW R_CaliMarkH ; | ->R_PubReg1:R_PubReg0
1091 02F4 2288 MOVWF R_PubReg1 ;/
1092 S_CaliCodeComm: ;标定时计算每个内码相当于重量的分度数×65536->R_CaliDataH:R_CaliDataL
1093 02F5 2088 MOVFW R_PubReg1
1094 02F6 68FF ANDLW 0FFH
1095 02F7 E004 BTFSC STATUS,Z
1096 02F8 A329 GOTO L__CaliCodeP_Ret ;[R_PubReg1]=0(标定分度值<1000) 转,返回
1097 ;下面的程序将4位BCD码[R_PubReg1:R_PubReg0]转换为二进制数->R_PubReg3:R_PubReg2
1098 02F9 0289 CLRF R_PubReg2 ;0->R_PubReg2
1099 02FA 028A CLRF R_PubReg3 ;0->R_PubReg3
1100 02FB 4004 MOVLW 4
1101 02FC 228D MOVWF R_PubCnt0 ;4->R_PubCnt0
1102 L_BCD2HexLoop:
1103 02FD 028B CLRF R_PubReg4 ;0->R_PubReg4
1104 02FE 028C CLRF R_PubReg5 ;0->R_PubReg5
1105 02FF 4004 MOVLW 4
1106 0300 2284 MOVWF R_Count ;4->R_Count
1107 L_BCD2HexL_1:
1108 0301 3687 RLF R_PubReg0,1
1109 0302 3688 RLF R_PubReg1,1
1110 0303 368B RLF R_PubReg4,1
1111 0304 1684 DECFSZ R_Count,1
1112 0305 A301 GOTO L_BCD2HexL_1
1113 ;
1114 0306 832A CALL S_AddSub1 ;[R_PubReg3:R_PubReg2]+[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg2
1115 0307 832F CALL S_Mul2Sub1 ;[R_PubReg3:R_PubReg2]×2->R_PubReg3:R_PubReg2
1116 0308 2089 MOVFW R_PubReg2 ;\
1117 0309 228B MOVWF R_PubReg4 ; | [R_PubReg3:R_PubReg2]
1118 030A 208A MOVFW R_PubReg3 ; | ->R_PubReg5:R_PubReg4
1119 030B 228C MOVWF R_PubReg5 ;/
1120 030C 832F CALL S_Mul2Sub1 ;[R_PubReg3:R_PubReg2]×2->R_PubReg3:R_PubReg2
1121 030D 832F CALL S_Mul2Sub1 ;[R_PubReg3:R_PubReg2]×2->R_PubReg3:R_PubReg2
1122 030E 832A CALL S_AddSub1 ;[R_PubReg3:R_PubReg2]+[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg2
1123 ; 以上17行相当于[R_PubReg3:R_PubReg2]×10
1124 L_BCD2Hex_Next:
1125 030F 168D DECFSZ R_PubCnt0,1
1126 0310 A2FD GOTO L_BCD2HexLoop
1127 ;上面的程序将4位BCD码[R_PubReg1:R_PubReg0]转换为二进制
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -