📄 scale.asm
字号:
MOV A, 131 ;0.5秒产生一次标示位.
MOV R_TmrInt0Cnt, A
JMP L_TmrInt0End
L_TmrInt0End:
MOV A, R_IStatReg
MOV Status, A
MOV A, R_IAccReg
RETI
B_TmrInt0 ENDP
;=======================================================================================
;=======================================================================
;名 称: T1定时中断处理子程序
;功 能: 置位一个定时器1中断触发标志
;输 入: 无
;输 出:
;创 建: ◥HX◤于深圳2006-01-19
;修 改:
;版 本:
;备 注: V.0.1
;=======================================================================
; L_TmrInt1:
; MOV R_IAccReg, A
; MOV A, Status
; MOV R_IStatReg, A
; CLR T1ON
; SET R_TmrInt1Tri_F
; MOV A, 10000000B
; XORM A, PA
; ; CLR ADDISCH0 ;开始放电
; ; SET ADDISCH1
; MOV A, R_IStatReg
; MOV Status, A
; MOV A, R_IAccReg
; RETI
; L_TmrInt1End:
;=======================================================================
;=============================================================================
;4字节16转10进制子程序
;INPUT RAM : R_F2Hex2DeciIn_0, R_F2Hex2DeciIn_1,
; :
;USER RAM : R_F2Hex2DeciCnt
;OUTPUT RAM : R_F2Hex2DeciOut_0, R_F2Hex2DeciOut_1
; : R_F2Hex2DeciOut_2,
;Note : Input Max = 99999999
; : Fox/2003-12-8
;=============================================================================
B_2Hex2Deci PROC
L_B2Hex2Deci: ;十六转十进制
CLR R_F2Hex2DeciOut_0
CLR R_F2Hex2DeciOut_1
CLR R_F2Hex2DeciOut_2
MOV A, 16
MOV R_F2Hex2DeciCnt, A
L_B2Hex2DeciLoop:
CLR C
RLC R_F2Hex2DeciIn_0
RLC R_F2Hex2DeciIn_1
MOV A, R_F2Hex2DeciOut_0
ADC A, R_F2Hex2DeciOut_0
DAA Acc
MOV R_F2Hex2DeciOut_0, A
MOV A, R_F2Hex2DeciOut_1
ADC A, R_F2Hex2DeciOut_1
DAA Acc
MOV R_F2Hex2DeciOut_1, A
MOV A, R_F2Hex2DeciOut_2
ADC A, R_F2Hex2DeciOut_2
DAA Acc
MOV R_F2Hex2DeciOut_2, A
SDZ R_F2Hex2DeciCnt
JMP L_B2Hex2DeciLoop
L_B2Hex2DeciEnd:
RET
B_2Hex2Deci ENDP
;=============================================================================
;=============================================================================
;乘除子程序
;INPUT : R_FCalcIn_0, R_FCalcIn_1, R_FCalcIn_2, R_FCalcMuL_0, R_FCalcMuL_1,
; : R_FCalcMuL_2, R_FCalcDiv_0, R_FCalcDiv_1, R_FCalcDiv_2
;USERRAM : R_FCalcBig_0, R_FCalcBig_1, R_FCalcBig_2, R_FCalcBig_3, R_FCalcCnt
; R_FCalcReg_0, R_FCalcReg_1, R_FCalcReg_2, R_FCalcReg_3
;OUTPUT : R_FCalcOut_0, R_FCalcOut_1
;=============================================================================
B_Calc PROC
L_BCalc:
CLR R_FCalcOut_0
CLR R_FCalcOut_1
CLR R_FCalcOut_2
CLR R_FCalcBig_0
CLR R_FCalcBig_1
CLR R_FCalcBig_2
CLR R_FCalcBig_3
CLR R_FCalcBig_4
CLR R_FCalcBig_5
L_BCalcMult:
MOV A, 24 ;3*8=24
MOV R_FCalcCnt, A
L_BCalcMultLoop:
CLR C
RRC R_FCalcMuL_2
RRC R_FCalcMuL_1
RRC R_FCalcMuL_0
SNZ C
JMP L_BCalcMultEnd
MOV A, R_FCalcIn_0
ADDM A, R_FCalcBig_0
MOV A, R_FCalcIn_1
ADCM A, R_FCalcBig_1
MOV A, R_FCalcIn_2
ADCM A, R_FCalcBig_2
MOV A, R_FCalcOut_0
ADCM A, R_FCalcBig_3
MOV A, R_FCalcOut_1
ADCM A, R_FCalcBig_4
MOV A, R_FCalcOut_2
ADCM A, R_FCalcBig_5
L_BCalcMultEnd:
CLR C
RLC R_FCalcIn_0
RLC R_FCalcIn_1
RLC R_FCalcIn_2
RLC R_FCalcOut_0
RLC R_FCalcOut_1
RLC R_FCalcOut_2
SDZ R_FCalcCnt
JMP L_BCalcMultLoop
L_BCalcDivi:
MOV A, 48 ;6*8=48
MOV R_FCalcCnt, A
CLR R_FCalcIn_0
CLR R_FCalcIn_1
CLR R_FCalcIn_2
CLR R_FCalcOut_0
CLR R_FCalcOut_1
CLR R_FCalcOut_2
L_BCalcDiviLoop:
CLR C
RLC R_FCalcBig_0
RLC R_FCalcBig_1
RLC R_FCalcBig_2
RLC R_FCalcBig_3
RLC R_FCalcBig_4
RLC R_FCalcBig_5
RLC R_FCalcIn_0
RLC R_FCalcIn_1
RLC R_FCalcIn_2
SET C
MOV A, R_FCalcIn_0
SBC A, R_FCalcDiv_0
MOV R_FCalcIn_0, A
MOV A, R_FCalcIn_1
SBC A, R_FCalcDiv_1
MOV R_FCalcIn_1, A
MOV A, R_FCalcIn_2
SBC A, R_FCalcDiv_2
MOV R_FCalcIn_2, A
SZ C
JMP L_BCalcDiviMore
MOV A, R_FCalcDiv_0
ADDM A, R_FCalcIn_0
MOV A, R_FCalcDiv_1
ADCM A, R_FCalcIn_1
MOV A, R_FCalcDiv_2
ADCM A, R_FCalcIn_2
CLR C
JMP L_BCalcDiviEnd
L_BCalcDiviMore:
SET C
L_BCalcDiviEnd:
RLC R_FCalcOut_0
RLC R_FCalcOut_1
RLC R_FCalcOut_2
SDZ R_FCalcCnt
JMP L_BCalcDiviLoop
RET
B_Calc ENDP
;=============================================================================
;=============================================================================
;LCD子程序
;INPUT RAM :R_LCDReg_0, R_LCDReg_1, R_LCDReg_2, R_LCDReg_3,
; :R_LCDFlag
;USER RAM :R_FLCDPubCnt ,R_FLCDPubReg
;OUTPUT RAM : LCD RAM
;=============================================================================
B_LCD PROC
L_BLCD:
L_BLCDClr:
MOV A, 00
; CALL B_AllLCD
L_BLCDNumb:
MOV A, OFFSET R_LCDReg_3 ;给的第一个数据
MOV MP0, A
MOV A, 40H ;LCDRam开始的地址
MOV MP1, A
MOV A, 4 ;要显示的7段数量
MOV R_FPubReg_3, A
L_BLCDNumbLoop:
MOV A, R0
MOV TBLP, A
TABRDL R_FPubReg_2
MOV A, R_FPubReg_2
MOV R1, A
INC MP1
SWAPA R_FPubReg_2
MOV R1, A
INC MP1
DEC MP0
SDZ R_FPubReg_3
JMP L_BLCDNumbLoop
L_BLCDFlag:
MOV A, 48H
MOV MP1, A
CLR R1
SZ R_LCDKG_F ;KG ?
SET R1.3
SZ R_LCDLB_F ;LB ?
SET R1.2
SZ R_LCDST_F ;ST ?
SET R1.1
MOV A, 47H
MOV MP1, A
SZ R_LCDP1_F ;P1 ?
SET R1.0
MOV A, 43H
MOV MP1, A
SZ R_LCDCOL_F ;COL ?
SET R1.0
L_BLCDEnd:
RET
B_LCD ENDP
;=============================================================================
;===========================================================================
;读按键
;INPUT RAM :
;USER RAM :
;OUTPUT RAM :
;Note :
; : Fox/2007-02-13
;============================================================================
B_ReadKey PROC
L_FReadKey:
L_FReadKeyCali: ;标定
SNZ P_KeyCali_F ;松键 ?
JMP $+3
SET R_FKeyCaliL_F ;设松键标志位
JMP $+6
SNZ R_FKeyCaliL_F ;.NOT.松键标志位?
JMP $+3
SET R_FKeyCaliP_F ;设按键标志位
NOP
; CALL B_Buzzer ;响蜂鸣器200mS
CLR R_FKeyCaliL_F ;清松键标志位
L_FReadKeyEnd:
RET
B_ReadKey ENDP
;============================================================================
;=============================================================================
;清空LCD子程序
;INPUT RAM :
;USER RAM :
;OUTPUT RAM :
;=============================================================================
B_ClrLCD PROC
L_CLRLCD:
MOV A, 40H
MOV MP1, A
MOV A, 0BH
CLR R1
INC MP1
SDZ Acc
JMP $-3
CLR R1
L_CLRLCDEnd:
RET
B_ClrLCD ENDP
;=============================================================================
;=============================================================================
;初始化计算程序
;=============================================================================
B_InitCalc PROC
L_BFInitCalc:
CLR R_FCalcIn_1
CLR R_FCalcIn_2
CLR R_FCalcDiv_1
CLR R_FCalcDiv_2
CLR R_FCalcMuL_1
CLR R_FCalcMuL_2
MOV A, 1
MOV R_FCalcIn_0, A
MOV R_FCalcDiv_0, A
MOV R_FCalcMuL_0, A
RET
L_BFInitCalcEnd:
B_InitCalc ENDP
;=============================================================================
;=============================================================================
B_Delay2000mS PROC
L_BDelay2000mS:
MOV A, 20
MOV R_FDelayCnt_H, A
L_BDelay2000mSLoop:
CALL B_Delay100mS
SDZ R_FDelayCnt_H
JMP L_BDelay2000mSLoop
RET
B_Delay2000mS ENDP
;=============================================================================
;=============================================================================
;延时10mS
;Input :
;USER :
;Output :
;=============================================================================
B_Delay10mS PROC
L_BDelay10mS:
MOV A, 13 ;13*256*3=9984uS
MOV R_FDelayCnt_L, A ;=9.9mS
MOV A, 0FFH
SDZ Acc
JMP $-1
SDZ R_FDelayCnt_L
JMP $-3
L_BDelay10mSEnd:
; CLR WDT
RET
B_Delay10mS ENDP
;=============================================================================
;=============================================================================
;读字母的Tab
;INPUT : A
;USER :
;OUTPUT : R_LCDReg_0, R_LCDReg_1, R_LCDReg_2, R_LCDReg_3, R_LCDFlag
;=============================================================================
B_ReadWord PROC
L_BReadWord:
MOV R_LCDReg_0, A
INC Acc
MOV R_LCDReg_1, A
INC Acc
MOV R_LCDReg_2, A
INC Acc
MOV R_LCDReg_3, A
CLR R_LCDFlag
L_BReadWordEnd:
SET R_ShowWord_F
RET
B_ReadWord ENDP
;=============================================================================
;=======================================================================================
; LCD的Tab
;=======================================================================================
ORG 0700H
;=============================================================================
;LCD的Tab
TabLCD:
TabLCDNumb: ;数字
; ABCPFGED
DW 11101011B ;'0'
DW 01100000B ;'1'
DW 11000111B ;'2'
DW 11100101B ;'3'
DW 01101100B ;'4'
DW 10101101B ;'5'
DW 10101111B ;'6'
DW 11100000B ;'7'
DW 11101111B ;'8'
DW 11101101B ;'9'
TabLCDEmpty: ;什么都不显示
DW 00000000B ;' '
; TabLCDC:
; DW 10001011B ;'C'
; TabLCDA:
; DW 11101110B ;'A'
; TabLCDL:
; DW 00001011B ;'L'
TabLCDErr1: ;读写2402出错,'Err1'
DW 01100000B ;'1'
DW 00000110B ;'r'
DW 00000110B ;'r'
DW 10001111B ;'E'
TabLCDErr2: ;标定值出错,'Err2'
DW 11000111B ;'2'
DW 00000110B ;'r'
DW 00000110B ;'r'
DW 10001111B ;'E'
TabLCDErr: ;正溢出,'Err'
DW 00000000B ;' '
DW 00000110B ;'r'
DW 00000110B ;'r'
DW 10001111B ;'E'
TabLCDPL: ;低电,' PL '
DW 00000000B ;' '
DW 00001011B ;'L'
DW 11001110B ;'P'
DW 00000000B ;' '
;TabLCDHELO: ;上电,'HELO'
; DW 11101011B ;'0'
; DW 00001011B ;'L'
; DW 10001111B ;'E'
; DW 01101110B ;'H'
TabLCD____: ;负溢出,'----'
DW 00000100B ;'-'
DW 00000100B ;'-'
DW 00000100B ;'-'
DW 00000100B ;'-'
TabLCDPASS: ;'PASS'
DW 10101101B ;'S'
DW 10101101B ;'S'
DW 11101110B ;'A'
DW 11001110B ;'P'
TabLCDNega: ;负号,'-'
DW 00000100B ;'-'
;=============================================================================
;******************************************************************************************************;
;******** 文件标题: I2C总线读写模块 ********;
;******** 文件描述: 读写I2C器件的通用源程序 ********;
;******** 适用芯片: HT全系列 ********;
;******** 指 令 集: 合泰精简指令集 ********;
;******************************************************************************************************;
;
;功能说明: 用于I2C总线的通讯,时钟频率为100KHz
;
;变量定义:
; IO :P_SCL_F(时钟线) P_SCLIn_F(时钟线IO控制) P_SDA_F(数据线) P_SDAIn_F(数据线IO控制)
; R_FArrayAddr_H和R_FArrayAddr_L(MCU中寄存器组首地址的高低位) R_FI2CRead_F(读/写标志)
; R_F24C02Cnt(数据个数) R_F24C02Addr(24CXX内部地址) R_FI2CErr_F(存储器出错标志)
; RAM:R_FI2CData(数据内容) R_FI2CCnt(读写次数) A(公用计数器)
;
;备注说明: F_24C02这个函数是基于24C02编写的读写程序,对于24C16或其他的I2C存储器件,可能要修改后才能应用
; 24CXX系列存储器内部地址是分页的,其内部分为页地址与字节地址,如果是进行页写入,字节地址是会
; 自动递增的,但是字节地址到了页边界后,递增出现跨页情况时,页地址是不会自动递增的,字节地址就
; 会回到该页的首地址,覆盖掉原来的数据,所以,当字节地址到达页尾(24C02一页有8个字节,页边界是
; 0111B,如果0页的字节地址为111B,再递增的话,变为000B,此时要手动把页地址加1,则变为1页的000B)
; 如果是进行页读写,则不存在上述问题,只须指定首地址,存储器会自动递增字节地址与页地址
; I2C的SDA线必须是带上拉的
;
;修改日志:
;
;第一次修改由◥HX◤于深圳2006--完成
; #A2.
;======================================================================================================;
;函数名称: F_24C02
;功能作用: 24C02系列存储器的读写操作
;输入参数: R_FArrayAddr_H和R_FArrayAddr_L(MCU中的寄存器组首地址的高低位) R_FI2CRead_F(读/写标志)
; : R_F24C02Addr(24CXX内部地址) R_F24C02Cnt(数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -