9821h620.lst

来自「用台湾富晶单片机开发的电子称包括源码和编译器」· LST 代码 · 共 1,072 行 · 第 1/5 页

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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?