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

📄 adc.asm

📁 此子程序将进行AD转换和AD处理
💻 ASM
字号:
;/////////////////////////////////////////////////////////////////////
;此子程序将进行AD转换和AD处理,处理后的12位AD值中低八位存放在
;adc_buffer_low中,高四位存放在adc_buffer_hi寄存器的低四位
;/////////////////////////////////////////////////////////////////////
@@adc:
	clr	adc_buffer_hi
	clr	adc_buffer_low
	call	@@adc_converting
	call	@@adc_converting
	call	@@adc_converting
	call	@@adc_converting
	call	@@adc_converting
	call	@@adc_converting
	call	@@adc_converting
	call	@@adc_converting

@@division_eight:
	b0bclr	fc
	rrcm	adc_buffer_low
	b0bclr	fc
	rrcm	adc_buffer_low
	b0bclr	fc
	rrcm	adc_buffer_low		;将低位向右依三位除八
	b0bclr	fc
	rrcm	adc_buffer_hi		;将高位向右移一位然后判断溢出的数是否为1
	b0bts0	fc
	b0bset	adc_buffer_low.5	;如果为1则将低位第5位置1
	b0bclr	fc
	rrcm	adc_buffer_hi
	b0bts0	fc
	b0bset	adc_buffer_low.6
	b0bclr	fc
	rrcm	adc_buffer_hi
	b0bts0	fc
	b0bset	adc_buffer_low.7
	ret
;/////////////////////////////////////////////////////////////////////
;循环5次进行AD转换,每次的值分别连续放在ADC_BUFFER中
;/////////////////////////////////////////////////////////////////////
@@adc_converting:
	b0bset	fgchs
	mov	a	#05h
	mov	temp1	a		;单次循环转换次数重装载
	clr	y
	b0mov	z	#adc_buffer$l	;取adc_buffer的低位地址

@@cycle_converting:
	b0bset	fads			;开始转换

@@endconverting:	
	b0bts1	feoc
	jmp	@@endconverting
	mov	a	adb
	mov	@yz	a
	incms	z
	nop
	mov	a	adr
	and	a	#0fh
	mov	@yz	a
	incms	z
	nop
	decms	temp1
	jmp	@@cycle_converting
;/////////////////////////////////////////////////////////////////////
;将ADC_BUFFER中的数据依大小排序,将最小的数放在ADC_BUFFER中最前面
;/////////////////////////////////////////////////////////////////////
@@sequence_arrange_initialization:
	mov	a	#04h
	mov	temp2	a
	
@@sequence_arrange:
	mov	a	#04h
	mov	temp1	a
	clr	y
	b0mov	z	#adc_buffer$l	;送adc_bufer的地址到z

@@start_sequence_arrange:
;	call	@@getdata
@@getdata1:
	b0mov	a	@yz	;将当前YZ的数据送往temp3
	mov	temp3	a		
	mov	a	#2h	;
	add	z	a
	mov	a	@yz	;将后两个地址数据送A
	decms	z
	nop
	decms	z
	nop
;	ret
	
	cmprs	a	temp3		;判断第一数高8位与第二数的高8位大小	
	jmp	@@check_fc1		

@@check_adc_buffer_low:
	incms	z			;将地址切换到第1位数据的低8位
	nop
;	call	@@getdata
@@getdata2:
	b0mov	a	@yz	;将当前YZ的数据送往temp3
	mov	temp3	a		
	mov	a	#2h	;
	add	z	a
	mov	a	@yz	;将后两个地址数据送A
	decms	z
	nop
	decms	z
	nop
;	ret

	cmprs	a	temp3		;比较两数大小
	jmp	@@check_fc2
	incms	z			;将地址切换到第二位数据的高8位
	nop
	jmp	@@next_cycel	

@@check_fc1:
	b0bts0	fc			 ;判断第一数高8位与第二数的高8位大小
	jmp	@@change_add1
;	call	@@change_adc_buffer_place;交换第一数高8位与第二数的高8位的数据

@@change_adc_buffer_place1:
	mov	a	@yz
	mov	temp3	a	;将当前高位地址yz数据送往temp3
	mov	a	#2h
	add	z	a	;将地址切到yz+2
	mov	a	@yz	;读取YZ+2地址中的数据送往a
	b0xch	a	temp3	;将YZ地址中的数据与YZ+2地址中的数据进行交换
	mov	@yz	a
	decms	z		;将地址切回到yz。
	nop
	decms	z
	nop
	b0xch	a	temp3
	mov	@yz	a	;将YZ+2地址中的数据送往yz
;	ret


	incms	z			 ;将地址切换到第1位数据的低8位
	nop
;	call	@@change_adc_buffer_place;交换第一数低8位与第二数的低8位的数据
@@change_adc_buffer_place2:
	mov	a	@yz
	mov	temp3	a	;将当前高位地址yz数据送往temp3
	mov	a	#2h
	add	z	a	;将地址切到yz+2
	mov	a	@yz	;读取YZ+2地址中的数据送往a
	b0xch	a	temp3	;将YZ地址中的数据与YZ+2地址中的数据进行交换
	mov	@yz	a
	decms	z		;将地址切回到yz。
	nop
	decms	z
	nop
	b0xch	a	temp3
	mov	@yz	a	;将YZ+2地址中的数据送往yz
;	ret


	incms	z			 ;将地址切换到第二位数据的高8位
	nop
	jmp	@@next_cycel

@@change_add1:
	mov	a	#2h    		 ;将地址切换到第二位数据的高8位
	add	z	a
	jmp	@@next_cycel	

@@check_fc2:
	b0bts0	fc			 ;判断第一数低8位与第二数的低8位大小
	jmp	@@change_add2
;	call	@@change_adc_buffer_place;交换第一数低8位与第二数的低8位的数据
@@change_adc_buffer_place3:
	mov	a	@yz
	mov	temp3	a	;将当前高位地址yz数据送往temp3
	mov	a	#2h
	add	z	a	;将地址切到yz+2
	mov	a	@yz	;读取YZ+2地址中的数据送往a
	b0xch	a	temp3	;将YZ地址中的数据与YZ+2地址中的数据进行交换
	mov	@yz	a
	decms	z		;将地址切回到yz。
	nop
	decms	z
	nop
	b0xch	a	temp3
	mov	@yz	a	;将YZ+2地址中的数据送往yz
;	ret



	decms	z		    	 ;将地址切换到第1位数据的高8位
	nop
;	call	@@change_adc_buffer_place;交换第一数高8位与第二数的高8位的数据

@@change_adc_buffer_place4:
	mov	a	@yz
	mov	temp3	a	;将当前高位地址yz数据送往temp3
	mov	a	#2h
	add	z	a	;将地址切到yz+2
	mov	a	@yz	;读取YZ+2地址中的数据送往a
	b0xch	a	temp3	;将YZ地址中的数据与YZ+2地址中的数据进行交换
	mov	@yz	a
	decms	z		;将地址切回到yz。
	nop
	decms	z
	nop
	b0xch	a	temp3
	mov	@yz	a	;将YZ+2地址中的数据送往yz
;	ret

	mov	a	#2h
	add	z	a		 ;将地址切换到第二位数据的高8位
	jmp	@@next_cycel	

@@change_add2:
	incms	z			 ;将地址切换到第二位数据的高8位
	nop
	jmp	@@next_cycel

@@next_cycel:
	decms	temp1
	jmp	@@start_sequence_arrange
	decms	temp2
	jmp	@@sequence_arrange	
	jmp	@@exit_sequence_arrange


;/////////////////////////////////////////////////////////////////////
;获取当前YZ地址和YZ+2地址中的数据,分别存在TEMP3和A中
;/////////////////////////////////////////////////////////////////////
;@@getdata:
;	b0mov	a	@yz	;将当前YZ的数据送往temp3
;	mov	temp3	a		
;	mov	a	#2h	;
;	add	z	a
;	mov	a	@yz	;将后两个地址数据送A
;	decms	z
;	nop
;	decms	z
;	nop
;	ret
;/////////////////////////////////////////////////////////////////////
;将YZ地址和YZ+2地址中的数据进行交换
;/////////////////////////////////////////////////////////////////////
;@@change_adc_buffer_place:
;	mov	a	@yz
;	mov	temp3	a	;将当前高位地址yz数据送往temp3
;	mov	a	#2h
;	add	z	a	;将地址切到yz+2
;	mov	a	@yz	;读取YZ+2地址中的数据送往a
;	b0xch	a	temp3	;将YZ地址中的数据与YZ+2地址中的数据进行交换
;	mov	@yz	a
;	decms	z		;将地址切回到yz。
;	nop
;	decms	z
;	nop
;	b0xch	a	temp3
;	mov	@yz	a	;将YZ+2地址中的数据送往yz
;	ret

@@exit_sequence_arrange:
	clr	y
	clr	z

@@sum_adc_data:
	b0mov	z	#adc_buffer$l
	mov	a	#4h  		;取出AD中间值
	add	z	a
	swapm	@yz			;将高八位的低四位与高四位交换后送A
	
	mov	a	@yz
	and	a	#0f0h
	incms	z
	nop
	add	@yz	a		;将原高八位中的低四位与adc值的低四位叠加
	mov	a	@yz		;将AD值的低8位与adc_buffer_low中的数据累加
	add	adc_buffer_low	a
	b0bts1	fc			;如果发生进位则将adc_buffer_hi中的值加一
	jmp	@@sum_adc_buffer_hi
	incms	adc_buffer_hi	
	nop

@@sum_adc_buffer_hi:
	decms	z			
	nop
	mov	a	#0fh
	and	@yz	a		;将高四位值清0
	mov	a	@yz		;将ADC的高位值与adc_buffer_hi中的值累加
	add	adc_buffer_hi	a

@@ret_adc:
	ret

⌨️ 快捷键说明

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