📄 ht1621.dt
字号:
;FOR LCM 1621
;R1--传递指令码/显示码
;R0--传递地址
;单LCD屏+MPU+双PLL麦克风程序
;芯片为EM78P447SBP
;振荡模式为4MHz晶振
;看门狗关,指令周期为2个CLOCK
;==============寄存器的定义========================
R0 == 0X00
TCC == 0X01
PC == 0X02
SREG == 0X03
C==0
DC==1
Z==2
P==3
T==4
PS0==5
PS1==6
CMPOUT==7
R4 == 0X04
P5 == 0X05
K1 == 0
K2 == 1
K3 == 2
K4 == 3
K5 == 4
DAT== 5
_WR== 6
CS == 7
P6 == 0X06
AB1==0
AF1==1
ANT1==2
RF1==3
AB2==4 ;无上拉
AF2==5
ANT2==6
RF2==7
IOCB == 0XB ;下拉控制
IOCC == 0XC ;漏极开路控制
IOCD == 0XD ;上拉控制
R_F == 0XF ;中断状态寄存器
IOCF== 0XF ;IOW中断屏蔽寄存器
;ADC Contro Registers
ADDATA == 0XA ;MOV
ADCONR == 0X9 ;MOV
ADRUN==4
ADPD==3
ADIS2==2 ;模拟输入选择
ADIS1==1
ADIS0==0
ADCONC == 0XA ;IOW
VREFS==7 ;参考电压,0为工作电压
CE==6
COE==5
IMS2==4 ;模拟和数据I/O口选择
IMS1==3
IMS0==2
CKR1==1 ;ADC时钟分频数
CKR0==0
GCON == 0X9 ;IOW
OP2E==7 ;增溢放大器2,==0时OP2关闭
OP1E==6
G22==5 ;增溢选择
G21==4
G20==3
G12==2
G11==1
G10==0
;============用户寄存器========================================
TMP ==0XB
FG ==0XC ;低两位
; DATA ==0XD
; ==0XE ;低两位
S1 == 0X10 ;通用寄存器
S2 == 0X11
S3 == 0X12
CNT0 == 0X14
CNT1 == 0X15
ADRL == 0X16
ADRH == 0X17
DATA == 0X18
ADDR == 0X19
; == 0X1A
; == 0X1B
; == 0X1C
; == 0X1D
; == 0X1E
; == 0X1F
;==========================STAR0===============================
ORG 0
JMP INITIAL
ORG 1 ;软件中断地址
RETI
ORG 8 ;硬件中断地址
RETI
ORG 10
;---------------------------------------------
CODEB: ;七段LED数据
ADD PC, A
RETL @0XEB ;0
RETL @0X0A ;1
RETL @0X29 ;2
RETL @0X8F ;3
RETL @0X4E ;4
RETL @0XC6 ;5
RETL @0XE6 ;6
RETL @0X8A ;7
RETL @0XEF ;8
RETL @0XCF ;9
;----------------------------------------------
INITB:
ADD PC,A
RETL @0X00 ;0
RETL @0X01 ;1
RETL @0X02 ;2
RETL @0X04 ;3
RETL @0X08 ;4
RETL @0X0E ;5
RETL @0X0B ;6
RETL @0X0E ;7
RETL @0X0B ;8
RETL @0X0E ;9
RETL @0X0B ;10
RETL @0X0F ;11
RETL @0X0B ;12
RETL @0X08 ;13
RETL @0X00 ;14
RETL @0X00 ;15
RETL @0X00 ;16
RETL @0X0E ;17
RETL @0X0B ;18
RETL @0X0E ;19
RETL @0X0B ;20
RETL @0X0E ;21
RETL @0X0B ;22
RETL @0X0F ;23
RETL @0X0B ;24
RETL @0X08 ;25
RETL @0X08 ;26
RETL @0X00 ;27
RETL @0X00 ;28
RETL @0X01 ;29
RETL @0X01 ;30
;----------------------------------------------
FREQB:
ADD PC,A
RETL @0X00 ;0 低位数=0,25,50,75无显示
RETL @0X01 ;1 低位数=1,25显示,50,75无显示
RETL @0X02 ;2 低位数=2,50显示,25,75无显示
RETL @0X03 ;3 低位数=3,75显示,25,50无显示
RETL @0X10 ;4 高位数为小数点后的一个七段要显示的数
RETL @0X11 ;5
RETL @0X12 ;6
RETL @0X13 ;7
RETL @0X20 ;8
RETL @0X21 ;9
RETL @0X22 ;10
RETL @0X23 ;11
RETL @0X30 ;12
RETL @0X31 ;13
RETL @0X32 ;14
RETL @0X33 ;15
RETL @0X40 ;16
RETL @0X41 ;17
RETL @0X42 ;18
RETL @0X43 ;19
RETL @0X50 ;20
RETL @0X51 ;21
RETL @0X52 ;22
RETL @0X53 ;23
RETL @0X60 ;24
RETL @0X61 ;25
RETL @0X62 ;26
RETL @0X63 ;27
RETL @0X70 ;28
RETL @0X71 ;29
RETL @0X72 ;30
RETL @0X73 ;31
;----------------------------------------------
INITIAL:
MOV A,@0B10111011 ;ANT1,ANT2下接
IOW IOCB
MOV A,@0B11111111
IOW IOCC
MOV A,@0B11111110 ;AB1上拉,AB2无上拉,外接
IOW IOCD
MOV A,@0B00011111
IOW P5
MOV A,@0B11111111
IOW P6
DISI
INI1621:
MOV A,@0X01 ;SYS EN
MOV DATA,A
CALL INCOM
MOV A,@0X03
; MOV A,@0X18 ;RC 256K
MOV DATA,A
CALL INCOM
MOV A,@0X29 ;BIAS 1/3(USE COM0-COM3)
MOV DATA,A
CALL INCOM
CALL DISALL ;开显示
W1S: MOV A,@0XC8 ;延时1S
MOV S1,A
WW: CALL DELAY5MS
DJZ S1
JMP WW
CALL CLRALL ;关显示
MOV A,@0X21 ;显示数据起始位置
MOV R4,A
MOV A,@0X01
MOV ADDR,A
INILCD:MOV A,ADDR
CALL INITB
MOV R0,A
MOV DATA,A
CALL INDAT
INC R4
INC ADDR
MOV A,ADDR
XOR A,@31
JBS SREG,Z
JMP INILCD
WHILE:
MOV A,P5 ;检测K1-K5,显示R1,R2,R3
AND A,@0X1F
CALL FREQB
MOV S2,A
SWAP S2
MOV A,S2
AND A,@0X0F
CALL CODEB
MOV S3,A
SWAP S3
MOV A,S3
AND A,@0X0F
MOV S1,A
MOV A,0X25
AND A,@0X01
OR A,S1
MOV DATA,A
MOV A,@0X5
MOV ADDR,A
CALL INDAT
SWAP S3
MOV A,S3
AND A,@0X0F
MOV DATA,A
INC ADDR
CALL INDAT
SWAP S2
MOV A,S2
AND A,@0X0F
MOV S3,A
XOR A,@0X01
JBS SREG,Z
JMP S50
MOV A,0X29
OR A,@0X01 ;第9位R1=1
MOV 0X29,A
MOV A,0X27
AND A,@0X0E
MOV 0X27,A
MOV A,0X25
AND A,@0X0E
MOV 0X25,A
JMP LOAD
S50: MOV A,S3
XOR A,@0X02
JBS SREG,Z
JMP S75
MOV A,0X27
OR A,@0X01 ;第7位R2=1
MOV 0X27,A
MOV A,0X29
AND A,@0X0E
MOV 0X29,A
MOV A,0X25
AND A,@0X0E
MOV 0X25,A
JMP LOAD
S75:MOV A,0X25
OR A,@0X01 ;第5位R3=1
MOV 0X25,A
MOV A,0X29
AND A,@0X0E
MOV 0X29,A
MOV A,0X27
AND A,@0X0E
MOV 0X27,A
LOAD:
MOV A,0X25
MOV DATA,A
MOV A,@0X05
MOV ADDR,A
CALL INDAT
MOV A,0X27
MOV DATA,A
INC ADDR
INC ADDR
CALL INDAT
MOV A,0X29
MOV DATA,A
INC ADDR
INC ADDR
CALL INDAT
CH_ANT1:
JBS P6,ANT1
JMP ANT_10
MOV A,0X3E ;第30位R4=1
OR A,@0X08
MOV 0X3E,A
MOV DATA,A
MOV A,@0X1E
MOV ADDR,A
CALL INDAT
JMP CANT2
ANT_10: MOV A,0X3E ;第30位R4=0
AND A,@0X07
MOV 0X3E,A
MOV DATA,A
MOV A,@0X1E
MOV ADDR,A
CALL INDAT
CANT2: JBS P6,ANT2
JMP ANT_20
MOV A,0X39 ;第25位R11=1
OR A,@0X01
MOV 0X39,A
MOV DATA,A
MOV A,@0X19
MOV ADDR,A
CALL INDAT
JMP CH_AB
ANT_20: MOV A,0X39 ;第25位R11=0
AND A,@0X0E
MOV 0X39,A
MOV DATA,A
MOV A,@0X19
MOV ADDR,A
CALL INDAT
CH_AB: JBS P6,AB1
JMP AB_10
MOV A,0X3E
OR A,@0X04 ;第30位R5=1
AND A,@0XFD ;第30位R6=0
MOV 0X3E,A
MOV DATA,A
MOV A,@0X1E
MOV ADDR,A
CALL INDAT
JMP CAB2
AB_10: MOV A,0X3E
OR A,@0X02 ;第30位R6=1
AND A,@0XFB ;第30位R5=0
MOV 0X3E,A
MOV DATA,A
MOV A,@0X1E
MOV ADDR,A
CALL INDAT
CAB2: JBS P6,AB2
JMP AB_20
MOV A,0X39
OR A,@0X02 ;第25位R12=1
AND A,@0XFB ;第25位R13=0
MOV 0X39,A
MOV DATA,A
MOV A,@0X19
MOV ADDR,A
CALL INDAT
JMP INIADC
AB_20: MOV A,0X39
OR A,@0X04 ;第25位R13=1
AND A,@0XFD ;第25位R12=0
MOV 0X39,A
MOV DATA,A
MOV A,@0X19
MOV ADDR,A
CALL INDAT
INIADC:
MOV A,@0B00011100 ;工作电压作参考,AD0-AD7模拟输入,T=fosc/4
IOW ADCONC
CLR R_F
MOV A,ADCONR
AND A,@0XF8
OR A,@0X01 ;AD2(AF1)输入
MOV ADCONR,A
BS ADCONR,ADPD ;启动AD采样
MOV A,@0B00000000
IOW GCON ;关增溢放大器
BS ADCONR,ADRUN ;启动AD转换
CH_AF1: JBC ADCONR,ADRUN
JMP CH_AF1
MOV A,ADDATA
MOV TMP,A
MOV A,@0X1C
MOV ADRL,A
MOV A,@0X1D
MOV ADRH,A
CLR FG
CALL DISVUTS
CLR R_F
MOV A,ADCONR
AND A,@0XF8
OR A,@0X03 ;AD4(RF1)输入
MOV ADCONR,A
BS ADCONR,ADRUN ;启动AD转换
CH_RF1: JBC ADCONR,ADRUN
JMP CH_RF1
MOV A,ADDATA
MOV TMP,A
MOV A,@0X0E
MOV ADRL,A
MOV A,@0X0D
MOV ADRH,A
BS FG,0
CALL DISVUTS
CLR R_F
MOV A,ADCONR
AND A,@0XF8
OR A,@0X05 ;AD4(RF1)输入
MOV ADCONR,A
BS ADCONR,ADRUN ;启动AD转换
CH_RF2: JBC ADCONR,ADRUN
JMP CH_RF2
MOV A,ADDATA
MOV TMP,A
MOV A,@0X1B
MOV ADRL,A
MOV A,@0X1A
MOV ADRH,A
BS FG,0
CALL DISVUTS
CLR R_F
MOV A,ADCONR
AND A,@0XF8
OR A,@0X07 ;AD4(RF1)输入
MOV ADCONR,A
BS ADCONR,ADRUN ;启动AD转换
AD_AF2: JBC ADCONR,ADRUN
JMP AD_AF2
MOV A,ADDATA
MOV TMP,A
MOV A,@0X0F
MOV ADRL,A
MOV A,@0X10
MOV ADRH,A
BS FG,0
CALL DISVUTS
MOV A,@0B00000000 ;AD0模拟输入,AD1-AD7O数字I/O输入,T=fosc/4
IOW ADCONC
JMP WHILE
;===============================================
; 18 36 54 72 90 108 126
; 0.35 0.7 1 1.4 1.76 2.1 2.47
;
; ADRL ADRH
; AF1 1C(L) 1D(H) V
;
; RF1 0E(H) 0D(L) U
;
; AF2 1B(H) 1A(L) T
;
; RF2 0F(L) 10(H) S
;
; FG_0 =0 AF1
; FG_0 =1 RF1,AF2,RF2
DISVUTS:
MOV A,@0X7E ;126
SUB A,TMP
JBS SREG,C
JMP CH_AF2
MOV A,ADRL
ADD A,@0X20
MOV R4,A
MOV A,@0X0F ;V1,V2,V3,V4=1
MOV R0,A
MOV DATA,A
MOV A,ADRL
MOV ADDR,A
CALL INDAT
MOV A,ADRH
ADD A,@0X20
MOV R4,A
JBC FG,0
JMP SIG11
MOV A,R0
OR A,@0X0E
JMP SIG21
SIG11:
MOV A,R0
OR A,@0X07 ;V5,V6,V7=1
SIG21:
MOV R0,A
MOV DATA,A
MOV A,ADRH
MOV ADDR,A
CALL INDAT
RET
CH_AF2:
MOV A,@0X6C ;108
SUB A,TMP
JBS SREG,C
JMP CH_AF3
MOV A,ADRL
ADD A,@0X20
MOV R4,A
MOV A,@0X0F ;V1,V2,V3,V4=1
MOV R0,A
MOV DATA,A
MOV A,ADRL
MOV ADDR,A
CALL INDAT
MOV A,ADRH
ADD A,@0X20
MOV R4,A
JBC FG,0
JMP SIG12
MOV A,R0
OR A,@0X0C ;V5,V6=1
AND A,@0X0D ;V7=0
JMP SIG22
SIG12:
MOV A,R0
OR A,@0X03 ;V5,V6=1
AND A,@0X0B ;V7=0
SIG22:
MOV R0,A
MOV DATA,A
MOV A,ADRH
MOV ADDR,A
CALL INDAT
RET
CH_AF3:
MOV A,@0X5A ;90
SUB A,TMP
JBS SREG,C
JMP CH_AF4
MOV A,ADRL
ADD A,@0X20
MOV R4,A
MOV A,@0X0F ;V1,V2,V3,V4=1
MOV R0,A
MOV DATA,A
MOV A,ADRL
MOV ADDR,A
CALL INDAT
MOV A,ADRH
ADD A,@0X20
MOV R4,A
JBC FG,0
JMP SIG13
MOV A,R0
OR A,@0X08 ;V5=1
AND A,@0X09 ;V6,V7=0
JMP SIG23
SIG13:
MOV A,R0
OR A,@0X01 ;V5=1
AND A,@0X09 ;V6,V7=0
SIG23:
MOV R0,A
MOV DATA,A
MOV A,ADRH
MOV ADDR,A
CALL INDAT
RET
CH_AF4:
MOV A,@48 ;72
SUB A,TMP
JBS SREG,C
JMP CH_AF5
MOV A,ADRL
ADD A,@0X20
MOV R4,A
MOV A,@0X0F ;V1,V2,V3,V4=1
MOV R0,A
MOV DATA,A
MOV A,ADRL
MOV ADDR,A
CALL INDAT
MOV A,ADRH
ADD A,@0X20
MOV R4,A
JBC FG,0
JMP SIG14
MOV A,R0
AND A,@0X01 ;V5,V6,V7=0
JMP SIG24
SIG14:
MOV A,R0
AND A,@0X08 ;V5,V6,V7=0
SIG24:
MOV R0,A
MOV DATA,A
MOV A,ADRH
MOV ADDR,A
CALL INDAT
RET
CH_AF5:
MOV A,@36 ;54
SUB A,TMP
JBS SREG,C
JMP CH_AF6
MOV A,ADRL
ADD A,@0X20
MOV R4,A
MOV A,@0X07 ;V1,V2,V3=1, V4=0
MOV R0,A
MOV DATA,A
MOV A,ADRL
MOV ADDR,A
CALL INDAT
MOV A,ADRH
ADD A,@0X20
MOV R4,A
JBC FG,0
JMP SIG15
MOV A,R0
AND A,@0X01 ;V5,V6,V7=0
JMP SIG25
SIG15:
MOV A,R0
AND A,@0X08 ;V5,V6,V7=0
SIG25:
MOV R0,A
MOV DATA,A
MOV A,ADRH
MOV ADDR,A
CALL INDAT
RET
CH_AF6:
MOV A,@24 ;36
SUB A,TMP
JBS SREG,C
JMP CH_AF7
MOV A,ADRL
ADD A,@0X20
MOV R4,A
MOV A,@0X03 ;V1,V2=1,V3,V4=0
MOV R0,A
MOV DATA,A
MOV A,ADRL
MOV ADDR,A
CALL INDAT
MOV A,ADRH
ADD A,@0X20
MOV R4,A
JBC FG,0
JMP SIG16
MOV A,R0
AND A,@0X01 ;V5,V6,V7=0
JMP SIG26
SIG16:
MOV A,R0
AND A,@0X08 ;V5,V6,V7=0
SIG26:
MOV R0,A
MOV DATA,A
MOV A,ADRH
MOV ADDR,A
CALL INDAT
RET
CH_AF7:
MOV A,@12 ;18
SUB A,TMP
JBS SREG,C
JMP CH_AF8
MOV A,ADRL
ADD A,@0X20
MOV R4,A
MOV A,@0X01 ;V1=1, V2,V3,V4=0
MOV R0,A
MOV DATA,A
MOV A,ADRL
MOV ADDR,A
CALL INDAT
MOV A,ADRH
ADD A,@0X20
MOV R4,A
JBC FG,0
JMP SIG17
MOV A,R0
AND A,@0X01 ;V5,V6,V7=0
JMP SIG27
SIG17:
MOV A,R0
AND A,@0X08 ;V5,V6,V7=0
SIG27:
MOV R0,A
MOV DATA,A
MOV A,ADRH
MOV ADDR,A
CALL INDAT
RET
CH_AF8:
MOV A,ADRL
ADD A,@0X20
MOV R4,A
MOV A,@0X00 ;V1,V2,V3,V4=0
MOV R0,A
MOV DATA,A
MOV A,ADRL
MOV ADDR,A
CALL INDAT
MOV A,ADRH
ADD A,@0X20
MOV R4,A
JBC FG,0
JMP SIG18
MOV A,R0
AND A,@0X01 ;V5,V6,V7=0
JMP SIG28
SIG18:
MOV A,R0
AND A,@0X08 ;V5,V6,V7=0
SIG28:
MOV R0,A
MOV DATA,A
MOV A,ADRH
MOV ADDR,A
CALL INDAT
RET
;========================HT1621================
CLRALL:
CLR ADDR
CLR DATA
LPL: CALL INDAT
INC ADDR
MOV A,@0X20
XOR A,ADDR
JBS SREG,Z
JMP LPL
RET
;===============================================
DISALL:
CLR ADDR
MOV A,@0X0F
MOV DATA,A
LPH: CALL INDAT
INC ADDR
MOV A,@0X20
XOR A,ADDR
JBS SREG,Z
JMP LPH
RET
;===============================================
INCOM:
BC P5,CS
NOP
MOV A,@0X03
MOV S1,A
MOV A,@0X80
MOV TMP,A
SPT1: RLC TMP
JBS SREG,C
JMP ST0
BS P5,DAT
JMP SWT0
ST0: BC P5,DAT
SWT0: NOP
BC P5,_WR
NOP
BS P5,_WR
NOP
DJZ S1
JMP SPT1
MOV A,@0X09
MOV S1,A
SPT2: RLC DATA
JBS SREG,C
JMP ST1
BS P5,DAT
JMP SWT1
ST1: BC P5,DAT
SWT1: NOP
BC P5,_WR
NOP
BS P5,_WR
NOP
DJZ S1
JMP SPT2
BS P5,CS
RET
;===============================================
INDAT:
BC P5,CS
NOP
MOV A,@0X03
MOV S1,A
MOV A,@0XA0
MOV TMP,A
SPP1: RLC TMP
JBS SREG,C
JMP SB0
BS P5,DAT
JMP SWR0
SB0: BC P5,DAT
SWR0: NOP
BC P5,_WR
NOP
BS P5,_WR
NOP
DJZ S1
JMP SPP1
MOV A,ADDR
MOV TMP,A
RLC TMP ;ADDRESS(FROM 0-31)
RLC TMP
MOV A,@0X06
MOV S1,A
SPP2: RLC TMP
JBS SREG,C
JMP SB1
BS P5,DAT
JMP SWR1
SB1: BC P5,DAT
SWR1: NOP
BC P5,_WR
NOP
BS P5,_WR
NOP
DJZ S1
JMP SPP2
MOV A,DATA
MOV TMP,A
RLC TMP
RLC TMP
RLC TMP
RLC TMP
MOV A,@0X04
MOV S1,A
SPP3: RLC TMP
JBS SREG,C
JMP SB2
BS P5,DAT
JMP SWR2
SB2: BC P5,DAT
SWR2: NOP
BC P5,_WR
NOP
BS P5,_WR
NOP
DJZ S1
JMP SPP3
NOP
BS P5,CS
RET
;==============================================================
DELAY5MS: ;延时5mS
MOV A, @10
MOV CNT0, A
P0_DLY:
NOP
MOV A, @199
MOV CNT1, A
P0_LP:
NOP
NOP
NOP
DJZ CNT1 ;5 X 199 (LP_CNT1 = 199) = 995
JMP P0_LP ;5 + 995(P0_LP所有的指令) = 1000
DJZ CNT0 ;1000 X 10 (LP_CNT0 = 2) = 10000
JMP P0_DLY ;10000 + 1 (CALL)+ 1(RET) + 2(2MOV) + 1(CALL) = 10005
RET ;10005 * 0.5 = 5.0025(mS)
;===============================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -