📄 test.asm
字号:
;喷墨机控制板硬件说明:
;一、编程说明
;1、数据口(W):端口地址:330H。
; 每次先输出128BIT共8个字(WORD)到本端口,再输出点火,延时后关闭点火。
; 这样完成了一列的打印。
;2、控制口(W):端口地址:332H。
; 其中:BIT0:点火(1:关,0:开)
; BIT1:喷头通道1片选(0:有效)
; BIT2:喷头通道2片选(0:有效)
; BIT4:PO0(扩展输出开关信号0)
; BIT5:PO1(扩展输出开关信号1)
; BIT7:电眼触发方向
;3、状态口(R):端口地址:332H。
; 其中:BIT0:电眼状态(0:没看到物体,1:已经看到物体)
; BIT1:电眼当前的实际状态
; BIT2:喷头通道1片选状态(0:有效)
; BIT3:喷头通道2片选状态(0:有效)
; BIT4:PI0(扩展输入开关信号0)
; BIT5:PI1(扩展输入开关信号1)
; BIT6:PI2(扩展输入开关信号2)
; BIT7:发送状态(1:在数据发送中,此时不可向330H送数据;0:数据发送完成)
; BIT8:喷头点火信号状态(0:有效)
;4、同步器(R):端口地址:330H。
; 其中:BIT15~BIT0:同步器脉冲计数
;
;二、接头
;1、J0:PC104总线
;2、J1:同步器接头
; PIN1:+5V
; PIN2:PI2(扩展输入开关信号2)
; PIN3:同步器脉冲输入
; PIN4:GND
;3、J2:电眼接头
; PIN1:+12V
; PIN2:电眼信号
; PIN3:GND
;4、J3:高压电源
; PIN1:+38~+40V
; PIN2:GND
;5、J4/HJ1:喷头板连接头
; PIN1:+35V
; PIN2:第2通道片选
; PIN3:串行数据
; PIN4:喷头复位
; PIN5:+5V
; PIN6:数据同步时钟
; PIN7:第1通道片选
; PIN8:喷头准备好
; PIN9:点火
; PIN10:1MHz时钟
; PIN11:GND
;6、J5:扩展输入输出
; PIN1:PI1(扩展输入开关信号1)
; PIN2:PI0(扩展输入开关信号0)
; PIN3:PO1(扩展输出开关信号1)
; PIN4:PO0(扩展输出开关信号0)
; PIN5:GND
CODE SEGMENT PUBLIC 'CODE'
ASSUME CS:CODE
ORG 100H
START: PUSH CS
POP DS
PUSH CS
POP ES
LEA SI,CTRLWORD
MOV AX,[SI]
MOV BP,AX ;将控制字保存到BP中
READKEY:
MOV AH,1
INT 16H ;读键盘
JZ READSIG
XOR AH,AH
INT 16H
CMP AL,31H ;是“1” 吗?
JZ S_PRINT ;是,开始打印
CMP AL,1BH ;是“Esc” 吗?
JNZ READSIG ;不是,读电眼状态
JMP PRGEXIT ;是,退出
READSIG:
MOV DX,332H
IN AX,DX ;读状态口
TEST AX,1 ;测电眼状态
JNZ S_PRINT ;检测到开始打印
JMP READKEY
S_PRINT:
MOV DI,50 ;每列延时
MOV CX,258H ;总列数
MOV SI,288EH ;图象地址
STD ;反向取数,正向应为CLD
CALL PRINTGRP
JMP READKEY ;重新开始
PRGEXIT:
MOV AH,4CH
INT 21H
CTRLWORD DW 7
;CX=总列数,DS:SI数据首址,BP,控制字,DI,列间延时系数
;打印输出
PRINTGRP PROC NEAR
PUSH AX
PUSH BX
PUSH DX
CLI
SENDDATA:
PUSH CX
MOV BH,2 ;每列数据分2次送
SENDHALF:
MOV BL,4 ;每次送4个字
MOV AX,BP
CMP BH,2
JNZ HALF1
AND AX,0FFFDH ;第一次,设nSS1
JMP HALF0
HALF1:
AND AX,0FFFBH ;第二次,设nSS2
HALF0:
MOV DX,332H
OUT DX,AX ;开nSS1或开nSS2
SENDLINE:
LODSW ;取点阵
MOV DX,330H
OUT DX,AX ;送点阵到喷头
MOV CX,150 ;延时15US系数
CALL DELAY ;延时
MOV DX,332H
RETEST:
IN AX,DX ;读状态口
AND AL,80H ;检查数据是否完全送出
JNZ RETEST ;没完,等待
DEC BL
JNZ SENDLINE ;处理下一字
MOV AX,BP
MOV DX,332H
OUT DX,AX ;半列处理完后关nSS1和nSS2
DEC BH
JNZ SENDHALF
PUSH DI
POP CX ;延时系数,根据需要调整
CALL DELAY ;延时
MOV AX,BP
AND AX,0FFFEH ;开点火
MOV DX,332H
OUT DX,AX
MOV CX,50 ;延时5US系数
CALL DELAY ;延时
OR AX,1 ;关点火
OUT DX,AX
POP CX
LOOP SENDDATA ;处理下一列
STI
POP DX
POP BX
POP AX
PRINTGRP ENDP
;延时子程序
DELAY PROC NEAR
DELAYS:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
LOOP DELAYS
RET
DELAY ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -