⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fil1256高频头程序.asm

📁 采用FIL1256一体化高频头制作的信号发生器
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		MOV 	LCD_DB4,C
		CLR	E
		RET 

NOP
NOP
AJMP STAR
NOP
NOP
;********************************* 
;读数据寄存器字节子程序
;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

NOP
NOP
AJMP STAR
NOP
NOP
;************************************
;以上为写各个控制数据到写高频头的程序
;************************************
;以下为从高频头读数据到R_DATA的程序
;************************************
READ_TURN:		
		ACALL	START
		MOV	A,ADBW
		SETB	ACC.0
		ACALL	SENDDATE
		NOP
		ACALL	ASKW
		NOP
;-----------------------------------
		ACALL	RECEIVEDATE
		MOV	R_DATA,A
		ACALL	NOASK
		ACALL	STOP
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;**************************************
;以上为从高频头读数据到R_DATA的程序
;**************************************
;**************************************
;以下为I2C总线的各个控制信号
;**************************************
;写存储器时等待ASK信号
ASKW:		ACALL	DELAY
		SETB	SDA		;释放SDA总线
		ACALL	DELAY
		SETB	SCL
WAITASKW:	MOV	C,SDA
		JC	WAITASKw
		CLR	SCL
		CLR	SDA
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;**********************************
;MCU作为从器件不应答
NOASK:	SETB	SDA
		SETB	SCL
		ACALL	DELAY
		CLR	SCL
		ACALL	DELAY
		CLR	SDA
		RET  

NOP
NOP
AJMP STAR
NOP
NOP
;-----------------------------------
;		启动信号
START:	SETB	SCL
		SETB	SDA
		ACALL	DELAY
		CLR	SDA
		ACALL	DELAY
		CLR	SCL
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;---------------------------
;		停止信号
STOP:	CLR	SCL
		CLR	SDA
		ACALL	DELAY
		SETB	SCL
		ACALL	DELAY
		SETB	SDA
		ACALL	DELAY
		RET

NOP
NOP
AJMP STAR
NOP
NOP
 ;---------------------------------
;MCU从存储器(从器件)读数据字节时产生ASK信号
ASKR:		ACALL	DELAY
		CLR	SCL
		ACALL	DELAY
		CLR	SDA
		ACALL	DELAY
		SETB	SCL
		ACALL	DELAY
		CLR	SCL
		ACALL	DELAY
		SETB 	SDA
		ACALL	DELAY
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;-----------------------------
;送数据到总线上,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


NOP
NOP
AJMP STAR
NOP
NOP
;--------------------------------
;从总线上接收数据,A作为移位入寄存器
RECEIVEDATE:	MOV R2,#0
		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


NOP
NOP
AJMP STAR
NOP
NOP
;--------------------------------
DELAY:	NOP
		NOP
		NOP
		NOP
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;***********************************
;以上为I2C总线的各个控制信号
;************************************
;上电延迟
DELAY_STAR:
		MOV R0,#0FFH
DELAY_STAR1:	MOV R1,#0FFH
		DJNZ R1,$
		DJNZ R0,DELAY_STAR1
		;CPL PLOCK_LED
		RET

NOP
NOP
AJMP STAR
NOP
NOP

	
;功能:单字节压缩BCD码整数转换成单字节十六进制整数 
;入口条件:待转换的单字节BCD码整数在累加器 A 中。 
;出口信息:转换后的单字节十六进制整数仍在累加器 A 中。 
;影响资源: PSW 、 A 、 B     堆栈需求:    2字节 
;--------------------------------
BCDH:  		PUSH 	TMP0
		MOV  	B,#10H   ;分离十位和个位 
  		DIV  	AB 
  		MOV  	TMP0,B   ;暂存个位 
  		MOV  	B,#10   ;将十位转换成十六进制 
  		MUL  	AB 
  		ADD  	A,TMP0   ;按十六进制加上个位
		POP	TMP0 
  		RET 


;功能:将显示数据除以8再显示
;--------------------------------
DIV_8:		MOV R0,#(DISSHIWAN+1) ;显示的数据
		MOV R1,#(TMP0-1)     ;结果
		MOV B,#0
;--------------------------------
DIV_8_3:	DEC R0
		INC R1
		MOV A,B
		SWAP A
		ORL A,@R0
		CALL BCDH
		MOV B,#8
		DIV AB
		MOV @R1,A      ;10M位压入堆栈
		CJNE R1,#TMP5,DIV_8_3
;--------------------------------
		MOV A,B
		SWAP A
		ORL A,#0
		CALL BCDH
		MOV B,#8
		DIV AB
		MOV TMP6,A      ;0.1K位压入堆栈
;--------------------------------
		MOV A,B
		SWAP A
		ORL A,#0
		CALL BCDH
		MOV B,#8
		DIV AB
		MOV TMP7,A      ;0.01K位压入堆栈

DIV_8_DISLCD1:	MOV	ZLING,#84H    ;第一行显示除以8的结果,#0c6(16*2	;显示键盘输入频率值
		ACALL	WRTC
;-------------------------------------
		MOV 	R0,#(TMP0-1)
DIV_8_2:		
		INC 	R0
		MOV	A,@R0	;显示100M位
		MOV	DPTR,#ADDR_LCD
		MOVC	A,@A+DPTR
		MOV	SHUJU,A
		ACALL	WRTS
		MOV A,R0
		CJNE A,#(TMP0+2),DIV_8_1
		MOV	SHUJU,#00101110B  ;显示小数点
		ACALL	WRTS
DIV_8_1:		
		CJNE A,#(TMP0+7),DIV_8_2
;-------------------------------------
		MOV	SHUJU,#01001101B 	;显示M
		ACALL	WRTS
;--------------------------------------
		MOV	SHUJU,#01001000B	;显示H
		ACALL	WRTS
;--------------------------------------
		MOV	SHUJU,#01111010B	;显示z
		ACALL	WRTS
		RET
NOP
NOP
AJMP STAR
NOP
NOP



;标号:   MULD      功能:单字节乘双字节二进制无符号数乘法 
;入口条件:被乘数在  TMP3 (LSB)中,乘数在 TMP6 (MSB)、 TMP7 (LSB)中。 
;出口信息:乘积在 TMP3 、 TMP6 、 TMP7 中。 TMP3高位
;影响资源: PSW 、 A 、 B 、 TMP3 TMP6 TMP7     堆栈需求:    2字节 
MULD:  		PUSH TMP4
		PUSH TMP5
;--------------------------------
		MOV  A,TMP3   ;计算 TMP3 乘 TMP7 
  		MOV  B,TMP7 
  		MUL  AB 
  		MOV  TMP4,B   ;TMP3*TMP7高位送TMP4
  		MOV  TMP5,A 	;TMP3*TMP7低位送TMP5
;--------------------------------
  		MOV  A,TMP3   ;计算 TMP3 乘 TMP6 
  		MOV  B,TMP6 
  		MUL  AB 
;--------------------------------
  		ADD  A,TMP4   ;累加部分积 
  		MOV  TMP4,A 
  		CLR  A 
;--------------------------------
  		ADDC  A,B 
  		MOV  TMP3,A   ;TMP3*TMP7=TMP3,TMP4,TMP5
		MOV TMP6,TMP4
		MOV TMP7,TMP5
;--------------------------------
		POP TMP5
		POP TMP4
  		RET 

NOP
NOP
AJMP STAR
NOP
NOP


;24c16资料,2K字节 E2PROM
;                     **********   **********
;                     *         ***         *
;      NC         A0 **  1                8 ** VCC        NC
;                     *                     *
;      NC         A1 **  2                7 ** WP        悬空或接地,正常读写
;                     *                     *
;      input      A2 **  3                6 ** SCL       X1
;                     *                     *
;      reset     VSS **  4                5 ** SDA      X0
;                     *         24C16       *
;                     ***********************
;器件寻址:1 0 1 0 A2 A1 A0 R/W(LSB)
	M24C16_ADRH  EQU 0A1H  ;A10--A8=0,R/W=0
	M24C16_ADRL EQU 00H  ;DATE START IN 00H
;READ 24C16
R24C16: 
		LCALL START

;--------------------------------
		MOV A,#M24C16_ADRH
		CLR ACC.0  ;WRITE DATE
		ACALL SENDDATE
		ACALL ASKW     ;
