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

📄 p190v20.inc

📁 本程序为M190微型打印机的程序,采用C语言和汇编混合编写,已经经过调试并在应用中
💻 INC
📖 第 1 页 / 共 2 页
字号:
	call	tab_741
	inc	1,xbc		;取第13个字节的点阵信息
	call	tab_630
	inc	1,xbc		;取第14个字节的点阵信息
	call	tab_52
	inc	1,xbc		;取第15个字节的点阵信息
	call	tab_741
	ld	d,(p_flag)	;11位完成后,第12位清0
	cpl	d
	and	(xhl),d
	inc	1,xhl
	dec	1,(count_tab)
	jr	z,renew
	ret

;***********汉字第10行的算法**********
arithmetic_10:
	add	xbc,11		;取第12个字节的点阵信息
	call	tab_630
	inc	1,xbc		;取第13个字节的点阵信息
	call	tab_52
	inc	1,xbc		;取第14个字节的点阵信息
	call	tab_741
	inc	1,xbc		;取第15个字节的点阵信息
	call	tab_630
	ld	d,(p_flag)	;11位完成后,第12位清0
	cpl	d
	and	(xhl),d
	inc	1,xhl
	dec	1,(count_tab)
	jr	z,renew
	ret

;***********汉字第11行的算法**********
arithmetic_11:
	add	xbc,11		;取第12个字节的点阵信息
	call	tab_52
	inc	1,xbc		;取第13个字节的点阵信息
	call	tab_741
	inc	1,xbc		;取第14个字节的点阵信息
	call	tab_630
	inc	1,xbc		;取第15个字节的点阵信息
	call	tab_52
	ld	d,(p_flag)	;10位完成后,第11位清0
	cpl	d
	and	(xhl),d
	inc	1,xhl
	dec	1,(count_tab)
	jr	nz,next_f

	ld	(count_tab),18
	ld	xhl,pszdot
	rrc	(p_flag)		;取下一个针;phh

next_f:
	ld	d,(p_flag)	;11位完成后,第12位清0
	cpl	d
	and	(xhl),d
	inc	1,xhl
	dec	1,(count_tab)
	jr	z,renew
	ret
renew:
	ld	(count_tab),18
	ld	xhl,pszdot
	rrc	(p_flag)		;取下一个针;phh
	ret

;---------------打印程序主函数,由C语言调用-----------------

;**************对18个打印位置的控制程序 by JHBCD***********

__printrow:
	ld	(p_error_flag),0x00	;打印状态标志,默认为打印出错状态
	di				;打印时将中断禁止

;********************重新初始化端口***********************

	ld	(p_p_dir),0xFF
	call	p_s_port_init

;********************************************************

   	ld	(count16),11
   	ld	(dotline),1
	ld	(print_port),0x00
	ld	b,0x1E			;0x1E=30,0x12=18
	ld	xix,pszdot

p_init:					;初始化pszdot区清零
	ld	(xix+),0x00
	djnz	b,p_init

	ld	(code+24),0x00		;加强程序健壮性,防止死循环
	ld	(code+25),0x00

	res	p_pc_bit,(p_pc_port)	;驱动马达

p_reload:
	call    __searchtab
	ld	d,18;
	ld	xix,pszdot
	ld	wa,0x9600		;装载行保护计数器,保护时间120ms

;******************等待一个行到位信号**********************

ph_wait0:
	ldcf	p_rs_bit,(p_rs)
	jp	nc,ph_wait1
	djnz	wa,ph_wait0
	ld	(p_error_flag),0x10	;打印出错声明--10--不能检测到"R"信号
	jp	printer_off

ph_wait1:
	ldcf	p_rs_bit,(p_rs)
	jp	c,ph_delay
	djnz	wa,ph_wait1
	jp	printer_off

ph_delay:
	call	p_delay

ph_wait11:
	ldcf	p_rs_bit,(p_rs)
	jp	c,solen1
	djnz	wa,ph_wait11
	jp	printer_off

;*************************第一组针*************************

solen1:
	ld	c,(xhl)
	and	c,0x92			;取出第一组针的数据
	ld	wa,0xED			;装载列保护计数器原始程序将该值赋0x2fd0

s1_wait0:				;等待T信号的"0"
	ldcf	p_ts_bit,(p_ts)
	jp	nc,s1_wait1
	djnz	wa,s1_wait0
	ld	(p_error_flag),0x20	;打印出错声明--20--不能检测到"T"信号
	jp	printer_off

s1_wait1:				;等待T信号的"1"
	ldcf	p_ts_bit,(p_ts)
	jp	c,s1_delay
	djnz	wa,s1_wait1
	jp	printer_off

s1_delay:
	call	p_delay

s1_wait11:				;等待T信号的"1"去噪声
	ldcf	p_ts_bit,(p_ts)
	jp	c,s1_print
	djnz	wa,s1_wait11
	jp	printer_off

s1_print:
	ld	(print_port),c		;送出第一组针的端口打印信号

;**************************第二组针************************

solen2:
	ld	c,(xhl)
	and	c,0x49			;取出第二组针的数据
	ld	wa,0xED			;装载列保护计数器

s2_wait0:				;等待T信号的"0"
	ldcf	p_ts_bit,(p_ts)
	jp	nc,s2_wait1
	djnz	wa,s2_wait0
	jp	printer_off

s2_wait1:				;等待T信号的"1"
	ldcf	p_ts_bit,(p_ts)
	jp	c,s2_delay
	djnz	wa,s2_wait1
	jp	printer_off

s2_delay:
	call	p_delay

s2_wait11:				;等待T信号的"1"去噪声
	ldcf	p_ts_bit,(p_ts)
	jp	c,s2_print
	djnz	wa,s2_wait11
	jp	printer_off

s2_print:
	ld	(print_port),c		;送出第二组针的端口打印信号

;***********************第三组针***************************

solen3:
	ld	c,(xhl)
	and	c,0x24			;取出第三组针的数据
	ld	wa,0xED			;装载列保护计数器

s3_wait0:				;等待T信号的"0"
	ldcf	p_ts_bit,(p_ts)
	jp	nc,s3_wait1
	djnz	wa,s3_wait0
	jp	printer_off

s3_wait1:				;等待T信号的"1"
	ldcf	p_ts_bit,(p_ts)
	jp	c,s3_delay
	djnz	wa,s3_wait1
	jp	printer_off

s3_delay:
	call	p_delay

s3_wait11:				;等待T信号的"1"去噪声
	ldcf	p_ts_bit,(p_ts)
	jp	c,s3_print
	djnz	wa,s3_wait11
	jp	printer_off

s3_print:
	ld	(print_port),c		;送出第三组针的打印信号

s_next:					;下一个打印位置
	inc	1,xhl			;换数据指针位置
	dec	1,d			;18个位置还没有打印完成
	jp	nz,solen1

;****************在回车前,将第三组打印针收回**************

s_off:
	ld	wa,0xED			;装载列保护计数器

off_wait0:				;等待T信号的"0"
	ldcf	p_ts_bit,(p_ts)
	jp	nc,off_wait1
	djnz	wa,off_wait0
	jp	printer_off

off_wait1:				;等待T信号的"1"
	ldcf	p_ts_bit,(p_ts)
	jp	c,off_delay
	djnz	wa,off_wait1
	jp	printer_off

off_delay:
	call	p_delay

off_wait11:				;等待T信号的"1"去噪声
	ldcf	p_ts_bit,(p_ts)
	jp	c,off_print
	djnz	wa,off_wait11
	jp	printer_off

off_print:
	ld	(print_port),0x00	;关断打印信号,开始回车过程

line_fini:				;1行的18个位置打印完成,这个时候字车正在回车途中
	inc	1,(dotline)
	dec	1,(count16)		;判断汉字的11行是否完成
	jp	nz,p_reload

;*为了保证打印质量,我们在每两行汉字之间插入一个可调整的间隙

space:
	ld	c,space_line		;调整c,可以调整两行汉字之间的间距

sp_reload:
	ld	wa,0x9600

sp_wait0:				;等待R信号的"0"
	ldcf	p_rs_bit,(p_rs)
	jp	nc,sp_wait1
	djnz	wa,sp_wait0
	jp	printer_off

sp_wait1:				;等待R信号的"1"
	ldcf	p_rs_bit,(p_rs)
	jp	c,sp_delay
	djnz	wa,sp_wait1
	jp	printer_off

sp_delay:
	call	p_delay

sp_wait11:				;等待R信号的"1"去噪声
	ldcf	p_rs_bit,(p_rs)
	jp	c,sp_next
	djnz	wa,sp_wait11
	jp	printer_off

sp_next:
	djnz	c,f_reload

p_fini:					;本次打印任务完成
	ld	(print_port),0x00
	res	p_fp_bit,(p_fp_port)	;关快速进纸机
	set	p_pc_bit,(p_pc_port)	;关电源
	ld	(p_error_flag),0x55	;打印状态标志,顺利完成打印任务
	ei	0x00			;打印完成后,方可打开中断
	ret				;打印程序完成的返回点

;****************进纸一个点阵行 by JHBCD*******************

__feedpaper:

;********************重新初始化端口***********************

	ld	(p_p_dir),0xFF
	call	p_s_port_init

;********************************************************

	ld	(p_error_flag),0x00	;打印状态标志,默认为打印出错状态
	di				;进纸时将中断禁止
	ld  	d,(code)
	res	p_pc_bit,(p_pc_port)	;驱动马达

f_reload:
	ld	wa,0x9600

f_wait0:				;等待R信号的"0"
	ldcf	p_rs_bit,(p_rs)
	jp	nc,f_wait1
	djnz	wa,f_wait0
	ld	(p_error_flag),0x10	;打印出错声明--10--不能检测到"R"信号
	jp	printer_off

f_wait1:				;等待R信号的"1"
	ldcf	p_rs_bit,(p_rs)
	jp	c,f_delay
	djnz	wa,f_wait1
	jp	printer_off

f_delay:
	call	p_delay

f_wait11:				;等待R信号的"1"去噪声
	ldcf	p_rs_bit,(p_rs)
	jp	c,f_next
	djnz	wa,f_wait11
	jp	printer_off

f_next:
	set	p_fp_bit,(p_fp_port)	;开快速进纸机
	call	f_f_delay		;调用快速进纸延迟函数
	res	p_fp_bit,(p_fp_port)	;关快速进纸机
	djnz	d,f_reload
	ld	(p_error_flag),0x55	;打印状态标志,顺利完成了打印任务

printer_off:				;打印完成后的工作
	ld	(print_port),0x00
	res	p_fp_bit,(p_fp_port)	;关快速进纸机
	set	p_pc_bit,(p_pc_port)	;关电源
	ei	0x00			;进纸完成后/打印出错返回时,方可打开中断
	ret				;进纸和打印程序出错时的返回点

;********************打印机自检函数************************

__print_test:

	ld	b,24
	ld	xix,code		;装载字符代码区首地址

p_test_init:
	ld	(xix+),0x48		;打印字符"H"
	djnz	b,p_test_init
	ld	(xix),0x00		;数组尾为一个"0"

	call	__printrow		;两次打印,进行X-Y方向打印功能检测
	call	__printrow

	ret

;**********************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -