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

📄 项目.asm

📁 用单片机读MCP3221,及x5045程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                RET


;//////////////////////x5045芯片读写程序/////////////////////////
;程序名称:BYTE_READ
;说明;读X5045指定地址的数据
;输入: R0读取的目标地址
;反回值:A=读出的数据
;调用:  OUTBYTE,INBYTE
;使用资源:R7,A,C
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
BYTE_READ:      CLR     X5045CLK
                CLR     X5045WDI
                MOV     A,#03h
                LCALL   OUTBYTE
                MOV     A,r0
                LCALL   OUTBYTE
                LCALL   INBYTE
                CLR     X5045CLK
                SETB    X5045WDI
                RET

;//////////////////////x5045芯片读写程序/////////////////////////
;程序名称:WIN_CHECK
;说明:检测5045是状态是否忙,忙的话等待
;输入:无
;反回值:无
;调用:  RDREG_COM
;使用资源:
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
WIN_CHECK:      LCALL   RDREG_COM
                JB      ACC.0,WIN_CHECK
                RET


;//////////////////////x5045芯片读写程序/////////////////////////
;程序名称:RDREG_COM
;说明:读状态寄存器
;输入: 无
;反回值:A 所读取的状态
;调用:  OUTBYTE,INBYTE
;使用资源:R7,A
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
RDREG_COM:      CLR     X5045CLK
                CLR     X5045WDI
                MOV     A,#05h
                LCALL   OUTBYTE
                LCALL   INBYTE
                CLR     X5045CLK
                SETB    X5045WDI
                RET



;//////////////////////x5045芯片读写程序/////////////////////////
;程序名称:INBYTE
;说明:从总线上读一个字节(读5045)
;输入: 无
;反回值:A =读出的数据
;使用资源:R7,A,c
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
INBYTE:         MOV     R7,#8
INBYT1:         SETB    X5045CLK
                NOP
                CLR     X5045CLK
                NOP
                MOV     C,X5045SO
                RLC     A
                DJNZ    R7,INBYT1
                RET


;//////////////////////x5045芯片读写程序/////////////////////////
;程序名称:STATUSE_COM
;说明:写状态寄存器  watchdog=1.4s
;输入: 无
;反回值:无
;使用资源:R7,A
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
STATUSE_COM:    LCALL   WREN_COM
                CLR     X5045WDI
                CLR     X5045CLK
                MOV     A,#01H
                LCALL   OUTBYTE
                MOV     A,#00h    ;00000000 设置1。4S  ,不保护
                LCALL   OUTBYTE
                CLR     X5045CLK
                SETB    X5045WDI
                LCALL   WIN_CHECK
                RET
;**************************************************************************
;			5045子程序结束
;**************************************************************************


;**************************************************************************
;##########################################################################
;		MCP3221子程序开始
;		ADSCL 		 P1.1
;		ADSDA 		 P1.0
;##########################################################################
;**************************************************************************
;//////////////////////MCP3221芯片读写程序/////////////////////////
;程序名称:IIC_STAT
;说明:读MCP3221的温度 共读取了16次温度,值存放在50H—6FH的32个字节中
;输入: 无
;反回值:无
;使用资源:R1,R6,R7,A,C
;/////////////////////////////////////////////////////////////////
;修改时间:
;修改目的:
;修改人:
;修改记录:
;//////////////////////////////////////////////////////////////////
IIC_STAT:	MOV 	A,#10011011B 	;1001 IS MCP3221 DEVICE CODE   100 IS ADDRESS 1 READ ONLY	
		CLR 	C
		CLR  	ADSDA
		MOV 	R7,#8
STATLOP1:	CLR 	ADSCL
		RLC 	A
		MOV 	ADSDA,C
		SETB 	ADSCL
		NOP	
		DJNZ 	R7,STATLOP1
		CLR 	ADSCL
		JB 	ADSDA,$		;等待MCP3221的应答信号,没有答信号的话,就一直等到狗复位
		NOP
		NOP
		SETB 	ADSCL

		MOV 	R1,#50H		;读出来的数放在50H为首的RAM中
		MOV 	R6,#31		;一共读32次数据
READ_LOP1:	MOV	R7,#8
		CLR 	A
READLOOP2:	CLR 	ADSCL
		NOP 	
		NOP
		NOP
		SETB 	ADSCL
		MOV	C,ADSDA
		RLC 	A
 	        DJNZ	R7,READLOOP2
		CLR	ADSCL
		CLR	ADSDA		;给mcp3221一个答信号(ACK)
		MOV	@R1,A		;送给RAM
		INC 	R1		;下一个RAM单元
		NOP
		NOP
		SETB	ADSCL
		DJNZ	R6,READ_LOP1
	
		MOV	R7,#8
		CLR 	A
READLOOP3:	CLR 	ADSCL
		SETB	ADSDA
		NOP 	
		NOP
		SETB 	ADSCL
		MOV	C,ADSDA
		RLC 	A
 	        DJNZ	R7,READLOOP3
		CLR	ADSCL
		NOP
		SETB	ADSDA		;给mcp3221一个答信号(NAK)
		MOV 	@R1,A
		SETB	ADSCL
		NOP
		NOP
		CLR	ADSCL
		CLR 	ADSDA		;STOP
		NOP
		SETB	ADSCL		;STOP
		SETB 	ADSDA
		RET
;**************************************************************************
;		MCP3221子程序结束
;**************************************************************************


;**************************************************************************
;		MAX485子程序开始
;**************************************************************************
;///////////////////////////////////////////////////////////////////////


;**************************************************************************
;		MAX485子程序结束
;**************************************************************************



;**************************************************************************
;		键盘子程序开始
;**************************************************************************


;**************************************************************************
;		键盘子程序结束
;**************************************************************************


;**************************************************************************
;		排序子程序开始
;**************************************************************************
;//////////////////////排序子程序/////////////////////////
;程序名称:DATA_PX
;说明:将50H—6FH的32个字节的16个16位数进行排序
;输入: 无
;反回值:无
;使用资源:R1,R6,R7,A,C
;/////////////////////////////////////////////////////////////////
;修改时间:
;修改目的:
;修改人:
;修改记录:
;//////////////////////////////////////////////////////////////////
DATA_PX:	MOV 	R0,#50H
		MOV 	R1,#52H
		MOV 	R7,#16

		MOV	R6,07H	;07H=R7  指的是同一个数
		DEC	R6	
		DEC	R6
PX_MAIN:	MOV 	A,@R0
	
		MOV	12H,@R1
		CJNE	A,12H,BJ_PX
			;高位相等时,再判断低位是否相等
			INC 	R0
			MOV 	A,@R0
			DEC	R0

			INC	R1
			MOV 	12H,@R1
			DEC 	R1

			CJNE	A,12H,PX_NEXT1		;低位也相等,顺序不运
			JC	PX_NEXT1		;低位不等,前面大于后面的,顺序不动

				MOV	12H,@R0			;在这里要跳到两个温度交换程序
				MOV	A,@R1
				MOV	@R0,A
				MOV	@R1,12H
				INC	R0
				INC	R1
				MOV	12H,@R0			
				MOV	A,@R1
				MOV	@R0,A
				MOV	@R1,12H
				DEC	R0
				DEC	R1
				LJMP 	PX_NEXT1		;去它该去的地方,哈哈!!



BJ_PX:		JC	PX_NEXT1	;前大于后,顺序不动
				MOV	12H,@R0			;在这里要跳到两个温度交换程序
				MOV	A,@R1
				MOV	@R0,A
				MOV	@R1,12H
				INC	R0
				INC	R1
				MOV	12H,@R0			
				MOV	A,@R1
				MOV	@R0,A
				MOV	@R1,12H
				DEC	R0
				DEC	R1
				LJMP 	PX_NEXT1		;去它该去的地方,哈哈!!
PX_NEXT1:	
		INC R0
		INC R0
		INC R1
		INC R0
		DJNZ R7,PX_MAIN		
PX_RET:		RET
;**************************************************************************
;		排序子程序结束
;**************************************************************************

;**************************************************************************
;		MAX485子程序开始
;**************************************************************************


;**************************************************************************
;		MAX485子程序结束
;**************************************************************************

;**************************************************************************
;		均值子程序开始
;**************************************************************************


;**************************************************************************
;		均值子程序结束
;**************************************************************************



TAB:    ;表
    DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H

END

⌨️ 快捷键说明

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