📄 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-10-27
0007 ;韩国人体秤0.9d或1.8d归零;0.4KG以下显示为0;自动关机时间为10秒。
0008 ;==============================================================================
0009 include FS9821.inc ;FS9821特殊功能寄存器定义(00H-7FH)
0010 ;------------------------------------------------------------------------------
0011 ;常数定义
0012 D_DayL equ 7
0013 D_DayH equ 2
0014 D_MonthL equ 0
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=f、g、e、d、a、b、c、dp)
0036 Lcdch0 equ 10111110B ;"0"
0037 Lcdch1 equ 00000110B ;"1"
0038 Lcdch2 equ 01111100B ;"2"
0039 Lcdch3 equ 01011110B ;"3"
0040 Lcdch4 equ 11000110B ;"4"
0041 Lcdch5 equ 11011010B ;"5"
0042 Lcdch6 equ 11111010B ;"6"
0043 Lcdch7 equ 10001110B ;"7"
0044 Lcdch8 equ 11111110B ;"8"
0045 Lcdch9 equ 11011110B ;"9"
0046 LcdchA equ 01110111B ;"A"
0047 Lcdchb equ 11110010B ;"b"
0048 LcdchC equ 10111000B ;"C"
0049 Lcdchd equ 01110110B ;"d"
0050 LcdchE equ 11111000B ;"E"
0051 LcdchF equ 11101000B ;"F"
0052 LcdNull equ 00000000B ;" "
0053 LcdDash equ 01000000B ;"-"
0054 LcdchL equ 10110000B ;"L"
0055 Lcdcho equ 01110010B ;"o"
0056 Lcdchr equ 01100000B ;"r"
0057 LcdchH equ 11100110B ;"H"
0058 LcdchP equ 11101100B ;"P"
0059 Lcdequ equ 01010000B ;"="
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-D0分别对应LCD上的kg、lb、g、oz、锁符、负号、COL1、电池符号
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 + -