📄 fil1256高频头程序.asm
字号:
ADD A,#5
MOV DISSHI,A
;INC DISSHI ;数据加10KHz
;MOV A,DISSHI
CJNE A,#0AH,INC1_1
MOV DISSHI,#00H
INC_BAI:
INC DISBAI ;数据加100KHz
MOV A,DISBAI
CJNE A,#0AH,INC1_1
MOV DISBAI,#00H
INC_QIAN:
INC DISQIAN ;数据加1MHz
MOV A,DISQIAN
CJNE A,#0AH,INC1_1
MOV DISQIAN,#00H
INC_WAN:
INC DISWAN ;数据加10MHz
MOV A,DISWAN
CJNE A,#0AH,INC1_1
MOV DISWAN,#00H
INC_SHIWAN:
INC DISSHIWAN ;数据加100MHz
MOV A,DISSHIWAN
CJNE A,#0AH,INC1_1
MOV DISSHIWAN,#00H
INC1_1:
MOV A,DISSHI
ANL A,#0FH
MOV DISSHI,A
AJMP DEC1_1
;--------------------------------
DEC1:
CJNE A,#02H,CODER_END
MOV BUF0,BUF1
MOV A,STEP ;判断应该在那一位减一
CJNE A,#01H,DEC_2
AJMP DEC_SHIWAN
DEC_2:
CJNE A,#02H,DEC_3
AJMP DEC_WAN
DEC_3:
CJNE A,#03H,DEC_4
AJMP DEC_QIAN
DEC_4:
CJNE A,#05H,DEC_5
AJMP DEC_BAI
DEC_5:
CJNE A,#06H,DEC_6
AJMP DEC_SHI
DEC_6:
CJNE A,#07H,DEC1_1
AJMP DEC_GE
;--------------------------------
DEC_GE:
DEC DISGE ;向百有借位
MOV A,DISGE
CJNE A,#0FFH,DEC1_1
MOV DISGE,#9
DEC_SHI:
MOV A,DISSHI ;百位减50K
SUBB A,#5
MOV DISSHI,A
CJNE A,#0FBH,DEC1_1
MOV DISSHI,#5
;DEC DISSHI ;向百有借位
;MOV A,DISSHI
;CJNE A,#0FFH,DEC1_1
;MOV DISSHI,#9
DEC_BAI:
DEC DISBAI ;向百有借位
MOV A,DISBAI
CJNE A,#0FFH,DEC1_1
MOV DISBAI,#09H
DEC_QIAN:
DEC DISQIAN ;向千有借位
MOV A,DISQIAN
CJNE A,#0FFH,DEC1_1
MOV DISQIAN,#09H
DEC_WAN:
DEC DISWAN ;向万有借位
MOV A,DISWAN
CJNE A,#0FFH,DEC1_1
MOV DISWAN,#09H
DEC_SHIWAN:
DEC DISSHIWAN ;向十万有借位
MOV A,DISSHIWAN
CJNE A,#0FFH,INC1_1
MOV DISSHIWAN,#09H
DEC1_1:
LCALL DISLCD1 ;显示
ACALL SEND_PLL ;数据送入高频头
LCALL W24C16 ;显示后将数据写入
AJMP L1
CODER_END: MOV BUF0,BUF1 ;数据不是2,或者3 跳回开始
AJMP L1
;***************************************
/*
KEYWAIT: ACALL KEYDELAY ;按键等待释放
KW: MOV KEYBOARD,#11110000B
MOV A,KEYBOARD
CJNE A,#11110000B,KW
RET */
;**************************************
KEYDELAY: ;按键延迟,并且发出声音
PUSH 00H
PUSH 01H
MOV R0,#80
LOOP1: MOV R1,#255
LOOP2: ;CPL BBB
DJNZ R1,LOOP2
DJNZ R0,LOOP1
POP 01H
POP 00H
RET
NOP
NOP
AJMP STAR
NOP
NOP
;*******************************
;**********************************
;六位BCD码转三字节二进制码子程序
;入口:GEWEI、 SHIWEI、 BAIWEI、 QIANWEI、 WANWEI、 SHIWAN(个、十、百、千、万、十万位)
;出口:OUTPUTL、OUTPUTM、OUTPUTH 高、中、低八位
;占用资源A,B,GEWEI,SHIWEI,BAIWEI,QIANWEI,WANWEI,SHIWAN,66H,67H,68H,
;69H,6AH,6BH,6CH,6DH,6EH,3FH,70H,71H,OUTPUTH,OUTPUTM
;*****************************************
KH: MOV OUTPUTL,#0
MOV OUTPUTM,#0
MOV OUTPUTH,#0
MOV TMP3,#0
MOV TMP6,#0
MOV TMP7,#0
;--------------------------------
MOV A,SHIWEI ;先转换个,十位
SWAP A
ORL A,GEWEI
CALL BCDH
MOV OUTPUTL,A
;--------------------------------
MOV A,QIANWEI ;再转换百千位
SWAP A
ORL A,BAIWEI
CALL BCDH
MOV TMP3,A
MOV TMP6,#0 ;*100
MOV TMP7,#64H
CALL MULD
MOV A,TMP7 ; TMP3(MSB) TMP6 TMP7
ADD A,OUTPUTL ; + OUTPUTH OUTPUTM OUTPUTL
MOV OUTPUTL,A ; =OUTPUTH(MSB) OUTPUTM OUTPUTL
MOV A,TMP6
ADDC A,OUTPUTM
MOV OUTPUTM,A
MOV A,TMP3
ADDC A,OUTPUTH
MOV OUTPUTH,A
;--------------------------------
MOV A,SHIWAN ;最后转换万,十万位
SWAP A
ORL A,WANWEI
CALL BCDH
MOV TMP3,A
MOV TMP6,#27H ;*10000=2710H
MOV TMP7,#10H
CALL MULD
;--------------------------------
MOV A,TMP7 ; TMP3(MSB) TMP6 TMP7
ADD A,OUTPUTL ; + OUTPUTH OUTPUTM OUTPUTL
MOV OUTPUTL,A ; =OUTPUTH(MSB) OUTPUTM OUTPUTL
MOV A,TMP6
ADDC A,OUTPUTM
MOV OUTPUTM,A
MOV A,TMP3
ADDC A,OUTPUTH
MOV OUTPUTH,A
;--------------------------------
MOV OUTPUTH,OUTPUTL
MOV OUTPUTL,A
RET
NOP
NOP
AJMP STAR
NOP
NOP
;*****************************************
;三字节除双字节商为三字节除法子程序
;被除数:BEICHUL(被除数最低位)~BEICHUH
;(被除数最高位)
;除数:CHUSHUL(除数最低位),CHUSHUH(除数最高位)
;商: SHANGL(商最低位)~SHANGH(商最高位)
;余数:YUSHUL(余数低位)~YUSHUH(余数高位)
;额外占用资源: R1,R2,R7
;------------------------------
CHUFA: MOV R7,#18H
MOV SHANGH,#0
MOV SHANGM,#0
MOV SHANGL,#0
MOV YUSHUH,#0
MOV YUSHUL,#0
SH_32DIV: CLR C
;----------------------------
MOV A,BEICHUL
RLC A
MOV BEICHUL,A
;----------------------------
MOV A,BEICHUM
RLC A
MOV BEICHUM,A
;----------------------------
MOV A,BEICHUH
RLC A
MOV BEICHUH,A
;----------------------------
MOV A,YUSHUL
RLC A
MOV YUSHUL,A
;----------------------------
MOV A,YUSHUH
RLC A
MOV YUSHUH,A
;----------------------------
MOV A,SHANGL
RLC A
MOV SHANGL,A
;----------------------------
MOV A,SHANGM
RLC A
MOV SHANGM,A
;----------------------------
MOV A,SHANGH
RLC A
MOV SHANGH,A
;+++++++++++++++++++++++++++++
CLR C
MOV A,YUSHUL
SUBB A,CHUSHUL
MOV R1,A
;-----------------------------
MOV A,YUSHUH
SUBB A,CHUSHUH
MOV R2,A
;+++++++++++++++++++++++++++++
JC TO_LOOP1
INC SHANGL
MOV A,R1
MOV YUSHUL,A
MOV A,R2
MOV YUSHUH,A
TO_LOOP1: DJNZ R7,SH_32DIV
;++++++++++++++++++++++++++++++++++
RET
NOP
NOP
AJMP STAR
NOP
NOP
;******************************************
SEND_PLL: MOV LOCK_DELAY,#0 ;将锁定检测清零
MOV LOCK_DELAY1,#0
MOV GEWEI,DISGE ;将显示BCD值送到二进制合成程序
MOV SHIWEI,DISSHI
MOV BAIWEI,DISBAI
MOV QIANWEI,DISQIAN
MOV WANWEI,DISWAN
MOV SHIWAN,DISSHIWAN
LCALL KH
;-------------------------------------------------
;----------------------------------------
MOV BEICHUH,OUTPUTL
MOV BEICHUM,OUTPUTM
MOV BEICHUL,OUTPUTH
;--------------------------------------
;---------------------------------------
;38000KHZ对应二进制数为:9470H
ADDIF: ;CLR C
; MOV A,BEICHUL
; ADD A,#70H
; MOV BEICHUL,A
; MOV A,BEICHUM
; ADDC A,#94H
; MOV BEICHUM,A
; MOV A,BEICHUH
; ADDC A,#0
; MOV BEICHUH,A
;-------------------------------------
;-------------------------------------
CLR C
MOV A,BEICHUL
SUBB A,#0C8H
MOV A,BEICHUM
SUBB A,#20H
MOV A,BEICHUH
SUBB A,#03H
JC SETUP_LHF
;---------------------------------------
MOV A,BEICHUL
SUBB A,#98H
MOV A,BEICHUM
SUBB A,#8DH
MOV A,BEICHUH
SUBB A,#07H
JC SETUP_VHF
;---------------------------------------
SETUP_UHF: MOV PB,#01111111B
AJMP CHUFSTEP
SETUP_VHF: MOV PB,#10011111B
AJMP CHUFSTEP
SETUP_LHF: MOV PB,#10101111B
AJMP CHUFSTEP
;----------------------------------------
;将合成的二进制加中频38MHZ后除以步进频率50(khz)
CHUFSTEP: MOV CHUSHUH,#0
MOV CHUSHUL,#50
LCALL CHUFA
;----------------------------------------
MOV DB2,SHANGL
MOV DB1,SHANGM
MOV ADBW,#11000010B
MOV CB,#10001000B
; ACALL DISLCD3
SEND_TURNER:
ACALL WRITE_TURN
;LCALL W24C16
RET
NOP
NOP
AJMP STAR
NOP
NOP
;*************************************
;*************************************
DISLCD1: MOV ZLING,#0C4H;#86H #0c6(16*2 ;显示键盘输入频率值
ACALL WRTC
;-------------------------------------
MOV R0,#(DISSHIWAN+1)
DISLCD1_4:
DEC R0
MOV A,@R0 ;显示100M位
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
MOV A,R0
CJNE A,#(DISQIAN),DISLCD1_3
MOV SHUJU,#00101110B ;显示小数点
ACALL WRTS
DISLCD1_3:
CJNE A,#DISGE,DISLCD1_4
;--------------------------------
MOV SHUJU,#00110000B;显示0
ACALL WRTS
MOV SHUJU,#00110000B;显示0
ACALL WRTS
;RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-------------------------------------
MOV SHUJU,#01001101B ;显示M
ACALL WRTS
;--------------------------------------
MOV SHUJU,#01001000B ;显示H
ACALL WRTS
;--------------------------------------
MOV SHUJU,#01111010B ;显示z
ACALL WRTS
;---------------------------------------
LCALL DIV_8
STEP_DIS: MOV A,STEP ;显示步进位光标
ADD A,#83H+40H
MOV ZLING,A
ACALL WRTC
;MOV SHUJU,#01111111B ;显示左箭头
;ACALL WRTS
RET
NOP
NOP
AJMP STAR
NOP
NOP
;****************************************************
ADDR_LCD: DB 00110000B ;字符“0”的地址
DB 00110001B ;字符“1”的地址
DB 00110010B ;字符“2”的地址
DB 00110011B ;字符“3”的地址
DB 00110100B ;字符“4”的地址
DB 00110101B ;字符“5”的地址
DB 00110110B ;字符“6”的地址
DB 00110111B ;字符“7”的地址
DB 00111000B ;字符“8”的地址
DB 00111001B ;字符“9”的地址
DB 01000001B ;字符“A”的地址
DB 01000010B ;字符“B”的地址
DB 01000011B ;字符“C”的地址
DB 01000100B ;字符“D”的地址
DB 01000101B ;字符“E”的地址
DB 01000110B ;字符“F”的地址
;---------------------------------------------
DB 01001000B ;字符“H”的地址
DB 01001011B ;字符“K”的地址
DB 01111010B ;字符“z”的地址
DB 00111101B ;字符“=”的地址
DB 00101110B ;字符“·”的地址
DB 01001101B ;字符“M”的地址
;*******************************************************
;********************************
;以下为LCD各个子程序程序应用部分
;********************************
;初始化LCD
;****************************************
INITLCD:
CLR RS ;送数据30H到命令寄存器
CLR RW
SETB E ;LCD_DB=30H
CLR LCD_DB7
CLR LCD_DB6
SETB LCD_DB5
CLR LCD_DB4
LCALL DELAYLCD
CLR E
LCALL DELAY_STAR
MOV ZLING,#22H ;设置位4位总线,
ACALL WRTC
RET
NOP
NOP
AJMP STAR
NOP
NOP
;****************************************
;忙标志检测子程序
READBF: SETB LCD_DB7
NOP
NOP
CLR RS
NOP
SETB RW
WAITBF: NOP
SETB E
NOP
NOP
NOP
JB BF,WAITBF
CLR E
RET
NOP
NOP
AJMP STAR
NOP
NOP
;*********************************
;写指令代码子程序
WRTC: ACALL READBF ;读忙标志
;--------------------------------
CLR RS
CLR RW
NOP
;--------------------------------
SETB E
MOV A,ZLING ;将高四位数据送出
MOV C,ACC.7
MOV LCD_DB7,C
MOV C,ACC.6
MOV LCD_DB6,C
MOV C,ACC.5
MOV LCD_DB5,C
MOV C,ACC.4
MOV LCD_DB4,C
CLR E
;--------------------------------
NOP
NOP
NOP
SETB E
MOV A,ZLING ;将底四位数据送出
MOV C,ACC.3
MOV LCD_DB7,C
MOV C,ACC.2
MOV LCD_DB6,C
MOV C,ACC.1
MOV LCD_DB5,C
MOV C,ACC.0
MOV LCD_DB4,C
CLR E
RET
NOP
NOP
AJMP STAR
NOP
NOP
;**********************************
DELAYLCD:MOV R6,#5
LOP11: MOV R7,#5
LOP22: DJNZ R7,LOP22
LOP33: DJNZ R6,LOP11
RET
NOP
NOP
AJMP STAR
NOP
NOP
;**********************************
;写数据寄存器字节子程序
WRTS: ACALL READBF
;--------------------------------
SETB RS
CLR RW
;--------------------------------
SETB E
MOV A,SHUJU;将高四位数据送出
MOV C,ACC.7
MOV LCD_DB7,C
MOV C,ACC.6
MOV LCD_DB6,C
MOV C,ACC.5
MOV LCD_DB5,C
MOV C,ACC.4
MOV LCD_DB4,C
CLR E
;--------------------------------
NOP
NOP
NOP
SETB E
MOV A,SHUJU;将底四位数据送出
MOV C,ACC.3
MOV LCD_DB7,C
MOV C,ACC.2
MOV LCD_DB6,C
MOV C,ACC.1
MOV LCD_DB5,C
MOV C,ACC.0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -