2 、下位机软件流程图
3、子程序部分
(1)键盘输入及显示部分
在该系统中,我们选用了8279芯片,在程序中查询键值,送入固定单元,如果无键按下,则送#0FFH入固定单元,然后查询此单元,如果为#0FFH,则返回,否则根据单元的键值内容转入相应的功能子程序;而显示部分主要把待显示的数据经过拆分成7位(本系统采用7位数码管显示),分别送给显示缓冲区,由查表的方式从表中取出7个相应的字型,送到8279数据口实现动态显示,8279的键盘扫描及显示方式是通过初始化编程来实现的,8279初始化部分程序如下:
MOV DPTR, #7FF0H; 8279芯片的状态地址
MOV A, #0D1H; 清除命令
MOV @DPTR, A; 命令字送入
LL: MOV A, @DPTR; 读8279状态字
JB ACC.7, LL ; 清除等待
MOV A, #08H; 显示器左边输入外部译码,双键互锁方式
MOV @DPTR, A; 命令字送入
MOV A, #2AH; 时钟编程命令
MOV @DPTR,A; 命令字送入
RET; 返回
(2)MC146818时钟部分
MC146818芯片是摩托罗拉公司生产的一种可编程的时钟芯片,该系统中用它来读写恒星时,其中一些主要的操作就是芯片的初始化,读时间操作,写时间操作几大部分,在使用该芯片进行执行读/写时间操作时,必须得注意,要首先查询它的状态看它是否正在刷新数据,如果是,必须等刷新数据动作完成之后再对芯片进行读/写操作,否则容易出错,MC146818的初始化部分程序如下:
MOV DPTR,#0BFCAH; A寄存器口地址
MOV A,#26H; 命令字
MOVX @DPTR,A
INC DPL; B寄存器口地址
MOV A,#1AH; 命令字
MOVX @DPTR,A
RET; 返回
读时间子程序:
MOV DPTR, #0BFCAH
AA: MOVX A, @DPTR; 读取状态字
ANL A, #80H
JNZ AA; 芯片是否正在刷新?否,读取数据
MOV DPTR, #0BFC0H;读秒单元
MOVX A, @DPTR
MOV @R1, A
INC R1
MOV DPL, #0C2H; 读分单元
MOVX A, @DPTR
MOV @R1,A
INC R1
MOV DPL, #0C4H; 读时单元
MOVX A, @DPTR
MOV @R1, A
RET; 返回
写时间的子程序同上类似,不再多述。
(3)串行通信子程序
W77E58实现双串口通信,初始化完毕后进入主流程,逐个查询串口是否有通信数据请求,如果有则进入通信子程序执行并返回,否则程序直接往下执行,把下位机的数据分别发送给把手盒和工控机,等待接收控制命令。具体的初始化程序如下: