?? 9821h621.lst
字號:
FASM v4.02.07
line--addr--code----instruction-------------------------------------
0001 ;Project: FS9821韓國人體秤
0002 ;FileName: 9821H621.ASM
0003 ;Ver: H621
0004 ;Body: Fortune FS9821
0005 ;Author: kangguang
0006 ;Modify Date: 2004-12-01
0007 ;韓國人體秤0.9d或1.8d歸零;0.4KG以下顯示為0;自動關機時間為10秒。
0008 ;==============================================================================
0009 include FS9821.inc ;FS9821特殊功能寄存器定義(00H-7FH)
0010 ;------------------------------------------------------------------------------
0011 ;常數定義
0012 D_DayL equ 1
0013 D_DayH equ 0
0014 D_MonthL equ 2
0015 D_MonthH equ 1
0016 ;
0017 D_CaliMark equ 0A5H
0018 ;
0019 D_OverCodeL equ 24H ;超載內碼0F424H=62500d
0020 D_OverCodeH equ 0F4H
0021 D_DecimalDigits equ 01H ;小數位數=1
0022
0023 D_P11 equ 02H ;稱重鎖定參數:0-7,默認值為2,相當于6613H608中的101H
0024 ; =0/1/2/3/4/5/6/7分別對應鎖定參數1/4d,1/2d,3/4d,1d,5/4d,3/2d,7/4d,2d
0025 D_P12 equ 02H ;稱重速度參數:0/1/2/3表示連續8/7/6/5個數據接近則鎖定
0026 ; 相當于6613H608中的102H
0027 D_P20 equ 06H ;最大分度數:0-9,默認值為“6”,相當于6613H608中的104H
0028 ; =0/1/2/3/4/5/6/7/8/9分別對應最大分度數為500/600/800/1000/1200/1360/1500/1800/2000/3000
0029 ; 對應的量程為50KG/60KG/80KG/100KG/120KG/136KG/150KG/180KG/200KG/300KG
0030 D_P21 equ 01H ;最小顯示分度數:0-9,默認值為“1”,相當于6613H608中的105H
0031 ; =0/1/2/3/4/5/6/7/8/9分別對應最小顯示分度數為2/4/5/8/10/12/15/20/25/50
0032 ; 對應的重量為0.2KG/0.4KG/0.5KG/0.8KG/1KG/1.2KG/1.5KG/2KG/2.5KG/5KG
0033
0034 ;
0035 ;LCD Character table (D7-D0=a、b、c、dp、f、g、e、d)
0036 Lcdch0 equ 11101011B ;"0"
0037 Lcdch1 equ 01100000B ;"1"
0038 Lcdch2 equ 11000111B ;"2"
0039 Lcdch3 equ 11100101B ;"3"
0040 Lcdch4 equ 01101100B ;"4"
0041 Lcdch5 equ 10101101B ;"5"
0042 Lcdch6 equ 10101111B ;"6"
0043 Lcdch7 equ 11101000B ;"7"
0044 Lcdch8 equ 11101111B ;"8"
0045 Lcdch9 equ 11101101B ;"9"
0046 LcdchA equ 01110111B ;"A"
0047 Lcdchb equ 00101111B ;"b"
0048 LcdchC equ 10001011B ;"C"
0049 Lcdchd equ 01100111B ;"d"
0050 LcdchE equ 10001111B ;"E"
0051 LcdchF equ 10001110B ;"F"
0052 LcdNull equ 00000000B ;" "
0053 LcdDash equ 00000100B ;"-"
0054 LcdchL equ 00001011B ;"L"
0055 Lcdcho equ 00100111B ;"o"
0056 Lcdchr equ 00000110B ;"r"
0057 LcdchH equ 01101110B ;"H"
0058 LcdchP equ 11001110B ;"P"
0059 Lcdequ equ 00000101B ;"="
0060 ;I/O
0061 EEPROM equ PT2
0062 VCC equ 6
0063 CS equ 5
0064 CLK equ 4
0065 DI equ 3
0066 DO equ 3
0067 ;------------------------------------------------------------------------------
0068 ;通用RAM定義(80H-0FFH)
0069 R_STATUSbak equ 80H
0070 R_WORKbak equ 81H
0071 R_WorkStatus equ 82H ;D7-D4相當于6613中的46H,D3-D0相當于47H
0072 R_Temp equ 83H
0073 R_Count equ 84H ;相當于6613中的6DH
0074 R_PubFlag0 equ 85H
0075 ; R_PubFlag0.0=1 1/16秒到
0076 ; R_PubFlag0.1=1 1/2秒到
0077 ; R_PubFlag0.2=0 1/8秒到
0078 ; R_PubFlag0.3=1 讀到ADC內碼
0079 ; R_PubFlag0.4=1 有效內碼
0080 ; R_PubFlag0.5=1時內碼數據穩定,鎖定
0081 ; R_PubFlag0.6=1 零點(內碼)穩定
0082 ; R_PubFlag0.7=1 已經找到穩定零點,零點內碼未保存
0083 R_PubFlag1 equ 86H
0084 ; R_PubFlag1.0=1 表示"TARE"鍵按下5秒
0085 ; R_PubFlag1.1=1 稱重數據鎖定
0086 ; R_PubFlag1.2=1
0087 ; R_PubFlag1.3=1 減法結果為負數
0088 ; R_PubFlag1.4=1 超載
0089 ; R_PubFlag1.5=0/1 計量單位=Kg/lb
0090 ; R_PubFlag1.6=1 當前零點內碼<標定零點內碼(計算重量時用)
0091 ; R_PubFlag1.7=1 Timer中斷
0092 R_PubReg0 equ 87H ;相當于6613中的69H:68H
0093 R_PubReg1 equ 88H ;相當于6613中的6BH:6AH
0094 R_PubReg2 equ 89H ;相當于6613中的61H:60H
0095 R_PubReg3 equ 8AH ;相當于6613中的63H:62H
0096 R_PubReg4 equ 8BH ;相當于6613中的65H:64H
0097 R_PubReg5 equ 8CH ;相當于6613中的67H:66H
0098 R_PubCnt0 equ 8DH ;相當于6613中的6CH
0099 R_PubCnt1 equ 8EH ;相當于6613中的49H:48H
0100 R_PubCnt2 equ 8FH ;相當于6613中的5FH:5EH
0101 R_PubCnt3 equ 90H ;相當于6613中的6FH:6EH
0102 R_TimerCnt equ 91H ;計時用(單位:1/8秒),相當于6613中的2BH:2AH
0103 R_KeyStatus equ 92H ;按鍵狀態,D0-D2分別對應"OFF"、"UNIT"、"TARE"鍵,=1時鍵按下
0104 ; ;R_KeyStatus.4=1 表示按鍵狀態已保存
0105 ; ;R_KeyStatus.5=1 表示按鍵時間已到2秒
0106 ; ;R_KeyStatus.6=1 表示按鍵時間已到5秒或20秒
0107 ; ;R_KeyStatus.7==1 表示按鍵狀態穩定
0108 R_KeyCode equ 93H ;鍵碼,D2:D0=100/101/110/111分別對應"OFF"/"UNIT"/"TARE"/多鍵
0109 ; ;D3=1 按鍵釋放,=0按鍵處于按下狀態
0110 ; ;D4=表示按鍵長時間按下或長時間按下過
0111 R_KeyTimer1 equ 94H ;按鍵計時,相當于6613中的41H
0112 R_KeyTimer2 equ 95H ;按鍵計時,相當于6613中的45H:44H
0113 R_AdcSumL equ 96H ;ADC內碼之和低字節(用于平均)
0114 R_AdcSumM equ 97H ;ADC內碼之和中間字節(用于平均)
0115 R_AdcSumH equ 98H ;ADC內碼之和高字節(用于平均)
0116 R_AdcDataCnt equ 99H ;ADC輸出數據計數(計到8次時平均)
0117 R_LastAverageL equ 9AH ;最近X次的內碼的平均值低字節,X=1-8,相當于6613中的0C1H:0C0H
0118 R_LastAverageH equ 9BH ;最近X次的內碼的平均值高字節,X=1-8,相當于6613中的0C3H:0C2H
0119 R_DifferenceL equ 9CH ;鎖定判斷的累計差值低字節,相當于6613H618中的0F1H:0F0H
0120 R_DifferenceH equ 9DH ;鎖定判斷的累計差值高字節,相當于6613H618中的0F3H:0F2H
0121 R_ZeroCodeL equ 9EH ;零點內碼低字節,相當于6613中的0CDH:0CCH
0122 R_ZeroCodeH equ 9FH ;零點內碼高字節,相當于6613中的0CFH:0CEH
0123 R_LockWeightL equ 0A0H ;鎖定的稱重數據低字節,相當于6613H608中的0C5H:0C4H
0124 R_LockWeightH equ 0A1H ;鎖定的稱重數據高字節,相當于6613H608中的0C7H:0C6H
0125 R_SteadyCnt equ 0A2H ;穩定次數,判斷鎖定用,相當于6613H618中的5DH
0126 R_2dWeightCnt equ 0A3H ;稱重0.2KG以下計次
0127 R_OffTimerL equ 0A4H ;自動關機時間倒計時低字節(單位:秒)
0128 R_OffTimerH equ 0A5H ;自動關機時間倒計時高字節(單位:秒),D7=1不自動關機。
0129 R_TmpPubReg0 equ 0A6H ;計算重量中暫存R_PubReg0的數據
0130 R_TmpPubReg1 equ 0A7H ;計算重量中暫存R_PubReg1的數據
0131 R_TmpPubReg2 equ 0A8H ;計算重量中暫存R_PubReg2的數據
0132 R_TmpPubReg3 equ 0A9H ;計算重量中暫存R_PubReg3的數據
0133 R_BattLowCnt equ 0AAH ;電池低電壓計數
0134
0135 ;
0136 R_DispMode equ 0C9H ;顯示模式:D1:D0=0-3位小數;D2=0/1不顯示計量單位/顯示計量單位;
0137 ; D3=0/1顯示為10進制方式/顯示為16進制數或提示信息
0138 R_DispBuff0 equ 0CAH ;對應LCD上5位7段碼數據的最低位
0139 R_DispBuff1 equ 0CBH ;對應LCD上5位7段碼數據的十位
0140 R_DispBuff2 equ 0CCH ;對應LCD上5位7段碼數據的百位
0141 R_DispBuff3 equ 0CDH ;對應LCD上5位7段碼數據的千位
0142 R_DispBuff4 equ 0CEH ;對應LCD上5位7段碼數據的最高位
0143 R_DispFlag equ 0CFH ;D7-D4分別對應LCD上的電池符號、空、負號、鎖符
0144 ;
0145 R_CaliPara equ 0D0H ;標定數據起始地址
0146 R_CaliCode0L equ 0D1H ;零點的標定內碼低字節
0147 R_CaliCode0H equ 0D2H ;零點的標定內碼高字節
0148 R_CaliCode1L equ 0D3H ;40KG的標定內碼低字節
0149 R_CaliCode1H equ 0D4H ;40KG的標定內碼高字節
0150 R_CaliCode2L equ 0D5H ;80KG的標定內碼低字節
0151 R_CaliCode2H equ 0D6H ;80KG的標定內碼高字節
0152 R_CaliData1L equ 0D7H ;40KG標定數據低字節
0153 R_CaliData1H equ 0D8H ;40KG標定數據高字節
0154 R_CaliData2L equ 0D9H ;80KG標定數據低字節
0155 R_CaliData2H equ 0DAH ;80KG標定數據高字節
0156 R_CaliData3L equ 0DBH ;120KG標定數據低字節
0157 R_CaliData3H equ 0DCH ;120KG標定數據高字節
0158 R_CaliFlag equ 0DDH ;已標定內碼標志,=0A5H為有效
0159 R_CaliChksumL equ 0DEH ;標定數據校驗和低字節
0160 R_CaliChksumH equ 0DFH ;標定數據校驗和高字節
0161 ;
0162
0163
0164
0165 ;
0166
0167 R_LockCodeNum equ 0E2H ;鎖定所有的連續有效數據個數最大值,相當于6613H618中的0E9H
0168 R_OffsetCode equ 0E3H ;鎖定判斷的內碼值,相當于6613H618中的0F5H:0F4H
0169 R_10dCodeL equ 0E4H ;10d內碼的低字節,相當于6613H618中的0EDH:0ECH
0170 R_10dCodeH equ 0E5H ;10d內碼的高字節,相當于6613H618中的0EFH:0EEH
0171 R_MaxScaleMarkL equ 0E6H ;最大分度數(+9)低字節
0172 R_MaxScaleMarkH equ 0E7H ;最大分度數(+9)高字節
0173
0174 R_UnitData0 equ 0EAH ;1d對應的不同計量單位的值(有效數字)低字節
0175 R_UnitData1 equ 0EBH ;1d對應的不同計量單位的值(有效數字)高字節
0176 R_UnitData2 equ 0ECH ;1d對應的不同計量單位的值(浮點數)的2的指數,≥80H為負數
0177 R_AdcDataL equ 0EDH ;暫存ADC輸出數據低字節
0178 R_AdcDataH equ 0EEH ;暫存ADC輸出數據高字節
0179 R_CodePointer equ 0EFH ;內碼存儲指針
0180 R_CodeBuffer equ 0F0H ;內碼緩存0F0H-0FFH共8組16字節
0181 ;==============================================================================
0182 ; Program start
0183 ;==============================================================================
0184 org 000H
0185 0000 A01C GOTO L_Start ;程序開始(RESET入口)
0186 org 004H
0187 ; GOTO L_IntProc ;中斷服務程序
0188 L_IntProc:
0189 0004 2281 MOVWF R_WORKbak ;[WORK]->R_WORKbak
0190 0005 2004 MOVFW STATUS
0191 0006 2280 MOVWF R_STATUSbak ;[STATUS]->R_STATUSbak
0192 0007 E406 BTFSC INTF,ADIF
0193 0008 A00E GOTO L_AdcInt ;ADC中斷,轉
0194 0009 F806 BTFSS INTF,TMIF
0195 000A A018 GOTO L_IntProcEnd ;不是Timer中斷,轉
0196 000B C806 BCF INTF,TMIF ;清Timer中斷標志
0197 000C DE86 BSF R_PubFlag1,7 ;1->R_PubFlag1.7 置Timer中斷標志
0198 000D A018 GOTO L_IntProcEnd
0199 L_AdcInt:
0200 000E C406 BCF INTF,ADIF ;清ADC中斷標志
0201 000F 2011 MOVFW ADOL
0202 0010 22ED MOVWF R_AdcDataL ;[ADOL]->R_AdcDataL
0203 0011 2010 MOVFW ADOH
0204 0012 22EE MOVWF R_AdcDataH ;[ADOH]->R_AdcDataH
0205 0013 4009 MOVLW 09H ;\
0206 0014 06ED ADDWF R_AdcDataL,1 ; | [R_AdcDataH:R_AdcDataL]+3D09H(15625)
0207 0015 403D MOVLW 3DH ; | ->R_AdcDataH:R_AdcDataL (轉換為正數內碼)
0208 0016 26EE ADDWFC R_AdcDataH,1 ;/
0209 0017 D685 BSF R_PubFlag0,3 ;讀到ADC內碼
0210 L_IntProcEnd:
0211 0018 2080 MOVFW R_STATUSbak
0212 0019 2204 MOVWF STATUS ;[R_STATUSbak]->STATUS
0213 001A 2081 MOVFW R_WORKbak ;[R_WORKbak]->WORK
0214 001B 0002 RETFIE
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -