⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.asm

📁 应用赛尔公司x128喷头的喷码级核心控制喷头源程序
💻 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 + -