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

📄 fcount.asm

📁 AD9851的编程 AD9851的编程
💻 ASM
字号:
;*************************************************
;	人口频率放在R4R5R6R7中
;       出口控制字在R4R5R6R7中
;	TZL	2005.3
;************************************************

	ORG       00H
        AJMP      MAIN
        ORG       30H
MAIN:   NOP
        MOV     SP,     #70H
	MOV	6BH,	R4		;参数传递(入口频率)
	MOV	6AH,	R5
	MOV	69H,	R6
	MOV	68H,	R7
	MOV     R1,     #95H            ;初始化除数
        MOV     R2,     #0BAH
        MOV     R3,     #0AH
	CALL	MUL_24
	CALL	DIV7_3
	AJMP	$
;****************************************
;频率乘以2^24次方
;入口f放在68H—6B的四个单元中
;出口结果就是被除数放在50H开头的单元中
;****************************************
MUL_24: MOV	A,	6BH
        XCH	A,	56H
	MOV	A,	6AH
	XCH	A,	55H
	MOV	A,	69H
	XCH	A,	54H
	MOV	A,	68H
	XCH	A,	53H
	MOV	52H,	#0
	MOV	51H,	#0
	MOV	50H,	#0
	RET
;************************************;
	;被除数/除数
	;被除数放在以50H—56H7个单元
	;除数放在R1R2R3中
	;除数缓存在以57H—5DH开头的7个单元
	;5EH	外循环计数器
	;5FH	内循环计数器
	;一级商缓存在以60H—63H的4个单元
	;二级商缓存在以64H—67H的4个单元:
;************************************;

DIV7_3:	MOV     5EH,    #0
	MOV	60H,	#0	;商清零
	MOV	61H,	#0
	MOV	62H,	#0
	MOV	63H,	#0
	MOV	64H,	#0	;商缓存清零
	MOV	65H,	#0
	MOV	66H,	#0
	MOV	67H,	#0
LOOP:   MOV	A,	64H	;累加商
	ADD	A,	60H
	XCH	A,	60H
	MOV	A,	65H
	ADDC	A,	61H
	XCH	A,	61H
	MOV	A,	66H
	ADDC	A,	62H
	XCH	A,	62H
	MOV	A,	67H
	ADDC	A,	63H
	XCH	A,	63H
	CLR	C
        MOV     A,      #32
	SUBB   	A,      5EH
        XCH     A,      5FH
	MOV	57H,	R1	;恢复除数
	MOV	58H,	R2
	MOV	59H,	R3
	MOV	5AH,	#0
	MOV	5BH,	#0
	MOV	5CH,	#0
	MOV	5DH,	#0
	MOV	A,	50H	;被除数-除数
	SUBB	A,	57H
	MOV	A,	51H
	SUBB	A,	58H
	MOV	A,	52H
	SUBB	A,	59H
	MOV	A,	53H
	SUBB	A,	5AH
	MOV	A,	54H
	SUBB	A,	5BH
	MOV	A,	55H
	SUBB	A,	5CH
	MOV	A,	56H
	SUBB	A,	5DH
	JNC	LOOP11
        ;余数做四舍五入处理
        CLR     C               ;除数除以2
        MOV     A,      R3
        RRC     A
        XCH     A,      R3
        MOV     A,      R2
        RRC     A
        XCH     A,      R2
        MOV     A,      R1
        RRC     A
        XCH     A,      R1
        CLR     C               ;余数减除数除以2
        MOV     A,      50H
        SUBB    A,      R1
        MOV     A,      51H
        SUBB    A,      R2
        MOV     A,      52H
        SUBB    A,      R3
        JC      DIV_END
        MOV     A,      60H
        ADD     A,      #1
        XCH     A,      60H
        MOV     A,      61H
        ADDC    A,      #0
        XCH     A,      61H
        MOV     A,      62H
        ADDC    A,      #0
        XCH     A,      62H
        MOV     A,      63H
        ADDC    A,      #0
        XCH     A,      63H
DIV_END:MOV	R7,	60H     ;存商
	MOV	R6,	61H
	MOV	R5,	62H
	MOV	R4,	63H
	RET
	;商上2^0次方
LOOP11:	MOV	64H,	#1
	MOV	65H,	#0
	MOV	66H,	#0
	MOV	67H,	#0
	;除数乘2
LOOP1:	CLR	C
	MOV	A,	57H	;从最低位开始移
	RLC	A
	XCH	A,	57H
	MOV	A,	58H
	RLC	A
	XCH	A,	58H
	MOV	A,	59H
	RLC	A
	XCH	A,	59H
	MOV	A,	5AH
	RLC	A
	XCH	A,	5AH
	MOV	A,	5BH
	RLC	A
	XCH	A,	5BH
	MOV	A,	5CH
	RLC	A
	XCH	A,	5CH
	MOV	A,	5DH
	RLC	A
	XCH	A,	5DH
	;被除数-除数
	CLR	C
	MOV	A,	50H
	SUBB	A,	57H
	MOV	A,	51H
	SUBB	A,	58H
	MOV	A,	52H
	SUBB	A,	59H
	MOV	A,	53H
	SUBB	A,	5AH
	MOV	A,	54H
	SUBB	A,	5BH
	MOV	A,	55H
	SUBB	A,	5CH
	MOV	A,	56H
	SUBB	A,	5DH
	JC	NEXT1
	;商乘以2
	CLR	C
	MOV	A,	64H
	RLC	A
	XCH	A,	64H
	MOV	A,	65H
	RLC	A
	XCH	A,	65H
	MOV	A,	66H
	RLC	A
	XCH	A,	66H
	MOV	A,	67H
	RLC	A
	XCH	A,	67H
	DJNZ	5FH,	LOOP1
	JMP	NEXT2
	;除数除以2
NEXT1:  CLR	C
	MOV	A,	5DH	;从最高位开始移
	RRC	A
	XCH	A,	5DH
	MOV	A,	5CH
	RRC	A
	XCH	A,	5CH
	MOV	A,	5BH
	RRC	A
	XCH	A,	5BH
	MOV	A,	5AH
	RRC	A
	XCH	A,	5AH
	MOV	A,	59H
	RRC	A
	XCH	A,	59H
	MOV	A,	58H
	RRC	A
	XCH	A,	58H
	MOV	A,	57H
	RRC	A
	XCH	A,	57H
	;被除数-除数保存差值
NEXT2:	CLR	C
	MOV	A,	50H	;取被除数
	SUBB	A,	57H
	XCH	A,	50H	;差值覆盖被除数
	MOV	A,	51H
	SUBB	A,	58H
	XCH	A,	51H
	MOV	A,	52H
	SUBB	A,	59H
	XCH	A,	52H
	MOV	A,	53H
	SUBB	A,	5AH
	XCH	A,	53H
	MOV	A,	54H
	SUBB	A,	5BH
	XCH	A,	54H
	MOV	A,	55H
	SUBB	A,	5CH
	XCH	A,	55H
	MOV	A,	56H
	SUBB	A,	5DH
	XCH	A,	56H
        INC     5EH
	JMP	LOOP
	END

⌨️ 快捷键说明

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