?? 9821h621.lst
字號(hào):
FASM v4.02.07
line--addr--code----instruction-------------------------------------
0001 ;Project: FS9821韓國(guó)人體秤
0002 ;FileName: 9821H621.ASM
0003 ;Ver: H621
0004 ;Body: Fortune FS9821
0005 ;Author: kangguang
0006 ;Modify Date: 2004-12-22
0007 ;韓國(guó)人體秤0.9d或1.8d歸零;0.4KG以下顯示為0;自動(dòng)關(guān)機(jī)時(shí)間為10秒。
0008 ;==============================================================================
0009 include FS9821.inc ;FS9821特殊功能寄存器定義(00H-7FH)
0010 ;------------------------------------------------------------------------------
0011 ;常數(shù)定義
0012 D_DayL equ 2
0013 D_DayH equ 2
0014 D_MonthL equ 2
0015 D_MonthH equ 1
0016 ;
0017 D_CaliMark equ 0A5H
0018 ;
0019 D_OverCodeL equ 24H ;超載內(nèi)碼0F424H=62500d
0020 D_OverCodeH equ 0F4H
0021 D_DecimalDigits equ 01H ;小數(shù)位數(shù)=1
0022
0023 D_P11 equ 02H ;稱重鎖定參數(shù):0-7,默認(rèn)值為2,相當(dāng)于6613H608中的101H
0024 ; =0/1/2/3/4/5/6/7分別對(duì)應(yīng)鎖定參數(shù)1/4d,1/2d,3/4d,1d,5/4d,3/2d,7/4d,2d
0025 D_P12 equ 02H ;稱重速度參數(shù):0/1/2/3表示連續(xù)8/7/6/5個(gè)數(shù)據(jù)接近則鎖定
0026 ; 相當(dāng)于6613H608中的102H
0027 D_P20 equ 06H ;最大分度數(shù):0-9,默認(rèn)值為“6”,相當(dāng)于6613H608中的104H
0028 ; =0/1/2/3/4/5/6/7/8/9分別對(duì)應(yīng)最大分度數(shù)為500/600/800/1000/1200/1360/1500/1800/2000/3000
0029 ; 對(duì)應(yīng)的量程為50KG/60KG/80KG/100KG/120KG/136KG/150KG/180KG/200KG/300KG
0030 D_P21 equ 01H ;最小顯示分度數(shù):0-9,默認(rèn)值為“1”,相當(dāng)于6613H608中的105H
0031 ; =0/1/2/3/4/5/6/7/8/9分別對(duì)應(yīng)最小顯示分度數(shù)為2/4/5/8/10/12/15/20/25/50
0032 ; 對(duì)應(yīng)的重量為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相當(dāng)于6613中的46H,D3-D0相當(dāng)于47H
0072 R_Temp equ 83H
0073 R_Count equ 84H ;相當(dāng)于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內(nèi)碼
0079 ; R_PubFlag0.4=1 有效內(nèi)碼
0080 ; R_PubFlag0.5=1時(shí)內(nèi)碼數(shù)據(jù)穩(wěn)定,鎖定
0081 ; R_PubFlag0.6=1 零點(diǎn)(內(nèi)碼)穩(wěn)定
0082 ; R_PubFlag0.7=1 已經(jīng)找到穩(wěn)定零點(diǎn),零點(diǎn)內(nèi)碼未保存
0083 R_PubFlag1 equ 86H
0084 ; R_PubFlag1.0=1 表示"TARE"鍵按下5秒
0085 ; R_PubFlag1.1=1 稱重?cái)?shù)據(jù)鎖定
0086 ; R_PubFlag1.2=1
0087 ; R_PubFlag1.3=1 減法結(jié)果為負(fù)數(shù)
0088 ; R_PubFlag1.4=1 超載
0089 ; R_PubFlag1.5=0/1 計(jì)量單位=Kg/lb
0090 ; R_PubFlag1.6=1 當(dāng)前零點(diǎn)內(nèi)碼<標(biāo)定零點(diǎn)內(nèi)碼(計(jì)算重量時(shí)用)
0091 ; R_PubFlag1.7=1 Timer中斷
0092 R_PubReg0 equ 87H ;相當(dāng)于6613中的69H:68H
0093 R_PubReg1 equ 88H ;相當(dāng)于6613中的6BH:6AH
0094 R_PubReg2 equ 89H ;相當(dāng)于6613中的61H:60H
0095 R_PubReg3 equ 8AH ;相當(dāng)于6613中的63H:62H
0096 R_PubReg4 equ 8BH ;相當(dāng)于6613中的65H:64H
0097 R_PubReg5 equ 8CH ;相當(dāng)于6613中的67H:66H
0098 R_PubCnt0 equ 8DH ;相當(dāng)于6613中的6CH
0099 R_PubCnt1 equ 8EH ;相當(dāng)于6613中的49H:48H
0100 R_PubCnt2 equ 8FH ;相當(dāng)于6613中的5FH:5EH
0101 R_PubCnt3 equ 90H ;相當(dāng)于6613中的6FH:6EH
0102 R_TimerCnt equ 91H ;計(jì)時(shí)用(單位:1/8秒),相當(dāng)于6613中的2BH:2AH
0103 R_KeyStatus equ 92H ;按鍵狀態(tài),D0-D2分別對(duì)應(yīng)"OFF"、"UNIT"、"TARE"鍵,=1時(shí)鍵按下
0104 ; ;R_KeyStatus.4=1 表示按鍵狀態(tài)已保存
0105 ; ;R_KeyStatus.5=1 表示按鍵時(shí)間已到2秒
0106 ; ;R_KeyStatus.6=1 表示按鍵時(shí)間已到5秒或20秒
0107 ; ;R_KeyStatus.7==1 表示按鍵狀態(tài)穩(wěn)定
0108 R_KeyCode equ 93H ;鍵碼,D2:D0=100/101/110/111分別對(duì)應(yīng)"OFF"/"UNIT"/"TARE"/多鍵
0109 ; ;D3=1 按鍵釋放,=0按鍵處于按下狀態(tài)
0110 ; ;D4=表示按鍵長(zhǎng)時(shí)間按下或長(zhǎng)時(shí)間按下過
0111 R_KeyTimer1 equ 94H ;按鍵計(jì)時(shí),相當(dāng)于6613中的41H
0112 R_KeyTimer2 equ 95H ;按鍵計(jì)時(shí),相當(dāng)于6613中的45H:44H
0113 R_AdcSumL equ 96H ;ADC內(nèi)碼之和低字節(jié)(用于平均)
0114 R_AdcSumM equ 97H ;ADC內(nèi)碼之和中間字節(jié)(用于平均)
0115 R_AdcSumH equ 98H ;ADC內(nèi)碼之和高字節(jié)(用于平均)
0116 R_AdcDataCnt equ 99H ;ADC輸出數(shù)據(jù)計(jì)數(shù)(計(jì)到8次時(shí)平均)
0117 R_LastAverageL equ 9AH ;最近X次的內(nèi)碼的平均值低字節(jié),X=1-8,相當(dāng)于6613中的0C1H:0C0H
0118 R_LastAverageH equ 9BH ;最近X次的內(nèi)碼的平均值高字節(jié),X=1-8,相當(dāng)于6613中的0C3H:0C2H
0119 R_DifferenceL equ 9CH ;鎖定判斷的累計(jì)差值低字節(jié),相當(dāng)于6613H618中的0F1H:0F0H
0120 R_DifferenceH equ 9DH ;鎖定判斷的累計(jì)差值高字節(jié),相當(dāng)于6613H618中的0F3H:0F2H
0121 R_ZeroCodeL equ 9EH ;零點(diǎn)內(nèi)碼低字節(jié),相當(dāng)于6613中的0CDH:0CCH
0122 R_ZeroCodeH equ 9FH ;零點(diǎn)內(nèi)碼高字節(jié),相當(dāng)于6613中的0CFH:0CEH
0123 R_LockWeightL equ 0A0H ;鎖定的稱重?cái)?shù)據(jù)低字節(jié),相當(dāng)于6613H608中的0C5H:0C4H
0124 R_LockWeightH equ 0A1H ;鎖定的稱重?cái)?shù)據(jù)高字節(jié),相當(dāng)于6613H608中的0C7H:0C6H
0125 R_SteadyCnt equ 0A2H ;穩(wěn)定次數(shù),判斷鎖定用,相當(dāng)于6613H618中的5DH
0126 R_2dWeightCnt equ 0A3H ;稱重0.2KG以下計(jì)次
0127 R_OffTimerL equ 0A4H ;自動(dòng)關(guān)機(jī)時(shí)間倒計(jì)時(shí)低字節(jié)(單位:秒)
0128 R_OffTimerH equ 0A5H ;自動(dòng)關(guān)機(jī)時(shí)間倒計(jì)時(shí)高字節(jié)(單位:秒),D7=1不自動(dòng)關(guān)機(jī)。
0129 R_TmpPubReg0 equ 0A6H ;計(jì)算重量中暫存R_PubReg0的數(shù)據(jù)
0130 R_TmpPubReg1 equ 0A7H ;計(jì)算重量中暫存R_PubReg1的數(shù)據(jù)
0131 R_TmpPubReg2 equ 0A8H ;計(jì)算重量中暫存R_PubReg2的數(shù)據(jù)
0132 R_TmpPubReg3 equ 0A9H ;計(jì)算重量中暫存R_PubReg3的數(shù)據(jù)
0133 R_BattLowCnt equ 0AAH ;電池低電壓計(jì)數(shù)
0134
0135 ;
0136 R_DispMode equ 0C9H ;顯示模式:D1:D0=0-3位小數(shù);D2=0/1不顯示計(jì)量單位/顯示計(jì)量單位;
0137 ; D3=0/1顯示為10進(jìn)制方式/顯示為16進(jìn)制數(shù)或提示信息
0138 R_DispBuff0 equ 0CAH ;對(duì)應(yīng)LCD上5位7段碼數(shù)據(jù)的最低位
0139 R_DispBuff1 equ 0CBH ;對(duì)應(yīng)LCD上5位7段碼數(shù)據(jù)的十位
0140 R_DispBuff2 equ 0CCH ;對(duì)應(yīng)LCD上5位7段碼數(shù)據(jù)的百位
0141 R_DispBuff3 equ 0CDH ;對(duì)應(yīng)LCD上5位7段碼數(shù)據(jù)的千位
0142 R_DispBuff4 equ 0CEH ;對(duì)應(yīng)LCD上5位7段碼數(shù)據(jù)的最高位
0143 R_DispFlag equ 0CFH ;D7-D4分別對(duì)應(yīng)LCD上的電池符號(hào)、空、負(fù)號(hào)、鎖符
0144 ;
0145 R_CaliPara equ 0D0H ;標(biāo)定數(shù)據(jù)起始地址
0146 R_CaliCode0L equ 0D1H ;零點(diǎn)的標(biāo)定內(nèi)碼低字節(jié)
0147 R_CaliCode0H equ 0D2H ;零點(diǎn)的標(biāo)定內(nèi)碼高字節(jié)
0148 R_CaliCode1L equ 0D3H ;40KG的標(biāo)定內(nèi)碼低字節(jié)
0149 R_CaliCode1H equ 0D4H ;40KG的標(biāo)定內(nèi)碼高字節(jié)
0150 R_CaliCode2L equ 0D5H ;80KG的標(biāo)定內(nèi)碼低字節(jié)
0151 R_CaliCode2H equ 0D6H ;80KG的標(biāo)定內(nèi)碼高字節(jié)
0152 R_CaliData1L equ 0D7H ;40KG標(biāo)定數(shù)據(jù)低字節(jié)
0153 R_CaliData1H equ 0D8H ;40KG標(biāo)定數(shù)據(jù)高字節(jié)
0154 R_CaliData2L equ 0D9H ;80KG標(biāo)定數(shù)據(jù)低字節(jié)
0155 R_CaliData2H equ 0DAH ;80KG標(biāo)定數(shù)據(jù)高字節(jié)
0156 R_CaliData3L equ 0DBH ;120KG標(biāo)定數(shù)據(jù)低字節(jié)
0157 R_CaliData3H equ 0DCH ;120KG標(biāo)定數(shù)據(jù)高字節(jié)
0158 R_CaliFlag equ 0DDH ;已標(biāo)定內(nèi)碼標(biāo)志,=0A5H為有效
0159 R_CaliChksumL equ 0DEH ;標(biāo)定數(shù)據(jù)校驗(yàn)和低字節(jié)
0160 R_CaliChksumH equ 0DFH ;標(biāo)定數(shù)據(jù)校驗(yàn)和高字節(jié)
0161 ;
0162
0163
0164
0165 ;
0166
0167 R_LockCodeNum equ 0E2H ;鎖定所有的連續(xù)有效數(shù)據(jù)個(gè)數(shù)最大值,相當(dāng)于6613H618中的0E9H
0168 R_OffsetCode equ 0E3H ;鎖定判斷的內(nèi)碼值,相當(dāng)于6613H618中的0F5H:0F4H
0169 R_10dCodeL equ 0E4H ;10d內(nèi)碼的低字節(jié),相當(dāng)于6613H618中的0EDH:0ECH
0170 R_10dCodeH equ 0E5H ;10d內(nèi)碼的高字節(jié),相當(dāng)于6613H618中的0EFH:0EEH
0171 R_MaxScaleMarkL equ 0E6H ;最大分度數(shù)(+9)低字節(jié)
0172 R_MaxScaleMarkH equ 0E7H ;最大分度數(shù)(+9)高字節(jié)
0173
0174 R_UnitData0 equ 0EAH ;1d對(duì)應(yīng)的不同計(jì)量單位的值(有效數(shù)字)低字節(jié)
0175 R_UnitData1 equ 0EBH ;1d對(duì)應(yīng)的不同計(jì)量單位的值(有效數(shù)字)高字節(jié)
0176 R_UnitData2 equ 0ECH ;1d對(duì)應(yīng)的不同計(jì)量單位的值(浮點(diǎn)數(shù))的2的指數(shù),≥80H為負(fù)數(shù)
0177 R_AdcDataL equ 0EDH ;暫存ADC輸出數(shù)據(jù)低字節(jié)
0178 R_AdcDataH equ 0EEH ;暫存ADC輸出數(shù)據(jù)高字節(jié)
0179 R_CodePointer equ 0EFH ;內(nèi)碼存儲(chǔ)指針
0180 R_CodeBuffer equ 0F0H ;內(nèi)碼緩存0F0H-0FFH共8組16字節(jié)
0181 ;==============================================================================
0182 ; Program start
0183 ;==============================================================================
0184 org 000H
0185 0000 A01C GOTO L_Start ;程序開始(RESET入口)
0186 org 004H
0187 ; GOTO L_IntProc ;中斷服務(wù)程序
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中斷,轉(zhuǎn)
0194 0009 F806 BTFSS INTF,TMIF
0195 000A A018 GOTO L_IntProcEnd ;不是Timer中斷,轉(zhuǎn)
0196 000B C806 BCF INTF,TMIF ;清Timer中斷標(biāo)志
0197 000C DE86 BSF R_PubFlag1,7 ;1->R_PubFlag1.7 置Timer中斷標(biāo)志
0198 000D A018 GOTO L_IntProcEnd
0199 L_AdcInt:
0200 000E C406 BCF INTF,ADIF ;清ADC中斷標(biāo)志
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 (轉(zhuǎn)換為正數(shù)內(nèi)碼)
0208 0016 26EE ADDWFC R_AdcDataH,1 ;/
0209 0017 D685 BSF R_PubFlag0,3 ;讀到ADC內(nèi)碼
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -