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

📄 test938ad.asm

📁 P89LPC938单片机的AD转换器的试验程序
💻 ASM
字号:
//*******************************************************************************************
//文件:TEST938AD.ASM
//功能:对通道AD0 进行AD 转换,结果通过UART 发送到PC,通信波特率为9600BPS
;每路AD转换的结果寄存器需要2个,故8路ADC有16个结果寄存器。以第0路ADC,它的结果寄存器是AD0DAT0R
;(存结果的低8位,即 D7~D0),AD0DAT0L(存结果的高8位,即D9~D2。和有些其它单片机的ADC不同,952没有
;结果寄存器是左对齐或右对齐的设置。因此在进行ADC时,如果是右对齐,则低8位寄存器不动,高8位寄存器
;循环左移2位,使得转换结果的D9、D8位于高字节的低2位,高六位清0;如果是左对齐,则高8位寄存器不动,
;低8位寄存器循环右移,使得转换结果的低2位移到低8位寄存器的D7、D6位,低6位清0。这样操作才能得到正确结果。
//*******************************************************************************************
		$NOMOD51
		$INCLUDE (REG932.H)
		ADCON0 DATA 97H ;定义ADC 用到的寄存器
		ADMODA DATA 0C0H
		ADMODB DATA 0A1H
		ADINS DATA 0A3H
		AD0DAT0R EQU 0FFFEH ;定义AD0DAT0R 地址
		AD0DAT0L EQU 0FFFFH ;定义AD0DAT0L 地址
		ADH EQU 40H
		ADL EQU 41H
		LEDCON BIT	P1.6
		T_BUFF EQU 60H
		ORG 0000H
		LJMP 0100H
		ORG 0100H
;------------------------主程序------------------------------------------
MAIN: 	MOV P0M1,#0FFH ;初始化端口
		MOV P0M2,#00H
		MOV P1M1,#0CH			;P1.2,P1.3开漏,P1.6推挽	
		MOV P1M2,#4CH
		SETB LEDCON
		MOV ADINS,#01H ;选择通道AD0
		MOV ADMODA,#10H ;单次转换
		MOV SCON,#50H ;初始化UART
		MOV BRGCON,#00H
		;MOV SSTAT,#60H
		MOV BRGR0,#0F0H
		MOV BRGR1,#02H
		MOV BRGCON,#03H
		MOV A,#00H
		MOV T_BUFF,A
LOOP:	MOV T_BUFF+1,#02H
		MOV T_BUFF+2,#03H
		MOV T_BUFF+3,#04H
		MOV T_BUFF+4,#05H
		MOV T_BUFF+5,#06H
		MOV T_BUFF+6,#07H
		MOV T_BUFF+7,#08H
		LCALL TRANS
		CPL LEDCON
		LCALL D2S
ADC: 	MOV ADCON0,#05H ;循环AD 转换
WAIT: 	MOV A,ADCON0 	;开始转换
		JNB ACC.3,WAIT 	;等待转换完毕
		LCALL D2S 		;延时
		CALL SEND2PC 	;通过UART 发送数据到PC
		MOV A,ADH
		ANL A,#0C0H
		RL A
		RL A
		MOV ADH,A
		LCALL TRANSA
		CPL LEDCON
		SJMP ADC
;----------------------DELAY:延时子程序-------------------------------
DELAY: 	MOV R7,#10H
DL1: 	MOV R6,#0FFH
DL2: 	MOV R5,#0FFH
		DJNZ R5,$
		DJNZ R6,DL2
		DJNZ R7,DL1
		RET
;----------------------UART 发送子程序---------------------------------
SEND2PC:CLR TI
		MOV DPTR,#AD0DAT0L ;发送转换结果高8 位,即9:2 位
		MOVX A,@DPTR
		MOV ADH,A
		MOV SBUF,A
		JNB TI,$
		CLR TI
		MOV DPTR,#AD0DAT0R ;发送转换结果低8 位,即7:0 位
		MOVX A,@DPTR
		MOV ADL,A
		MOV SBUF,A
		JNB TI,$
		CLR TI
		RET
TRANSA: CLR TI
		MOV A,ADH
		MOV SBUF,A
		JNB TI,$
		CLR TI
		MOV A,ADL
		MOV SBUF,A
		JNB TI,$
		CLR TI
		RET

TRANS:		MOV R3,#08H
			MOV R0,#60H
TRANS1:		MOV A,@R0								
			MOV SBUF,A
WAITH:		JNB TI,WAITH
			CLR TI
			INC R0
			DJNZ R3,TRANS1
			SETB ES				;开放串口中断
			SETB EA				;开放总中断,等待接收测量数据
			RET
;***************938软件延时子程序****************
D20MS:		MOV R6,#14H				 ;20MS
D20:		ACALL D1MS
			DJNZ R6,D20
			RET
D1MS:		MOV R7,#0F5H			;1MS,1T
DD1:		NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP						;1T
			NOP
			DJNZ R7,DD1				;2T
			RET						;2T
D250MS:		MOV R5,#0CH				;250MS
DD2:		ACALL D20MS
			DJNZ R5,DD2
			RET
D500MS:		MOV R5,#19H				;500MS
DD3:		ACALL D20MS
			DJNZ R5,DD3
			RET
D400MS:		MOV R5,#16H		 		;400MS
DD4A:		ACALL D20MS
			DJNZ R5,DD3
			RET		
D1S:		MOV R5,#32H				;1S
DD4:		ACALL D20MS
			DJNZ R5,DD4
			RET
					
D1M:		MOV R6,#20H				;32S
D1MA:		LCALL D1S
			DJNZ R6,D1MA
			RET	
D2S:		MOV R5,#64H				;2S
DD5:		ACALL D20MS
			DJNZ R5,DD5
			RET

D80MS:		MOV R3,#50H			;20MS软件延时程序
DD1B:		ACALL D1MS
        	DJNZ R3,DD1B
        	RET

D6S:		MOV R5,#0A0H
DD2A:    	ACALL D20MS
			DJNZ R5,DD2A
        	RET
;**************延时子程序结束*************
;---------------------------------------------------------------------------------
		END

⌨️ 快捷键说明

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