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

📄 print.asm

📁 linux下打印驱动源代码 适用于双步进针打驱动
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        pop     ax                                          
        br      $Cm_hp_here_wait                  		;HP为低中的情况2
Cm_hp_here:					            
        movw    cm_step_num,#12                   		;HP为低中的情况1 移12步
Cm_hp_here_wait:                                            
        cmp     cm_init_flag,#MOTOR_IDLE                           
        bne     $Cm_hp_here_wait                  		;循环等待 
Cm_init_left:                                               
        movw    cm_step_num,#52			            
        mov     cm_rush_flag,#MOTOR_RUSH_STATE   ;MOTOR_HOLD_STATE=000H  ;保持状态
                                                 ;MOTOR_RUSH_STATE=001H  ;rush状态
                                                 ;MOTOR_DRIVE_STATE=011H ;驱动状态           
        mov     cm_init_flag,#MOTOR_INIT                           
        mov     cm_dir_flag,#MOTOR_DIR_L_OR_B                            
        mov     db_10Step12SwitchFlag,#DB_12STEP                  
        mov     cm_step_counter,#12                        
        mov     cm_speed_state,#MOTOR_SPEED_ACC                         
        call    timer20_init                      		;hp信号为高,向走左no more than 49步
Cm_init_left_wait_0:                                        
        cmp     cm_init_flag,#MOTOR_IDLE                           
        bne     $Cm_init_left_wait_0         ;由Timer2中断完成加-匀-减速过程               
        call    hp_signal                                   
        bnc     $Cm_init_last                               
        mov     print_return_value,#PRNT_HP_ERR		            
        ret                                        		;停下还 hp signal高则还回硬件错误
Cm_init_last:                                               
        movw    cm_step_num,#65			            
        mov     cm_rush_flag,#MOTOR_RUSH_STATE                           
        mov     cm_init_flag,#MOTOR_INIT                           
        mov     cm_dir_flag,#MOTOR_DIR_R_OR_F                            
        mov     db_10Step12SwitchFlag,#DB_12STEP                  
        mov     cm_step_counter,#12                        
        mov     cm_speed_state,#MOTOR_SPEED_ACC                         
        call    timer20_init                        		;最后走52步
Cm_init_last_wait:                                          
        cmp     cm_speed_state,#MOTOR_SPEED_CONST                         
        bne     $Cm_init_last_wait1                         
        call    hp_signal                                   
        bnc     $Cm_init_last_wait1                         
        br      $Cm_init_hp_here1                   		;遇HP高 
                                                            
Cm_init_last_wait1:                                         
        cmp     cm_init_flag,#MOTOR_IDLE                           
        bne     $Cm_init_last_wait                          
        mov     print_return_value,#PRNT_HP_ERR		            
        ret                                        		;停下还 hp signal低则还回硬件错误
Cm_init_hp_here1:					    
        movw    cm_step_num,#10                     		;遇HP高移10steps
Cm_init_hp_here1_wait:                                      
        cmp     cm_init_flag,#MOTOR_IDLE                           
        bne     $Cm_init_hp_here1_wait                      
                                                            
        movw    stop_position,#478                          
        cmp     db_PaperWideFlag,#PAPER_WIDE_57                           
        bne     $Cm_init_init_end                           
        movw    stop_position,#358                  		;HP初始化结束
Cm_init_init_end:                                  	        
        call    cm_move_in_centre                        
        ret                 
;******************************************************************************
; 函数名:
;     cm_move_in_centre
;
; 功能:
;     字车走到中间位置     
;------------------------------------------------------------------------------- 
cm_move_in_centre:                                         
        cmp	cm_init_flag,#MOTOR_IDLE                       
        bne	$cm_move_in_centre                  	;等车停止
cm_move_in_centre_0:                                        
        movw	ax,#228				                
        cmp	db_PaperWideFlag,#PAPER_WIDE_57                       
        be	$cm_move_in_centre_00               	;57mm
        movw	ax,#268				        ;76mm 总步数268×2 纸类型不同中间位置就不一样
cm_move_in_centre_00:                                       
        movw	bc,ax                                       
        cmpw	stop_position,ax                            
        bl	$cm_move_in_centre_01                   
        bh	$cm_move_in_centre_02                   
        br	$!cm_move_in_centre_exit             	;字车当前停止位置与中间位置的比较
cm_move_in_centre_01:                                       
        mov	cm_dir_flag,#MOTOR_DIR_R_OR_F                        
        subw	ax,stop_position                            
        incw	ax                     ;奇数补偿                     
        shrw	ax,1                                        
        movw	cm_idle_num,ax                              
        br	$!cm_move_in_centre_03               	;S<centre 向右走
cm_move_in_centre_02:                                       
        mov	cm_dir_flag,#MOTOR_DIR_L_OR_B                        
        subw	stop_position,ax      ; stop_position-ax -> stop_position                      
        movw	ax,stop_position      ;stop_position -> ax                      
        incw	ax                    ;ax++                      
        shrw	ax,1                  ;ax/2 ->ax                      
        movw	cm_idle_num,ax                       	;S>centre 向右走
cm_move_in_centre_03:                                       
        mov	cm_speed_state,#MOTOR_SPEED_LOW                    
        cmpw	cm_idle_num,#24                             
        bnh	$cm_move_in_centre_04                   
        subw	cm_idle_num,#24                             
        mov	cm_speed_state,#MOTOR_SPEED_ACC                     
cm_move_in_centre_04:                                       
        mov	cm_logic_flag,#01h                      
        movw	stop_position,bc                            
        call	start_cm_motor                              
cm_move_in_centre_exit:                                  
        ret
                                                                       
;******************************************************************************
; 函数名:
;     start_cm_motor
;
; 功能:
;     启动字车电机       
;------------------------------------------------------------------------------- 
start_cm_motor:                                             
        mov	cm_rush_flag,#MOTOR_RUSH_STATE                       
        mov	cm_init_flag,#MOTOR_WORK
        mov     cm_step_counter,#12                                                
        cmp	cm_logic_flag,#00h                      
        bne	$start_cm_motor_1                       
        mov	cm_speed_state,#MOTOR_SPEED_ACC                     
start_cm_motor_1:                                           
        call	timer20_init                                
        ret                             		;input cm_step_num,cm_dir_flag 步辐,方向
                                                            
;******************************************************************************
; 函数名:
;     timer20_int
;
; 功能:
;     timer20中断,处理字车和出针
;     
;------------------------------------------------------------------------------- 
timer20_int:
                                            
        call	mos_on                                      
        call	mos_off                                     
        sel	rb3                          ;选择3等级通用寄存器                      
        cmp	cm_init_flag,#MOTOR_INIT                       
        be	$cm_int_00                            		;字车电机定位初始化
        br	$!cm_int_20                           		;字车电机走动
cm_int_00:                                            	      
        cmp	cm_rush_flag,#MOTOR_RUSH_STATE                       
        bne	$cm_rush_00                             
        call	cm_driver_current         ;处于rush状态
	call	cm_hold_current           ;调用电流保护
	call	cm_driver_current   	                    
        addw	cr20W,#2ecch		              		;//rush时间为6ms    
        cmp	cm_speed_state,#MOTOR_SPEED_STOP    ;                 
        bne	$cm_rush_22                             
        mov	cm_rush_flag,#MOTOR_HOLD_STATE                       
        br	$!cm_int_end                          		;rush完后停止
cm_rush_22:                                                 
        mov	cm_rush_flag,#MOTOR_DRIVE_STATE                       
        br	$!cm_int_end                         		;rush完后驱动
cm_rush_00:                                                 
        cmp	cm_rush_flag,#MOTOR_DRIVE_STATE                       
        be	$cm_rush_01                             
        call    cm_hold_current				    
        cmp	feeding_flag,#MOTOR_WORK                       
        be	$cm_reserve_tm2_1                       
        clr1    ce2                                         
cm_reserve_tm2_1:                                           
        set1    cmk20                                 ;关中断      
        mov	cm_init_flag,#MOTOR_IDLE                       
        br	$!cm_int_end                          		
cm_rush_01:                                                 
        cmp	cm_speed_state,#MOTOR_SPEED_LOW                    
        bne	$cm_speed_normal                        
        addw	cr20w,#2638h		;慢匀速移动 4.9ms		    
        decw	cm_step_num             ;字车移动步数减1                    
        cmpw	cm_step_num,#00h                            
        bne	$cm_rush_32                             
        mov	cm_rush_flag,#MOTOR_RUSH_STATE                       
        mov	cm_speed_state,#MOTOR_SPEED_STOP             	;慢速
cm_rush_32:                                                 
        br	$!cm_ph_exchange                        
cm_speed_normal:                                            
        cmp	cm_speed_state,#MOTOR_SPEED_CONST                     
        bne	$cm_speed_normal_11                     
        br	$!cm_constant_move                     		;匀速
                                                            
cm_speed_normal_11:                                         
        cmp	cm_speed_state,#MOTOR_SPEED_ACC                     
        bne	$cm_decelerate_00                       
        br	$!cm_accelerate_tbl                    		;加速
cm_decelerate_00:                                           
        br	$!cm_decelerate_tbl                    		;减速
CM_ACCELERATE_TIMER_TBL:	dw	2638h,1268h,0EBDh,0CCAh
                        	dw	0B9Fh,0AC3h,0A23h,09ACh
                        	dw	0948h,08e4h,0830h,0830h                                            	
cm_accelerate_tbl:      ;cm accelerate加速start (可以简化)     
        push	vvp     ;vvp用于24位   ???WHL用于保存什么                                 
        push	ax      ;AX、HL、BC用于16位                                    
        push	hl                                          
        push	bc                                          
        movg	vvp,#CM_ACCELERATE_TIMER_TBL                
        movw	ax,#10                                      
        movw	bc,#00h                                     
        cmp     db_10Step12SwitchFlag,#DB_10STEP                  
        bne     $cm_12stepAccelerate                        
        mov	c,cm_step_counter                      
        subw	ax,bc                                       
        shlw	ax,1        ;????????????                                
        movw	hl,ax                                       
        movw	ax,[vvp+hl]                                 
        addw	cr20w,ax                                    
        dec	cm_step_counter                        
        cmp	cm_step_counter,#00h                   

⌨️ 快捷键说明

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