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