四、软件原理
系统程序包括主程序和串口通信断服务程序。主程序首先从X25045中取出本设备编号备用,然后进入循环。特环程序的主要任务包括:①检测换色标志,当换色标志有效时,则调用步进电机驱动程序控制转抽,将换色器切换到新颜色;②帧间隔1s延时,当时间到时,中断程序将复位串口接收程序;③定时复位X25045的看门狗。
通信中断服务程序用于检测RS-485总线发送的复位信号和起始代码。当两者同时有效时开始对后续接收的数据帧进行帧计数。当计数值与设备编号相同时,说明当前帧是给本设备的数据,于是根据该数据设置换色标志,由主程序执行换色动作。
X25045的通信接口软件:
| CS | BIT | P3.2 |
| SCK | BIT | P3.3 |
| SI | BIT | P3.4 |
| SO | BIT | P3.5 |
(1)X25045数据写入程序
功能:将缓冲区数据写入指定地址开始的单元。
入口:F0、R3是E2PROM单元地址最高位低八位;R0是缓冲区首地址;R2是缓冲区长度。
WRITEX:LCALL STAX ;指令启动
MOV A,#06H ;输出WREN
LCALL BYTE_OUT
LCALL STAX ;下一指令启动
MOV A,#02H ;输出WRITE
MOV C,F0 ;插入单元地址最高位
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;输出单元地址低八位
LCALL BYTE_OUT
BYWR:MOV A,@R0 ;从缓冲区取数输出
LCALL BYTE_OUT
INC R0 ;指针加1
DJNZ R2,BYWR ;缓冲区未空则继续输出
LCALL ENDX ;指令结束
LCALL WIP_CHK ;等待WIP=0
RET
(2)X25045数据读出程序
功能:把指定地址开始的单元数据读出并放入缓冲区
入口:与写入程序相同。
READX:LCALL STAX
MOV A,#03H ;输出READ
MOV C,F0
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;输出低八位地址
LCALL BYTE_OUT
BYRD:LCALL BYTE_IN ;输入数据送入缓冲区
MOV @R0,A
INC R0 ;指针加1
DJNZ R2,BYRD ;缓冲区未满则继续输入
LCALL ENDX
RET
(3)X25045状态寄存器写入程序
功能:对状态寄存器进行设置。
入口:ACC是修改值。
WRSR:LCALL STAX
PUSH ACC
MOV A,#06H ;输出WREN
LCALL BYTE_OUT
LCALL STAX
MOV A,#01H ;输出WRSR
LCALL BYTE_OUT
POP ACC ;输出设置值
LCALL BYTE_OUT
LCALL ENDX
LCALL WIP_CHK ;等待WIP=0
RET
(4)X25045状态寄存器读出程序
功能:读出状态寄存器当前值。
出口:ACC是当前值。
RDSR:LCALL STAX
MOV A,#05H
LCALL BYTE_OUT
LCALL BYTE_IN
LCAL ENDX
RET
(5)其他子程序
WIP_CHK:LCALL RDSR ;等待X25045结束内部写周期
JB ACC.0,WIP_CHK
RET
STAX:SETB CS ;启动X25045指令
NOP ;先拉高CS,再拉你SCK,最后拉低CS
CLR SCK
NOP
CLR CS
NOP
RET
ENDX:CLR SCK ;结束X25045指令
SETB CS ;先拉低SCK后拉高CS
NOP
NOP
RET
BYTE_OUT:MOV R4,#08H ;向X25045写入一字节数据
BOUT1:CLR SCK
RLC A
MOV SI,C
SETB SCK
NOP
NOP
DJNZ R4,BOUT1
RET
BYTE_IN:MOV R4,#08H ;从X25045读出一字节数据
BIN1:CLR SCK
MOV C,SO
RLC A
SETB SCK
NOP
NOP
DJNZ R4,BIN1
RET
RST_DOG:SETB CS ;复位看门狗定时器
NOP
CLR CS
NOP
SETB CS
RET