示灯点亮,进入相应的功能处理。控制系统的监控管理程序流程如图8-2所示。
图8-1 系统监控管理程序流程图
8.3 8255芯片初始化子程序 B255: MOV
DPTR,#3FFFH ;指向8255的控制口地址
MOV A,#10001001B ;PA口输出,PB口输出,PC口输入均为方式0
MOVX @DPTR,A ;控制字被写入 MOV DPTR,#3FFCH ;指向PA口 MOV A,#0FFH MOVX @DPTR,A
;预置PA口全“1” ;输出全“1”到PA口
MOV DPTR,#3FFDH ;指向PB口 MOV A,#0FFH MOVX @DPTR,A RET
8.4 8279芯片初始化子程序 B279: MOV
DPTR,#5FFFH ;指向8279控制口地址
;清除FIFO与显示RAM命令
;命令字被写入 ;预置PB口全“1” ;输出全“1”到PB口
MOV A,#0CFH MOVX
@DPTR,A
WAIT: MOVX A,@DPTR ;从8279的控制口读取8279的状态字
JB ACC.7,WAIT ;测试显示RAM有没有被清除完毕。只有状
20
态字的D7=0时, 清除才结束 MOV
A,#08H
;编码扫描,左入口,16位字符显示,双键互锁
MOVX @DPTR,A MOV
A,#34H
;分频系数取20
MOVX @DPTR,A RET
8.5 8279控制LED显示子程序
设显示缓冲区的首地址为6BH,系统在指定的工作状态下,需要显示的字符段码的编码,事先存储在CPU内部RAM 的6BH~73H这9个字节中。已知8279的控制口地址为5FFFH,数据口地址为5FFEH,则显示程序如下: DIR: MOV DPTR,#5FFFH ;8279的控制口地址
MOV A,#90H MOVX
;写8279显示RAM的命令,
@DPTR,A ;从显示RAM的00H地址开始写,每写一次, 显示RAM的地址自动加1
MOV R0,#6BH ;显示缓冲区的首地址为6BH MOV R7,#09H ;显示缓冲区的长度为9个字节 MOV DPTR,#5FFEH;8279的数据口地址
;从CPU的RAM中读取显示段码的编码 ;PC与DTAB表格之间的偏移量
DIR0: MOV A,@R0
ADD A,#05H MOVC MOVX
A,@A+PC ;查表,取出显示段码
@DPTR,A ;送到8279显示RAM中指定的字节
INC R0 ;写8279的下一个显示RAM DJNZ RET
段码
6FH
字符
编码
R7,DIR0 ;循环9次,完成9位显示
;
DTAB: DB
DB DB DB
;F 00-01
0DAH 0BEH 0E7H
;X 02-03
21
DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB
0A3H 0CBH 0D1H 0D3H 0DCH 0CEH 0DFH
;Z 04-05
;U 06-07
;W 08-09
; - 0A
; 0 0B
21H 7BH
; 1 0C
; 2 0D ; 3 0E ; 4 0F ; 5 10 ; 6 11 ; 7 12 ; 8 13 ; 9 14 ; 0. 15
91H 19H 4BH 0DH 05H 69H 01H 09H 20H 7AH
; 1. 16
; 2. 17 ; 3. 18
; 4. 19 ; 5. 1A ; 6. 1B ; 7. 1C ; 8. 1D
; 9. 1E
90H 18H 4AH 0CH 04H 68H
00H 08H
... ... ; 根据系统需要编制字库
当需要显示一组字符时,首先给显示缓冲区的6BH~73H这9个字节赋值,然后
22
调用DIR子程序即可。例如,要显示“X-1234.56”,程序如下: MOV MOV
6BH,#02H 6CH,#03H
;“X”的一半 ;“X”的另一半
MOV 6DH,#0AH MOV 6EH,#0CH MOV 6FH,#0DH MOV 70H,#0EH MOV 71H,#19H MOV 72H,#10H MOV 73H,#11H CALL
DIR
;- ;1 ;2 ;3 ;4. ;5 ;6
;向8279的显示RAM写数
... ...
显示缓冲区(CPU内部RAM): (6BH)(6CH)(6DH)(6EH)(6FH)(70H)(71H)(72H)(73H)
| | | | | | | | |
显示字符: X
- 1 2 3
4. 5 6
| | | | | | | | |
字符编码: 02H 03H 0AH 0CH 0DH 0EH 19H 10H 11H
8.6 8279管理键盘子程序
如书后图6-7所示,当矩阵键盘有键按下时,8279即向CPU的INT1申请中断,CPU随即执行中断服务程序,从8279的FIFO中读取键值,程序如下: CLR
EX1
;关CPU的INT1中断
;指向8279控制口地址 ;准备读8279 FIFO的命令 ;写入8279控制口
MOV DPTR,#5FFFH MOV A,#01000000B MOVX
@DPTR,A
23
MOV DPTR,#5FFEH MOVX CJNE
A,@DPTR
;指向8279数据口地址 ;读出键值
;依次进行判别
A,#KEY0,NEXT0
JMP _KEY0 NEXT0: CJNE
JMP
;对应键进行处理
A,#KEY1,NEXT1
_KEY1
A,#KEY2,NEXT2
NEXT1: CJNE
JMP
_KEY2
NEXT2: ? ...
8.7 D/A电路输出模拟电压程序
如书后图6-7所示,当CPU执行写指令时,只要选中7FFFH这个地址,DAC0832与741组成的D/A转换电路即可输出直流电压。程序如下: MOV DPTR,#7FFFH ;指向DAC0832口地址
MOV A,#DATA ;准备输出的数字量00H~0FFH MOVX
@DPTR,A ;输出直流电压0~10V
8.8 步进电动机的运动控制程序
步进电动机的运动控制采用的是硬环分,其走步程序包括匀速与升降速两种,详细的设计思路见第四章第四节。 8.9 电动刀架的转位控制程序
电动刀架的转位包括控制刀架电动机的正转、反转与停止,以及4个刀位信号的识别。具体程序参考本章第二节。 8.10 主轴、卡盘与冷却泵的控制程序
车床主轴的控制,就是控制主电动机的正/反/停以及自动变速;电动卡盘需要控制其夹紧与松开;冷却泵需要控制它的启/停。这些程序都非常简单,对于某个动作的控制,只要从输出接口芯片的某个引脚输出一个电平信号即可。 现以主轴正转为例,从书后图6-7可以看出,主轴的正转由8255的PA0来控制,当用低电平信号来控制主轴正转时,程序如下: MOV DPTR,#3FFCH ;8255 PA口地址 MOVX
A,@DPTR
;读出PA口锁存器内容
24