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

📄 项目.asm

📁 用单片机读MCP3221,及x5045程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;/////////////////////// 外部引脚定义 /////////////////////////
;外部资源 	狗+x5045
;		485
;		mcp3221   12bit AD
;		9LED  4094
;/////////////////////////////////////////////////////////////
/*485总线接口*/
	X485RXD 	BIT P3.0
	X485TXD 	BIT P3.1
	X485E		BIT P3.7
/*I2C AD 接口*/
	ADSCL 		BIT P1.1
	ADSDA 		BIT P1.0
/*SPI 5045接口*/
	X5045SO 	BIT P3.2
	X5045SI 	BIT P3.4
	X5045CLK 	BIT P3.3
	X5045WDI 	BIT P3.5
/*KEY接口*/
	KEY1		BIT P1.7
	KEY2		BIT P1.6
	KEY3		BIT P1.5
;	KEY4		BIT P1.4&P1.6

/*显示40984接口*/
        STR     	BIT P1.4
        DATA1   	BIT P1.3
        CLK     	BIT P1.2

;////////////////////////   内部资源定义 ////////////////////////////////
;
;
;
;
;////////////////////////////////////////////////////////////////////////
        LED9    BIT 10H
        D2      BIT 13H
        D3      BIT 14H
        D4      BIT 15H
        D5      BIT 16H
        D6      BIT 17H
        DAT1    EQU 22H
        DAT2    EQU 23H
        DAT3    EQU 24H



        ORG 	0000H
        LJMP 	MAIN                 	;跳到主程序入口处
        ORG 	000BH
        LJMP	TIM1                 	;中断入口,跳到中断处理程序执行
        ORG 	030H
MAIN:   MOV 	SP,#70H		  	;堆栈入口,最大入栈数量16字节
        MOV 	TMOD,#00000001B       	;设置计数器为模式1

        MOV 	TH0,#0ECh             ;设置定时初值
        MOV 	TL0,#78H

        SETB ET0                  ;开定时器0中断
        SETB EA                   ;开总为断
        SETB TR0                  ;开始计数


	MOV 	R0,#00H			;读5045 00H的数据,判断是否是00,是的话说明是测量温度
	LCALL	BYTE_READ		
	JNZ	YLCJ			;如果读出的数据不为0说明不是采集温度的,是采集压力的跳到压力程序
	
		MOV 	R6,#28		;将ROM中的标定表复制到RAM中共28个字节
		MOV 	R0,#1
		MOV	R1,#30H
WDTAB_L1: 	LCALL   BYTE_READ
		MOV 	@R1,A
		INC 	R0
		INC	R1
		DJNZ 	R6,WDTAB_L1


WDMAIN1:	LCALL 	IIC_STAT	;从MCP3221中读16次数据,存放到RAM50H—6FH的32个字节中
			




	

	
	










YLCJ:			;压力采集相关程序





	LJMP 	YLCJ
	
	
	


















        MOV R5,#00H
        MOV R7,#00H               ;设置初值
        MOV R6,#0FEH
        MOV R0,#40H               ;要显示内容的首地址
        MOV DPTR,#TAB             ;表地址

        MOV 40H,#0                ;显示内容万位初值
        MOV 41H,#0                ;显示内容千位初值
        MOV 42H,#0                ;显示内容百位初值
        MOV 43H,#0                ;显示内容十位初值
        MOV 44H,#0                ;显示内容个位初值

        MOV 45H,#0                 ;千
        MOV 46H,#0                 ;百
        MOV 47H,#0                 ;十
        MOV 48H,#0                 ;个

        MOV DAT1,#11100001B
        MOV DAT2,#11111110B
        MOV DAT3,#00H



	jmp $	



;//////////////////////定时器1中断程序////////////////////////////
TIM1:   CLR TR0                          ;停止计数
        MOV TH0,#0FCH                    ;重装计数器
        MOV TL0,#18H
        SETB TR0                         ;开始计数
        INC R7                           ;r7 加一,代表计数器中断了一次
        MOV  A,@R0                       ;把本次要显示的数取出来放到A中
        MOVC  A,@A+DPTR                  ;查找相应的字码
        MOV DAT3,A

        CALL DISPLAY
        JB LED9,LEDNEXT1
        MOV DAT2,#11111110B
        SETB LED9
        JMP FNEXT
LEDNEXT1:
        MOV A,DAT2
        SETB C
        RLC A
        MOV DAT2,A
        JC FNEXT
        MOV DAT2,#0FFH
        CLR LED9

 FNEXT: INC R0
        CJNE R0,#49H,NEXT1
        MOV R0,#40H
 NEXT1: JB ACC.4,EXIT
        MOV A,#0FEH
 EXIT:  MOV R6,A
        RETI


;*****************************************************************
;****************************************************************
;	/*显示4094接口*/
;        STR     	BIT P1.4
;        DATA1   	BIT P1.3
;        CLK     	BIT P1.2
;****************************************************************
;****************************************************************
;//////////////////////4094芯片读写程序/////////////////////////
;程序名称:DISPLAY
;说明:将显示缓冲中的数据送到4094中
;输入: 无
;反回值:无
;调用  :无
;使用资源:R1,R3,R4,C,A
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
DISPLAY:
        MOV R3,#3	;R3
        MOV R1,#22H	;R1
DSP2:   MOV A,@R1	
        MOV R4,#8	;R4
        CLR C		;C
DSP1:   CLR CLK
        RLC A		;A
        MOV DATA1,C
        SETB CLK
        DJNZ R4,DSP1
        INC R1
        DJNZ R3,DSP2
        SETB STR
        CLR STR
        RET
;*****************************************************************
;****************************************************************

;		以下是5045的相关子程序

;	X5045SO 	 P3.2
;	X5045SI 	 P3.4
;	X5045CLK 	 P3.3
;	X5045WDI 	 P3.5

;****************************************************************
;****************************************************************

;//////////////////////x5045芯片读写程序/////////////////////////
;程序名称:WREN_COM
;说明:向5045发送写允许指令(0x06)
;输入: 无
;反回值:无
;调用  :OUTBYTE 子程序
;使用资源:r7,a
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
WREN_COM:       CLR     X5045CLK
                NOP
                CLR     X5045WDI
                MOV     A,#06H
                LCALL   OUTBYTE
                CLR     X5045CLK
                SETB    X5045WDI
                RET
;//////////////////////x5045芯片读写程序/////////////////////////
;程序名称:DISWREN_COM
;说明:向5045发送写禁止指令(0x04)
;输入: 无
;反回值:无
;调用  :OUTBYTE 子程序
;使用资源:R7,A
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
DISWREN_COM:    CLR     X5045CLK
                CLR     X5045WDI
                MOV     A,#04H
                LCALL   OUTBYTE
                CLR     X5045CLK
                SETB    X5045WDI
                RET



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


;//////////////////////x5045芯片读写程序/////////////////////////
;程序名称:BYTE_WRITE
;说明:写字节到X5045指定的地址
;输入: (R0)存放写入的目标地址,(R1)将要写入的数据地址
;反回值:无
;调用:  OUTBYTE,INBYTE,WIN_CHECK
;使用资源:R7,A,c
;///////////////////////////////////////////////////////////////
;修改时间
;修改目的
;修改人
;修改记录
;//////////////////////////////////////////////////////////////
BYTE_WRITE:     CLR     EA
                LCALL   WREN_COM
                CLR     X5045CLK
                CLR     X5045WDI
                MOV     A,#02H          ;02h=写5045EPROM 指令
                LCALL   OUTBYTE
                MOV     A,R0            ;(r0)=eeprom 地址
                LCALL   OUTBYTE
                MOV     A,@R1           ;(r1)=将要写入数据的地址
                LCALL   OUTBYTE
                CLR     X5045CLK
                SETB    X5045WDI
                LCALL   WIN_CHECK
                LCALL   DISWREN_COM
                SETB    EA

⌨️ 快捷键说明

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