📄 项目.asm
字号:
;/////////////////////// 外部引脚定义 /////////////////////////
;外部资源 狗+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 + -