;--------------------------------
		MOV A,#M24C16_ADRL
		ACALL SENDDATE
		ACALL ASKW       
;--------------------------------
		ACALL START
;--------------------------------
		MOV A,#M24C16_ADRH
		SETB ACC.0  ;READ DATE
		ACALL SENDDATE
		ACALL ASKW
;--------------------------------
		ACALL RECEIVEDATE
		PUSH ACC
		;ANL A,#0F0H
		JNZ INT_24C16
		POP DISGE
		;MOV DISGE,A  ;GE WEI
		ACALL ASKR;;;;;;;;;;;;;;;;;;;;;
;--------------------------------
		ACALL RECEIVEDATE
		PUSH ACC
		ANL A,#0F0H
		JNZ INT_24C16
		POP DISSHI
		;MOV DISSHI,A  ;SHI WEI
		ACALL ASKR
;--------------------------------
		ACALL RECEIVEDATE
		PUSH ACC
		ANL A,#0F0H
		JNZ INT_24C16
		POP DISBAI
		;MOV DISBAI,A   ;百位
		ACALL ASKR
;--------------------------------
		ACALL RECEIVEDATE
		PUSH ACC
		ANL A,#0F0H
		JNZ INT_24C16
		POP DISQIAN
		;MOV DISQIAN,A  ;千位
		ACALL ASKR
;--------------------------------
		ACALL RECEIVEDATE
		PUSH ACC
		ANL A,#0F0H
		JNZ INT_24C16
		POP DISWAN
		;MOV DISWAN,A  ;万位
		ACALL ASKR
;--------------------------------
		ACALL RECEIVEDATE
		PUSH ACC
		ANL A,#0F0H
		JNZ INT_24C16
		POP DISSHIWAN
		;MOV DISSHIWAN,A  ;十万位
		ACALL ASKR
;--------------------------------
		ACALL RECEIVEDATE
		PUSH ACC
		ANL A,#0F8H
		JNZ INT_24C16
		POP STEP
		;MOV STEP,A   ;步进
;--------------------------------
		ACALL NOASK
;--------------------------------
		ACALL STOP
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;24C16的初始化,只要检测到数据的高四位不为零立刻开始.
;---------------------------------------------------
INT_24C16:
		MOV DISGE,#0
		MOV DISSHI,#0
		MOV DISBAI,#0
		MOV DISQIAN,#3
		MOV DISWAN,#3
		MOV DISSHIWAN,#4
		MOV STEP,#6
;---------------------------------------------------
		ACALL W24C16
		RET

NOP
NOP
AJMP STAR
NOP
NOP
;WRITE 24C16
;将DISGE---DISSHIWAN 写入00H-05H,STEP 写入06H
;---------------------------------------------------
W24C16: 
		ACALL START
		MOV A,#M24C16_ADRH
		CLR ACC.0  ;WRITE DATE
		ACALL SENDDATE
;--------------------------------
		ACALL ASKW     ;  写低位地址
		MOV A,#M24C16_ADRL
		ACALL SENDDATE
;--------------------------------
		ACALL ASKW       ;GE WEI 
		MOV A,DISGE
		ACALL SENDDATE
;--------------------------------
		ACALL ASKW       ;SHI WEI
		MOV A,DISSHI
		ACALL SENDDATE
;--------------------------------
		ACALL ASKW       ;BAI WEI
		MOV A,DISBAI
		ACALL SENDDATE
;--------------------------------
		ACALL ASKW       ;QIAN WEI
		MOV A,DISQIAN
		ACALL SENDDATE
;--------------------------------
		ACALL ASKW       ;WAN WEI
		MOV A,DISWAN
		ACALL SENDDATE
;--------------------------------
		ACALL ASKW       ;SHIWAN
		MOV A,DISSHIWAN
		ACALL SENDDATE
;--------------------------------
		ACALL ASKW       ;步进
		MOV A,STEP
		ACALL SENDDATE
		ACALL ASKW
		ACALL STOP
		RET
;清看门够程序,高电平脉冲清除
CLRWDT:
		CLR WDT
		SETB WDT
		LCALL DELAYLCD
		LCALL DELAYLCD
		CLR WDT
		NOP
		NOP
		RET		
		

NOP
NOP
AJMP STAR
NOP
NOP
		END  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -