📄 9821h620.lst
字号:
FASM v4.02.07
line--addr--code----instruction-------------------------------------
0001 ;Project: FS9821小台秤
0002 ;FileName: 9821H620.ASM
0003 ;Ver: H620
0004 ;Body: Fortune FS9821
0005 ;Author: kangguang
0006 ;Modify Date: 2004-9-25
0007 ;==============================================================================
0008 include FS9821.inc ;FS9821特殊功能寄存器定义(00H-7FH)
0009 ;------------------------------------------------------------------------------
0010 ;常数定义
0011 D_DayL equ 5
0012 D_DayH equ 2
0013 D_MonthL equ 9
0014 D_MonthH equ 0
0015 ;
0016 D_CaliMark1 equ 5AH
0017 D_CaliMark2 equ 0A5H
0018 D_OverCodeL equ 24H ;超载内码0F424H=62500d
0019 D_OverCodeH equ 0F4H
0020 ;
0021 ;LCD Character table (D7-D0=f、g、e、d、a、b、c、dp)
0022 Lcdch0 equ 10111110B ;"0"
0023 Lcdch1 equ 00000110B ;"1"
0024 Lcdch2 equ 01111100B ;"2"
0025 Lcdch3 equ 01011110B ;"3"
0026 Lcdch4 equ 11000110B ;"4"
0027 Lcdch5 equ 11011010B ;"5"
0028 Lcdch6 equ 11111010B ;"6"
0029 Lcdch7 equ 10001110B ;"7"
0030 Lcdch8 equ 11111110B ;"8"
0031 Lcdch9 equ 11011110B ;"9"
0032 LcdchA equ 01110111B ;"A"
0033 Lcdchb equ 11110010B ;"b"
0034 LcdchC equ 10111000B ;"C"
0035 Lcdchd equ 01110110B ;"d"
0036 LcdchE equ 11111000B ;"E"
0037 LcdchF equ 11101000B ;"F"
0038 LcdNull equ 00000000B ;" "
0039 LcdDash equ 01000000B ;"-"
0040 LcdchL equ 10110000B ;"L"
0041 Lcdcho equ 01110010B ;"o"
0042 Lcdchr equ 01100000B ;"r"
0043 LcdchH equ 11100110B ;"H"
0044 LcdchP equ 11101100B ;"P"
0045 Lcdequ equ 01010000B ;"="
0046 ;I/O
0047 EEPROM equ PT2
0048 VCC equ 6
0049 CS equ 5
0050 CLK equ 4
0051 DI equ 3
0052 DO equ 3
0053 ;------------------------------------------------------------------------------
0054 ;通用RAM定义(80H-0FFH)
0055 R_STATUSbak equ 80H
0056 R_WORKbak equ 81H
0057 R_WorkStatus equ 82H ;D7-D4相当于6613中的46H,D3-D0相当于47H
0058 R_Temp equ 83H
0059 R_Count equ 84H ;相当于6613中的6DH
0060 R_PubFlag0 equ 85H
0061 ; R_PubFlag0.0=1 1/16秒到
0062 ; R_PubFlag0.1=1 1/2秒到
0063 ; R_PubFlag0.2=0 1/8秒到
0064 ; R_PubFlag0.3=1 读到ADC内码
0065 ; R_PubFlag0.4=1 有效内码
0066 ; R_PubFlag0.5=1时称重数据稳定,锁定
0067 ; R_PubFlag0.6=1 零点(内码)稳定
0068 ; R_PubFlag0.7=1 已经找到稳定零点,零点内码未保存
0069 R_PubFlag1 equ 86H
0070 ; R_PubFlag1.0=1 表示"TARE"键按下5秒
0071 ; R_PubFlag1.1=1 表示当前环境温度<第一环境温度值
0072 ; R_PubFlag1.2=1 表示当前测得的额定重量值<最大分度数
0073 ; R_PubFlag1.3=1 减法结果为负数
0074 ; R_PubFlag1.4=1 超载
0075 ; R_PubFlag1.7=1 Timer中断
0076 R_PubReg0 equ 87H ;相当于6613中的69H:68H
0077 R_PubReg1 equ 88H ;相当于6613中的6BH:6AH
0078 R_PubReg2 equ 89H ;相当于6613中的61H:60H
0079 R_PubReg3 equ 8AH ;相当于6613中的63H:62H
0080 R_PubReg4 equ 8BH ;相当于6613中的65H:64H
0081 R_PubReg5 equ 8CH ;相当于6613中的67H:66H
0082 R_PubCnt0 equ 8DH ;相当于6613中的6CH
0083 R_PubCnt1 equ 8EH ;相当于6613中的49H:48H
0084 R_PubCnt2 equ 8FH ;相当于6613中的5FH:5EH
0085 R_PubCnt3 equ 90H ;相当于6613中的6FH:6EH
0086 R_TimerCnt equ 91H ;计时用(单位:1/8秒),相当于6613中的2BH:2AH
0087 R_KeyStatus equ 92H ;按键状态,D0-D2分别对应"OFF"、"UNIT"、"TARE"键,=1时键按下
0088 ; ;R_KeyStatus.4=1 表示按键状态已保存
0089 ; ;R_KeyStatus.5=1 表示按键时间已到2秒
0090 ; ;R_KeyStatus.6=1 表示按键时间已到5秒或20秒
0091 ; ;R_KeyStatus.7==1 表示按键状态稳定
0092 R_KeyCode equ 93H ;键码,D2:D0=100/101/110/111分别对应"OFF"/"UNIT"/"TARE"/多键
0093 ; ;D3=1 按键释放,=0按键处于按下状态
0094 ; ;D4=表示按键长时间按下或长时间按下过
0095 R_KeyTimer1 equ 94H ;按键计时,相当于6613中的41H
0096 R_KeyTimer2 equ 95H ;按键计时,相当于6613中的45H:44H
0097 R_AdcSumL equ 96H ;ADC内码之和低字节(用于平均)
0098 R_AdcSumM equ 97H ;ADC内码之和中间字节(用于平均)
0099 R_AdcSumH equ 98H ;ADC内码之和高字节(用于平均)
0100 R_AdcDataCnt equ 99H ;ADC输出数据计数(计到8次时平均)
0101 R_LastAverageL equ 9AH ;最近X次的内码的平均值低字节,X=1-8,相当于6613中的0C1H:0C0H
0102 R_LastAverageH equ 9BH ;最近X次的内码的平均值高字节,X=1-8,相当于6613中的0C3H:0C2H
0103
0104 R_SteadyCnt equ 9DH ;稳定次数,判断锁定用,相当于6613H618中的5DH
0105 R_DifferenceL equ 9EH ;锁定判断的累计差值低字节,相当于6613H618中的0F1H:0F0H
0106 R_DifferenceH equ 9FH ;锁定判断的累计差值高字节,相当于6613H618中的0F3H:0F2H
0107 R_ZeroCodeL equ 0A0H ;零点内码低字节,相当于6613中的0CDH:0CCH
0108 R_ZeroCodeH equ 0A1H ;零点内码高字节,相当于6613中的0CFH:0CEH
0109 R_UnitSelect equ 0A2H ;计量单位选择:0=g,1=oz,2=kg,3=lb
0110 R_SteadyCodeL equ 0A3H ;连续稳定的内码值低字节,相当于6613中的0C5H:0C4H
0111 R_SteadyCodeH equ 0A4H ;连续稳定的内码值高字节,相当于6613中的0C7H:0C6H
0112 R_SteadyTimer equ 0A5H ;称重稳定计时(单位:1/8秒),相当于6613H609中的71H
0113 ;
0114 R_DispMode equ 0C9H ;显示模式:D1:D0=0-3位小数;D2=0/1不显示计量单位/显示计量单位;
0115 ; D3=0/1显示为10进制方式/显示为16进制数或提示信息
0116 R_DispBuff0 equ 0CAH ;对应LCD上5位7段码数据的最低位
0117 R_DispBuff1 equ 0CBH ;对应LCD上5位7段码数据的十位
0118 R_DispBuff2 equ 0CCH ;对应LCD上5位7段码数据的百位
0119 R_DispBuff3 equ 0CDH ;对应LCD上5位7段码数据的千位
0120 R_DispBuff4 equ 0CEH ;对应LCD上5位7段码数据的最高位
0121 R_DispFlag equ 0CFH ;D7-D0分别对应LCD上的kg、lb、g、oz、锁符、负号、COL1、电池符号
0122 ;
0123 R_CaliMarkL equ 0D0H ;称重标定分度数低字节,D7:D4=P0.1(百位),D3:D0=P0.0(十位),个位=0
0124 R_CaliMarkH equ 0D1H ;称重标定分度数高字节,D7:D4=P0.3(万位),D3:D0=P0.2(千位)
0125 R_CaliP1L equ 0D2H ;标定参数,D7:D4=P1.1,D3:D0=P1.0
0126 ; P1.0=计量单位标志,D0-D3分别对应kg、lb、g、oz,=1是打开单位,缺省值为"F"
0127 ; P1.1=主单位小数点位数,0-3,缺省为"0",D2=0有自动追重,D2=1无自动追重。
0128 R_CaliP1H equ 0D3H ;标定参数,D7:D4=P1.3,D3:D0=P1.2
0129 ; P1.2=主单位分度值1(1)、2(2)、3(5),缺省值为"1"
0130 ; P1.3=主单位分度数,0=1000,1=1200,2=1500,3=2000,4=2500,5=3000,6=4000,
0131 ; 7=5000,8=6000,9=10000,缺省为"3"
0132 R_CaliP2L equ 0D4H ;标定参数,D7:D4=P2.1,D3:D0=P2.0
0133 ; P2.0=称重锁定参数,0-7,缺省值为"2"
0134 ; =0-7分别对应锁定参数1/4d,1/2d,3/4d,1d,5/4d,3/2d,7/4d,2d
0135 ; P2.1=锁定时间,0=无锁定功能,5=锁定5秒,缺省值为"5"
0136 R_CaliP2H equ 0D5H ;标定参数,D7:D4=P2.3,D3:D0=P2.2
0137 ; P2.2=自动关机时间,0=无自动关机,1-7对应30秒-210秒,8=10秒,9=300秒后自动关机
0138 ; 缺省值为"2"(60秒自动关机)
0139 ; P2.3=称重速度参数:D1D0=00/01/02/03表示连续8/7/6/5个数据接近则锁定
0140 R_CaliTempe equ 0D6H ;第一环境温度值(℃)
0141 R_TempeRepair equ 0D7H ;温补值(-12.7d到+12.7d),=0时放弃温补,D7=1时为负数
0142 R_CaliParaFlag equ 0D8H ;已标定参数标志,=5AH为有效
0143 R_CaliCodeFlag equ 0D9H ;已标定内码标志,=0A5H为有效
0144 R_CaliCode0L equ 0DAH ;零点的标定内码低字节
0145 R_CaliCode0H equ 0DBH ;零点的标定内码高字节
0146 R_CaliDataL equ 0DCH ;称重标定数据低字节
0147 R_CaliDataH equ 0DDH ;称重标定数据高字节
0148 R_CaliChksumL equ 0DEH ;标定数据校验和低字节
0149 R_CaliChksumH equ 0DFH ;标定数据校验和高字节
0150 ;
0151 R_DecimalDigits equ 0E0H ;小数位数(由P1.1算出)
0152 R_ScaleMarkV equ 0E1H ;分度值(由P1.2算出)
0153 R_LockCodeNum equ 0E2H ;锁定所有的连续有效数据个数最大值,相当于6613H618中的0E9H
0154 R_OffsetCode equ 0E3H ;锁定判断的内码值,相当于6613H618中的0F5H:0F4H
0155 R_10dCodeL equ 0E4H ;10d内码的低字节,相当于6613H618中的0EDH:0ECH
0156 R_10dCodeH equ 0E5H ;10d内码的高字节,相当于6613H618中的0EFH:0EEH
0157 R_MaxScaleMarkL equ 0E6H ;最大分度数(+9)低字节
0158 R_MaxScaleMarkH equ 0E7H ;最大分度数(+9)高字节
0159
0160 R_UnitData0 equ 0EAH ;1d对应的不同计量单位的值(有效数字)低字节
0161 R_UnitData1 equ 0EBH ;1d对应的不同计量单位的值(有效数字)高字节
0162 R_UnitData2 equ 0ECH ;1d对应的不同计量单位的值(浮点数)的2的指数,≥80H为负数
0163 R_AdcDataL equ 0EDH ;暂存ADC输出数据低字节
0164 R_AdcDataH equ 0EEH ;暂存ADC输出数据高字节
0165 R_CodePointer equ 0EFH ;内码存储指针
0166 R_CodeBuffer equ 0F0H ;内码缓存0F0H-0FFH共8组16字节
0167 ;==============================================================================
0168 ; Program start
0169 ;==============================================================================
0170 org 000H
0171 0000 A01C GOTO L_Start ;程序开始(RESET入口)
0172 org 004H
0173 ; GOTO L_IntProc ;中断服务程序
0174 L_IntProc:
0175 0004 2281 MOVWF R_WORKbak ;[WORK]->R_WORKbak
0176 0005 2004 MOVFW STATUS
0177 0006 2280 MOVWF R_STATUSbak ;[STATUS]->R_STATUSbak
0178 0007 E406 BTFSC INTF,ADIF
0179 0008 A00E GOTO L_AdcInt ;ADC中断,转
0180 0009 F806 BTFSS INTF,TMIF
0181 000A A018 GOTO L_IntProcEnd ;不是Timer中断,转
0182 000B C806 BCF INTF,TMIF ;清Timer中断标志
0183 000C DE86 BSF R_PubFlag1,7 ;1->R_PubFlag1.7 置Timer中断标志
0184 000D A018 GOTO L_IntProcEnd
0185 L_AdcInt:
0186 000E C406 BCF INTF,ADIF ;清ADC中断标志
0187 000F 2011 MOVFW ADOL
0188 0010 22ED MOVWF R_AdcDataL ;[ADOL]->R_AdcDataL
0189 0011 2010 MOVFW ADOH
0190 0012 22EE MOVWF R_AdcDataH ;[ADOH]->R_AdcDataH
0191 0013 4009 MOVLW 09H ;\
0192 0014 06ED ADDWF R_AdcDataL,1 ; | [R_AdcDataH:R_AdcDataL]+3D09H(15625)
0193 0015 403D MOVLW 3DH ; | ->R_AdcDataH:R_AdcDataL (转换为正数内码)
0194 0016 26EE ADDWFC R_AdcDataH,1 ;/
0195 0017 D685 BSF R_PubFlag0,3 ;读到ADC内码
0196 L_IntProcEnd:
0197 0018 2080 MOVFW R_STATUSbak
0198 0019 2204 MOVWF STATUS ;[R_STATUSbak]->STATUS
0199 001A 2081 MOVFW R_WORKbak ;[R_WORKbak]->WORK
0200 001B 0002 RETFIE
0201 ;------------------------------------------------------------------------------
0202 ;程序开始
0203 L_Start:
0204 001C 0207 CLRF INTE ;关所有中断
0205 001D 4044 MOVLW 01000100B ;CPU指令周期=MCK/2,OSC仅使用内部1MHz
0206 001E 2214 MOVWF MCK
0207 001F 40C0 MOVLW 0C0H
0208 0020 2223 MOVWF AIENB1 ;PT1.0-PT1.5 is Analog input channel(AIN0-AIN5)
0209 0021 2221 MOVWF PT1EN ;PT1.7-PT1.6 is output
0210 0022 4040 MOVLW 40H
0211 0023 2220 MOVWF PT1 ;0C0H->PT1
0212 0024 4000 MOVLW 0
0213 0025 2222 MOVWF PT1PU ;0->PT1PU
0214 0026 2227 MOVWF PT2MR ;0->PT2MR
0215 0027 2237 MOVWF PT2OCB ;0->PT2OCB
0216 0028 40F8 MOVLW 11111000b
0217 0029 2225 MOVWF PT2EN ;PT2.7-PT2.3 is output,PT2.2-PT2.0 is input
0218 002A 400F MOVLW 00001111b
0219 002B 2226 MOVWF PT2PU ;PT2.3-PT2.0 with pull-up resistor
0220 002C 2224 MOVWF PT2 ;07H->PT2
0221 L_InitClrRAM:
0222 002D 4080 MOVLW 80H ;\
0223 002E 2202 MOVWF FSR0 ; \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -