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

📄 p190v30.inc

📁 本程序为M190微型打印机的程序,采用C语言和汇编混合编写,已经经过调试并在应用中
💻 INC
📖 第 1 页 / 共 2 页
字号:
	ld	xwa,0
	ld	xbc,0
	ld	a,(xix)
	sub	xwa,0xB0
	mul	xwa,94
	inc	1,xix
	ld	c,(xix)
	sub	xbc,0xA1
	add	xbc,xwa
	mul	xbc,24
	add	xbc,zikuadr+0x23A

chi_lin_1_8:
	cp	(dotline),9
	jr	nc,chi_lin_9_11

	ld	d,8
	sub	d,(dotline)		;取第(8-dotline)位上的点
	ld	w,12			;循环11次
	calr	p_search		;调用查表函数
	inc	1,xix			;移动code区指针
	jp	get_code		;取下一个字

chi_lin_9_11:
	ld	d,16
	sub	d,(dotline)		;取第(16-dotline)位上的点

	add	xbc,12
	ld	w,12
	calr	p_search
	inc	1,xix
	jp	get_code

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

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

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

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

   	ld	(line_count),11
   	ld	(dotline),1

	ld	b,18
	ld	xhl,pszdot

p_init:					;初始化pszdot区清零
	ld	(xhl+),0x00
	djnz	b,p_init
	ld	(print_port),0x00	;为了兼容STAR500打印头的虚拟串口初始化问题
	ld	(code+max_lenth),0x00	;加强程序健壮性,防止死循环
	res	p_pc_bit,(p_pc_port)	;驱动马达
p_reload:
	calr    searchtab
	ld	d,18;
	ld	xhl,pszdot

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

ph_wait:
	calr	rs_dect			;调用"RS"信号检测函数
	cp	(p_error_flag),0x10	;判断"RS"信号检测函数是否检测到R信号
	jp	z,printer_off		;"RS"检测函数报告没有检测到R信号,跳去针驱动完成,并向高层报错

	ld	w,0x07
wait_7ts:
	calr	ts_dect			;调用"TS"信号检测函数
	cp	(p_error_flag),0x20	;判断"TS"信号检测函数是否检测到T信号
	jp	z,printer_off		;"TS"检测函数报告没有检测到T信号,跳去针驱动完成,并向高层报错
	djnz	w,wait_7ts		;等待7个T信号

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

solen1:
	ld	e,(xhl)
	and	e,0x92			;取出第一组针的数据
	calr	ts_dect			;调用"TS"信号检测函数
	cp	(p_error_flag),0x20	;判断"TS"信号检测函数是否检测到T信号
	jp	z,printer_off		;"TS"检测函数报告没有检测到T信号,跳去针驱动完成,并向高层报错
	ld	(print_port),e		;送出数据到打印针

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

solen2:
	ld	e,(xhl)
	and	e,0x49			;取出第二组针的数据
	calr	ts_dect			;调用"TS"信号检测函数
	cp	(p_error_flag),0x20	;判断"TS"信号检测函数是否检测到T信号
	jp	z,printer_off		;"TS"检测函数报告没有检测到T信号,跳去针驱动完成,并向高层报错
	ld	(print_port),e		;送出数据到打印针

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

solen3:
	ld	e,(xhl+)		;换数据指针位置
	and	e,0x24			;取出第二组针的数据
	calr	ts_dect			;调用"TS"信号检测函数
	cp	(p_error_flag),0x20	;判断"TS"信号检测函数是否检测到T信号
	jr	z,printer_off		;"TS"检测函数报告没有检测到T信号,跳去针驱动完成,并向高层报错
	ld	(print_port),e		;送出数据到打印针

s_next:					;下一个打印位置
	djnz	d,solen1		;18个位置还没有打印完成

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

s_off:
	calr	ts_dect			;调用"TS"信号检测函数
	cp	(p_error_flag),0x20	;判断"TS"信号检测函数是否检测到T信号
	jr	z,printer_off		;"TS"检测函数报告没有检测到T信号,跳去针驱动完成,并向高层报错
	ld	(print_port),0x00	;关断打印信号,开始回车过程

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

p_space:				;在两个字符行之间插入若干个空的点阵行
	ld	d,1			;加入1行空行
p_s_l:					;---Print Space Loop
	call	rs_dect			;调用"RS"信号检测函数
	cp	(p_error_flag),0x10	;判断"RS"信号检测函数是否检测到R信号
	jp	z,printer_off		;"RS"检测函数报告没有检测到R信号,跳去针驱动完成,并向高层报错
	djnz	d,p_s_l

	ld	(p_error_flag),0x55	;打印状态标志,顺利完成打印任务---Test Only
	jr	printer_off

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

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

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

	ld  	d,(code)		;CODE代码区的第一字节存放要进纸的行数
	res	p_pc_bit,(p_pc_port)	;驱动马达

f_reload:
	calr	rs_dect			;调用"RS"信号检测函数
	cp	(p_error_flag),0x10	;判断"RS"信号检测函数是否检测到R信号
	jr	z,printer_off		;"RS"检测函数报告没有检测到R信号,跳去针驱动完成,并向高层报错

	ld	w,0x07
f_next:
	calr	ts_dect			;调用"TS"信号检测函数
	cp	(p_error_flag),0x20	;判断"TS"信号检测函数是否检测到T信号
	jr	z,printer_off		;"TS"检测函数报告没有检测到T信号,跳去针驱动完成,并向高层报错
	set	p_fp_bit,(p_fp_port)	;开快速进纸机
	djnz	w,f_next		;在7个T脉冲后关断进纸机
	res	p_fp_bit,(p_fp_port)	;关快速进纸机
	djnz	d,f_reload		;判断是否进完

	ld	(p_error_flag),0x55	;打印状态标志,顺利完成了打印任务
printer_off:				;打印完成后的工作
	res	p_fp_bit,(p_fp_port)	;关快速进纸机
	set	p_pc_bit,(p_pc_port)	;关电源

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

	ld	(p_p_dir),0xFF
	ld	(print_port),0x00
	ld	(p_s_fc),p_s_fc_v
	ld	(p_s_dir),p_s_dir_v
	ei	0x00			;进纸完成后/打印出错返回时,方可打开中断
	ret				;进纸和打印程序出错时的返回点

;********************普通进纸函数************************

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

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

	ld  	d,(code)		;CODE代码区的第一字节存放要进纸的行数
	res	p_pc_bit,(p_pc_port)	;驱动马达

nf_reload:
	calr	rs_dect			;调用"RS"信号检测函数
	cp	(p_error_flag),0x10	;判断"RS"信号检测函数是否检测到R信号
	jr	z,printer_off		;"RS"检测函数报告没有检测到R信号,跳去针驱动完成,并向高层报错
	djnz	d,f_reload		;判断是否进完
	ld	(p_error_flag),0x55	;打印状态标志,顺利完成了打印任务
	jp	printer_off		;完成

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

__print_test:
	ld	xix,code		;装载字符代码区首地址

	ld	(xix+),0xC7
	ld	(xix+),0xB0		;前C7B0

	ld	(xix+),0xB7
	ld	(xix+),0xE6		;锋C7B0

	ld	(xix+),0xCB
	ld	(xix+),0xB0		;税CBB0

	ld	(xix+),0xBF
	ld	(xix+),0xD8		;控BFD8

	ld	(xix+),0xB4
	ld	(xix+),0xF2		;打B4F2

	ld	(xix+),0xD3
	ld	(xix+),0xA1		;印D3A1

	ld	(xix+),0xD7
	ld	(xix+),0xD4		;自D7D4

	ld	(xix+),0xBC
	ld	(xix+),0xEC		;检BCEC

	ld	(xix),0x00

	calr	__printrow

	ld	b,24
	ld	xix,code		;装载字符代码区首地址
	ld	a,33
p_test_init_a1:				;ASCII字符"!"-"8"
	ld	(xix+),a
	inc	1,a
	djnz	b,p_test_init_a1
	ld	(code+24),0x00		;数组尾为一个"0"

	calr	__printrow

	ld	b,24
	ld	xix,code		;装载字符代码区首地址
	ld	a,57
p_test_init_a2:				;ASCII字符"9"-"P"
	ld	(xix+),a
	inc	1,a
	djnz	b,p_test_init_a2
	ld	(code+24),0x00		;数组尾为一个"0"

	calr	__printrow

	ld	b,24
	ld	xix,code		;装载字符代码区首地址
	ld	a,81
p_test_init_a3:				;ASCII字符"Q"-"h"
	ld	(xix+),a
	inc	1,a
	djnz	b,p_test_init_a3
	ld	(code+24),0x00		;数组尾为一个"0"

	calr	__printrow

	ld	b,18
	ld	xix,code		;装载字符代码区首地址
	ld	a,105
p_test_init_a4:				;ASCII字符"i"-"z"
	ld	(xix+),a
	inc	1,a
	djnz	b,p_test_init_a4
	ld	(code+18),0x00		;数组尾为一个"0"

	calr	__printrow

	ld	(code),30
	calr	__feedpaper		;走纸测试

	ret

;********************黑标检测函数************************

__check_black:

	ld	(code),0x01		;走纸行数
	ld	a,0x80			;最大走纸行数

feed_go:
	calr	__feedpaper		;走纸
	ldcf	7,(P8)			;检测P8.7是否为低
	jr	nc,black_beg		;为低,检测到黑标开始
	djnz	a,feed_go		;继续检测黑标开始
	jr	cb_error		;出错结束

black_beg:
	ld	a,0x0F			;最大走纸行数

black_continue:
	calr	__feedpaper		;走纸
	ldcf	7,(P8)			;检测P8.7是否为高
	jr	nc,black_err_over	;为高,检测到黑标结束
	ret
black_err_over:
	djnz	a,black_continue	;继续检测黑标结束
cb_error:
	ld	(p_error_flag),0x02	;错误标志
	ret

⌨️ 快捷键说明

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