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