📄 等精度数字频率计的设计(汇编语言和vhdl语言).txt
字号:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN :
MOV SP,#60H
MOV 10H,#10H
MOV 3FH,#0FH
MOV 3EH,#00H
MOV 3DH,#00H
MOV 3CH,#00H
MOV 0AH,#00H
MOV 0BH,#00H
MOV A,#0FH
LCALL DIRR00
KKE1: LCALL KKEYI ;键盘信号搜索
KCACOM: LCALL KCOM1 ; A > 9 执行键盘命令
LJMP KKE1
DELAY1: MOV R1,#6FH
WWW1: MOV R0,#0FFH
NMN1: DJNZ R0,NMN1
DJNZ R1,WWW1
RET
DELAY2: MOV R1,#0fFH
WWW2: MOV R0,#0FFH
NMN2: DJNZ R0,NMN2
DJNZ R1,WWW2
RET
DELAY3: MOV R1,#0fFH
WWW3: MOV R0,#0FFH
WWW4: MOV R2,#00FH
NMN5: DJNZ R2,NMN5
DJNZ R0,WWW4
DJNZ R1,WWW3
RET
; 66666666666666666666666666666666666666666666666
KN888: LJMP KN88
KCOM1: CJNE A,#00H,KN888 ; 键1控制
MOV 18H,#25H
MOV 17H,#01H
MOV 0BH,#00H
MOV 0AH,#00H
LJMP TESTF1 ; 测频率
KNJ99: LJMP KN99
KN88: CJNE A,#01H,KNJ99 ; 键2控制
RET ; 测占空比
KAAN7: LJMP KAAN ; 测脉宽
KN99: CJNE A,#02H,KAAN7 ; 键3控制
RET
;PPPPPPPPPPPPPPPPPPPPPPPPPPPPP
KAAN: CJNE A,#03H,KBBN ; 测相差 ; 键4控制
RET
KBBN: CJNE A,#04H,KDDN ; 键5控制
RET
KDDN: CJNE A,#05H,KEEN ; 键6控制
RET
KEEN: CJNE A,#06H,KFFN ; 键7控制
RET
KFFN: CJNE A,#07H,KZZN ; 键8控制
KZZN: RET
LJMP KKE1
; LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
; 测频率
; F = {(TCLK X 50MHz ) X 1000000} / BCLK
IF 1=3
TESTF:
LCALL DELAY2
SETB P2.7 ; START 口预备
CLR P2.1 ; CL
SETB P2.3 ; EEND:
SETB P2.2 ; SPUL:选择CL为预置门控信号
CLR P2.0
SETB P2.0
CLR P2.0 ; 清零
SETB P2.1 ; CL : 预置门打开
WWTT: JNB P2.7,WWTT ; 测START口,为1,表明已经开始计数,否则继续等待LCALL DELAY1 ; 已经开始计数,设置计数时间
CLR P2.1 ; 设置CL为0,关闭预置门
WWTT1: JB P2.7,WWTT1 ; 测START口,若为1,表明仍在计数,继续等待
CLR P2.1 ; 计数结束,可以读出计数结果
ENDIF
TESTF1:
CLR P2.6 ; SEL2 : 读标准频率数
CLR P2.5 ; SEL1
CLR P2.4 ; SEL0
LCALL DELAY3
MOV A,P0
LCALL DELAY2
MOV 20H,A ; 读标准频率最底8位数
SETB P2.4 ; SEL0
CLR P2.5 ; SEL1
CLR P2.6 ; SEL2
LCALL DELAY3
MOV A,P0
LCALL DELAY2
MOV 21H,A
CLR P2.4 ; SEL0
SETB P2.5 ; SEL1
CLR P2.6 ; SEL2
LCALL DELAY3
MOV A,P0
LCALL DELAY2
MOV 22H,A
SETB P2.4 ; SEL0 23H,22H,21H,20H 标准频率计数
SETB P2.5 ; SEL1
CLR P2.6 ; SEL2
LCALL DELAY3
MOV A,P0
LCALL DELAY2
MOV 23H,A ; 读标准频率最高8位数
; IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
CLR P2.4 ; SEL0
CLR P2.5 ; SEL1
SETB P2.6 ; SEL2 读待测频率数
LCALL DELAY3
MOV A,P0
LCALL DELAY2
MOV 24H,A
SETB P2.4 ; SEL0
CLR P2.5 ; SEL1
SETB P2.6 ; SEL2
LCALL DELAY3
MOV A,P0
LCALL DELAY2
MOV 25H,A
CLR P2.4 ; SEL0
SETB P2.5 ; SEL1
SETB P2.6 ; SEL2
LCALL DELAY3
MOV A,P0
LCALL DELAY2
MOV 26H,A
SETB P2.4 ; SEL0 27H,26H,25H,24H 待测频率计数
SETB P2.5 ; SEL1
SETB P2.6 ; SEL2
LCALL DELAY3
MOV A,P0
LCALL DELAY2
MOV 27H,A
; KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK计算
TEST01:
if 1=4
MOV 4AH,#2DH ;16H ; 50MHZ X 1000000 = 2D79883D2000H
MOV 4BH,#79H ;0BCH
MOV 4CH,#88H ;0C4H
MOV 4DH,#3DH ;1EH
MOV 4EH,#20H ;90H
MOV 4FH,#00H
MOV 4AH,#00H ;16H ; 50MHZ X 1000000 = 2D79883D2000H
MOV 4BH,#00H ;0BCH
MOV 4CH,#00H ;0C4H
MOV 4DH,#0B7H ;1EH
MOV 4EH,#1BH ;90H
MOV 4FH,#00H
endif
MOV 4AH,#00H ;00H ; 20MHZ = 01312D00H
MOV 4BH,#00H ;00H
MOV 4CH,#01H ;01H
MOV 4DH,#31H ;31H
MOV 4EH,#2DH ;2DH
MOV 4FH,#00H ;00H
MOV 5AH,#00H
MOV 5BH,#00H
MOV 5CH,27H
MOV 5DH,26H
MOV 5EH,25H
MOV 5FH,24H
LCALL MULNM ; 50MHZ X 1000000 = 2D79883D2000H
MOV 44H,54H
MOV 45H,55H
MOV 46H,56H
MOV 47H,57H
MOV 48H,58H
MOV 49H,59H
MOV 4AH,5AH
MOV 4BH,5BH
MOV 4CH,5CH
MOV 4DH,5DH
MOV 4EH,5EH
MOV 4FH,5FH
MOV 5AH,#00H
MOV 5BH,#00H
MOV 5CH,23H
MOV 5DH,22H
MOV 5EH,21H
MOV 5FH,20H
LCALL DIVD1
MOV 30H,4FH
MOV 31H,4EH
MOV 32H,4DH
MOV 33H,4CH
MOV 34H,4BH
MOV 35H,4AH
MOV 36H,#00H
LCALL HEXBC
; 00000000000000000000000000000
L43Y: MOV A,40H ; 显示
ANL A,#0FH
MOV 72H,A
MOV A,40H
ANL A,#0F0H
SWAP A
MOV 73H,A
MOV A,41H
ANL A,#0FH
MOV 74H,A
MOV A,41H
ANL A,#0F0H
SWAP A
MOV 75H,A
MOV A,42H
ANL A,#0FH
MOV 76H,A
MOV A,42H
ANL A,#0F0H
SWAP A
MOV 77H,A
MOV A,43H
ANL A,#0FH
MOV 78H,A
MOV A,43H
ANL A,#0F0H
SWAP A
MOV 79H,A
LCALL DIRR00
SJMP $
; LJMP TESTF ;RET
DIRR00: PUSH DPL
PUSH DPH ; 显示子程序
MOV R3,#08H
MOV R1,#72H
NOPOT0: MOV A,@R1 ; CDIR
MOV DPTR,#ZASU91
MOVC A,@A+DPTR
MOV @R1,A
INC R1
DJNZ R3,NOPOT0
MOV R1,#79H
MOV R3,#08H
JQO0: MOV A,@R1
MOV SBUF,A
JNB TI,$
CLR TI
DEC R1
DJNZ R3,JQO0
POP DPH
POP DPL
RET
; a,b,c,d,e,f,g,h
ZASU91:db 0c0h,0f9h,0a4h,0b0h,99h,92h
db 82h,0f8h,80h,90h,88h
db 83h,0c6h,0a1h,86h,8eh
db 8ch,0bfh,0ffh,0ch,89h,0c7h
BCDHEX : NOP ; N BYTES COMPRESSED BCD CODES TO M BYTES HEX CODES
MOV 30H,#07H ; HERE N=M=7 BCD(49,4A,4B,4C,4D,4E,4FH)--HEX(49,4A,4B,4C,5D,5E,5FH)
MOV 31H,#07H
MOV R1,#ADB
MOV R2,AD1
MOV R3,AD0
MOV A,#ADA
CLR C
SUBB A,R3
INC A
MOV R0,A
DBNZ: MOV @R1,#00H
DEC R1
DJNZ R2,DBNZ
SJMP DBNB
DBNJ: MOV R1,#ADB
MOV R2,AD1
CLR 00H
CLR A
DBNM: XCH A,@R1
MOV B,#64H
MUL AB
MOV C,00H
ADDC A,@R1
MOV @R1,A
MOV 00H,C
MOV A,B
DEC R1
DJNZ R2,DBNM
DBNB: CLR A
XCHD A,@R0
XCH A,@R0
SWAP A
MOV B,#0AH
MUL AB
ADD A,@R0
INC R0
DBNA: MOV R2,AD1
DEC R2
MOV R1,#ADB
ADD A,@R1
MOV @R1,A
DBNL: DEC R1
CLR A
ADDC A,@R1
MOV @R1,A
DJNZ R2,DBNL
DJNZ R3,DBNJ
RET
DB 02H,12H
; llllllllllllllllllllllllllllllllllllllllllll
HEXBCD : NOP ; 7 BYTE HEX TO 8 BYTE BCD : HEX(3XH-30H)-->BCD(4XH-40H)
MUBTD: MOV R0,#40H
MOV R7,#08H
CLR A
LOPP1: MOV @R0,A
INC R0
DJNZ R7,LOPP1
MOV R7,#38H
LOOP4: MOV R1,#30H
MOV R6,#07H
CLR C
LOPP2: MOV A,@R1
RLC A
MOV @R1,A
INC R1
DJNZ R6,LOPP2
MOV R5,#08H
MOV R0,#40H
LOOP3: MOV A,@R0
ADDC A,@R0
DA A
MOV @R0,A
INC R0
DJNZ R5,LOOP3
DJNZ R7,LOOP4
RET
; kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
DIVD1: NOP ; 2N BYTE / N BYTE = N BYTE ,HERE N=3 IN 31H
MOV 30H,#0CH ; (4A,4B,4C,4D,4E,4FH)/(5D,5E,5FH)=(4D,4E,4FH)
MOV 31H,#06H
DIVPP: MOV A,AD1
MOV R2,A
RL A
RL A
RL A
MOV R3,A
CLR 0F0H
CLR C
MOV A,#ADA
SUBB A,R2
MOV AD3,A
MOV R1,#ADB
DIVMB2B: MOV A,@R1
JNZ DIVM2B
DEC R1
DJNZ R2,DIVMB2B
SETB 0F0H
RET
DIVM2B: MOV R2,AD1
MOV R1,#ADB
MOV R0,AD3
DIVM2L: MOV A,@R0
SUBB A,@R1
DEC R0
DEC R1
DJNZ R2,DIVM2L
JNC DIVM20
DIVM2D: LCALL SHIL1
JC DIVM2S
DIVM2C: MOV R0,AD3
MOV R1,#ADB
MOV R2,AD1
DIVM2CL: MOV A,@R0
SUBB A,@R1
DEC R0
DEC R1
DJNZ R2,DIVM2CL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -