📄 philips0.asm
字号:
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
; SETB P0.7
; CLR P0.6
; CLR P0.5
AJMP CHUFSTEP
SETUP_VHF: MOV PB,#10011111B
; SETB P0.6
; CLR P0.7
; CLR P0.5
AJMP CHUFSTEP
SETUP_LHF: MOV PB,#10101111B
; SETB P0.5
; CLR P0.6
; CLR P0.7
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
RET
;*************************************
;*************************************
DISLCD1: MOV ZLING,#86H ;显示键盘输入频率值
ACALL WRTC
;-------------------------------------
MOV A,DISSHIWAN
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;-------------------------------------
MOV A,DISWAN
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;-------------------------------------
MOV A,DISQIAN
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;-------------------------------------
MOV SHUJU,#00101110B
ACALL WRTS
;-------------------------------------
MOV A,DISBAI
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;-------------------------------------
MOV A,DISSHI
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;-------------------------------------
MOV A,DISGE
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;-------------------------------------
MOV SHUJU,#01001101B
ACALL WRTS
;--------------------------------------
MOV SHUJU,#01001000B ;显示“H”
ACALL WRTS
;--------------------------------------
MOV SHUJU,#01111010B ;显示“Z”
ACALL WRTS
;---------------------------------------
RET
;**********************************************
;***********************************************
;****************************************************
DISLCD3: MOV ZLING,#0C0H ;在第二行显示“K=******”
ACALL WRTC
;-----------------------------------------------
MOV SHUJU,#01001011B ;显示“K”
ACALL WRTS
;------------------------------------------------
MOV SHUJU,#00111101B ;显示“=”
ACALL WRTS
;-----------------------------------------------
MOV A,PB
ANL A,#11110000B
SWAP A
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;--------------------------------------------
MOV A,PB
ANL A,#00001111B
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
RET
;**********************************************
DISLCD4: MOV ZLING,#0C0H ;在第二行显示"S=******"
ACALL WRTC
;-----------------------------------------------
MOV SHUJU,#01010011B ;显示“S”
ACALL WRTS
;------------------------------------------------
MOV SHUJU,#00111101B ;显示“=”
ACALL WRTS
;-----------------------------------------------
MOV A,SHANGH
ANL A,#11110000B
SWAP A
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;--------------------------------------------
MOV A,SHANGH
ANL A,#00001111B
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;--------------------------------------------
MOV A,SHANGM
ANL A,#11110000B
SWAP A
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;--------------------------------------------
MOV A,SHANGM
ANL A,#00001111B
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;--------------------------------------------
MOV A,SHANGL
ANL A,#11110000B
SWAP A
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;---------------------------------------------
MOV A,SHANGL
ANL A,#00001111B
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;----------------------------------------------
MOV SHUJU,#01011001B ;显示“Y”
ACALL WRTS
;------------------------------------------------
MOV SHUJU,#00111101B ;显示“=”
ACALL WRTS
;-----------------------------------------------
MOV A,YUSHUH
ANL A,#11110000B
SWAP A
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;---------------------------------------------
MOV A,YUSHUH
ANL A,#00001111B
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;-----------------------------------------------
MOV A,YUSHUL
ANL A,#11110000B
SWAP A
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
;---------------------------------------------
MOV A,YUSHUL
ANL A,#00001111B
MOV DPTR,#ADDR_LCD
MOVC A,@A+DPTR
MOV SHUJU,A
ACALL WRTS
RET
;****************************************************
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各个子程序程序应用部分
;********************************
;忙标志检测子程序
READBF: MOV CKOU,#11111110B
MOV DKOU,#255
WAITBF: JB BF,WAITBF
MOV CKOU,#255
RET
;*********************************
;写指令代码子程序
WRTC: ACALL READBF
MOV CKOU,#255
CLR RS
CLR RW
ACALL DELAYLCD
SETB E
ACALL DELAYLCD
MOV DKOU,ZLING
ACALL DELAYLCD
CLR E
SETB RW
MOV CKOU,#255
RET
;**********************************
DELAYLCD: MOV R6,#5
LOP11: MOV R7,#5
LOP22: DJNZ R7,LOP22
LOP33: DJNZ R6,LOP11
RET
;**********************************
;写数据寄存器字节子程序
WRTS: ACALL READBF
MOV CKOU,#255
SETB RS
CLR RW
ACALL DELAYLCD
SETB E
ACALL DELAYLCD
MOV DKOU,SHUJU
ACALL DELAYLCD
CLR E
SETB RW
MOV CKOU,#255
RET
;*********************************
;读数据寄存器字节子程序
READS: ACALL READBF
MOV CKOU,#255
SETB RS
SETB RW
ACALL DELAYLCD
SETB E
ACALL DELAYLCD
MOV SHUJU,DKOU
ACALL DELAYLCD
CLR RW
CLR E
MOV CKOU,#255
;***********************************
;以上为LCD各个子程序程序应用部分
;***********************************
;**************************************
;以下为写各个控制数据到写高频头的程序
;***************************************
WRITE_TURN: ACALL START
;-------------------------
MOV A,ADBW
ACALL SENDDATE
ACALL ASKW
;-------------------------
MOV A,DB1
ACALL SENDDATE
ACALL ASKW
;-------------------------
MOV A,DB2
ACALL SENDDATE
ACALL ASKW
;-------------------------
MOV A,CB
ACALL SENDDATE
ACALL ASKW
;-------------------------
MOV A,PB
ACALL SENDDATE
ACALL ASKW
;-------------------------
ACALL STOP
RET
;************************************
;以上为写各个控制数据到写高频头的程序
;************************************
;以下为从高频头读数据到BUFER3的程序
;************************************
READ_TURN: ACALL START
MOV A,ADBW
SETB ACC.0
ACALL SENDDATE
SETB P0.5
ACALL ASKW
SETB P0.6
;-----------------------------------
ACALL RECEIVEDATE
MOV BUFER3,A
ACALL NOASK
ACALL STOP
RET
;**************************************
;以上为从高频头读数据到BUFER3的程序
;**************************************
;**************************************
;以下为I2C总线的各个控制信号
;**************************************
;写存储器时等待ASK信号
ASKW: ACALL DELAY
SETB SDA ;释放SDA总线
ACALL DELAY
SETB SCL
WAITASKW: MOV C,SDA
JC WAITASKW
CLR SCL
CLR SDA
RET
;**********************************
;MCU作为从器件不应答
NOASK: SETB SDA
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
CLR SDA
RET
;-----------------------------------
; 启动信号
START: SETB SCL
SETB SDA
ACALL DELAY
CLR SDA
ACALL DELAY
CLR SCL
RET
;---------------------------
; 停止信号
STOP: CLR SCL
CLR SDA
ACALL DELAY
SETB SCL
ACALL DELAY
SETB SDA
ACALL DELAY
RET
;---------------------------------
;MCU从存储器(从器件)读数据字节时产生ASK信号
ASKR: ACALL DELAY
CLR SDA
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
RET
;-----------------------------
;送数据到总线上,A作为移位输出寄存器
SENDDATE: MOV R2,#8
LOOPW: RLC A
MOV SDA,C
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
DJNZ R2,LOOPW
CLR SDA
RET
;--------------------------------
;从总线上接收数据,A作为移位入寄存器
RECEIVEDATE: SETB SDA
LOOPR: RL A
ACALL DELAY
SETB SCL
ACALL DELAY
MOV C,SDA
MOV ACC.0,C
ACALL DELAY
CLR SCL
ACALL DELAY
INC R2
CJNE R2,#8,LOOPR
RET
;--------------------------------
DELAY: NOP
NOP
NOP
NOP
RET
;***********************************
;以上为I2C总线的各个控制信号
;************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -