📄 项目.asm
字号:
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 + -