📄 p190v30.inc
字号:
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 + -