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

📄 processor.asm

📁 Source code for micro printer driver
💻 ASM
字号:
;************FRAM INIT&READ&WRITE OPERATION*************************
S_INIT_FRAM:
	BCLR	FRAM_WP,PTB
	BRN	S_INIT_FRAM
	BCLR	FRAM_SDA,PTB	
	BRN	S_INIT_FRAM
	BCLR	FRAM_CLK,PTB
	RTS
	
S_STOP_FRAM:
	BRN	S_STOP_FRAM
	BSET	FRAM_CLK,PTB
	BRN	S_STOP_FRAM
	BSET	FRAM_SDA,PTB	
	RTS
TABLE_BIT:
	DB	$00,$01,$02,$04,$08,$10,$20,$40,$80
	
;+++++++++++++++++++++++++++++++++READ A BYTE TO FRAM++++++++++++++++++
		
S_RD_CHAR_FRAM:
	JSR	S_INIT_FRAM
	LDA	RD_INDEX
	LSLA
	ORA	#$A1
	JSR	S_WR_CHAR_FRAM
	
	PSHH
	BCLR	FRAM_SDA,DDRB
	LDX	#$08
	CLR	READ_BYTE
L_START_RD_FRAM:
	BSET	FRAM_CLK,PTB
	BRN	L_START_RD_FRAM
	BRSET	FRAM_SDA,PTB,L_GET_BIT1
	JMP	L_GET_NEXT_BIT
L_GET_BIT1:
	CLRH
	LDA	TABLE_BIT,X
	ORA	READ_BYTE
	STA	READ_BYTE	
L_GET_NEXT_BIT:
	BCLR	FRAM_CLK,PTB
	BRN	L_START_RD_FRAM
	DBNZX	L_START_RD_FRAM
	
	BSET	FRAM_CLK,PTB
	BRN	L_START_RD_FRAM			;SEND ACK SIGNAL
	BRN	L_START_RD_FRAM
	BSET	FRAM_SDA,DDRB
	BRN	L_START_RD_FRAM	
	BCLR	FRAM_SDA,PTB

	JSR	S_STOP_FRAM
	
	PULH	
	RTS

;+++++++++++++++++++++++++++++++++WRITE A BYTE TO FRAM++++++++++++++++++

S_WR_CHAR_FRAM:
;	STA	WR_TEMP
;	JMP	L_SHIFT_A
;L_START_TRANS:
;	LDA	WR_TEMP
;L_SHIFT_A:
	LDX	#$08
L_IIC_SND:
	BCLR	FRAM_CLK,PTB
	LSLA
	BCC	L_SND_ZERO
	BSET	FRAM_SDA,PTB
	JMP	L_SET_IIC_CLK
L_SND_ZERO:
	BCLR	FRAM_SDA,PTB
	BRN	L_SET_IIC_CLK
L_SET_IIC_CLK:
	BSET	FRAM_CLK,PTB
	BRN	L_SET_IIC_CLK
	DBNZX	L_IIC_SND
	BCLR	FRAM_CLK,PTB
	BCLR	FRAM_SDA,DDRB
	BRN	L_SET_IIC_CLK
	BSET	FRAM_CLK,PTB
	LDA	#$02
L_LOOP_ACK:
	BRCLR	FRAM_SDA,PTB,L_STOP_WR
	DBNZA	L_LOOP_ACK
L_STOP_WR:
	BSET	FRAM_SDA,DDRB
	BCLR	FRAM_CLK,PTB
	RTS
;*******************************************************************


;**************************FRAM OPERATION*********

S_RDFRAM_PROCESS:
	JSR	S_INIT_FRAM
	LDA	RD_INDEX
	LSLA
	ORA	#$A0
	JSR	S_WR_CHAR_FRAM
	LDA	RD_INDEX1
	JSR	S_WR_CHAR_FRAM
	JSR	S_STOP_FRAM
	RTS


;+++++++++++++++++++++++++++++++++++Write to FRAM++++++++++++++++++++++++
	
S_WRFRAM_PROCESS:
	BCLR	FRAM_WRF,F_STATUS
	BRSET	FIN_BUFFER,F_STATUS,L_SET_FRAM_RD
	JSR	S_INIT_FRAM
	LDA	WR_INDEX
	LSLA
	ORA	#$A0
	JSR	S_WR_CHAR_FRAM
	LDA	WR_INDEX1
	JSR	S_WR_CHAR_FRAM
	LDA	WRITE_BYTE
	JSR	S_WR_CHAR_FRAM
	LDHX	WR_INDEX
	AIX	#$0001
	STHX	WR_INDEX
	JSR	S_STOP_FRAM
	JMP	L_A_BYTE_OK
L_SET_FRAM_RD:
	BCLR	FIN_BUFFER,F_STATUS
	LDHX	#$0000
	STHX	RD_INDEX
	JSR	S_RDFRAM_PROCESS
	BSET	PRN_START,F_STATUS
L_A_BYTE_OK:	
	RTS
;**************************************************

;**************************PRINTER OPERTION********
S_PRINT_PROCESS:
	PSHH
	BSET	ON_PRINTING,F_STATUS
	JSR	S_CLR_PTB_PTD
	JSR	S_OPEN_PS
	BSET	MOTOR,PTA
	BCLR	PRN_START,F_STATUS
	PULH
	RTS

S_PRINT_ONE_DOT:
;	BSET	TEST_PIN,PTB
	PSHH
;	LDA	DOT_CNT					;041030 for adding a space each line
;	CMP	#$04
;	BLS	L_RESET_IT
	BCLR 	PRINTING,F_STATUS
	LDA	DOT_CNT1
	CMP	#$00
	BNE	L_PRINT_A_DOT				;L_JUDGE_IF_6BIT
	JSR	S_GET_RIGHT_CHAR
L_PRINT_A_DOT:
	JSR	S_PRINT_DOT_OUT
	LDA	DOT_CNT1
	INCA
	STA	DOT_CNT1	
	CMP	#$05
	BLS	L_RESET_IT
	CLR	DOT_CNT1
	JSR	S_RDFRAM_PROCESS
L_RESET_IT:
	PULH
	RTS
	
S_PRINT_DOT_OUT:
	PSHH
	LDA	DOT_CNT1
	CMP	#$04
	BLS	L_CAL_PRN_VAL
	CLR	TEMP_VAL
	JMP	L_GET_TEMP_VAL
L_CAL_PRN_VAL:
	LDA	TEMP_VAL
	STA	IF_CONTINUE				;041030 save last value
	LDHX	TABLE_INDEX
	LDA	ASCII_TABLE,X
	STA	TEMP_VAL	
	AIX	#$0001
	STHX	TABLE_INDEX
L_GET_TEMP_VAL:
	JSR	S_JUDGE_ONES			;041030 for cnt of 1s
	LDA	ONES_CNT
	CMP	#$04
	BLS	L_DO_AS_NORMAL
	LDA	TEMP_VAL
	JSR	S_SET_PTB_PTD
	JMP	L_NO_RESET_PINS
L_DO_AS_NORMAL:
	LDA	#$FF
	SUB	IF_CONTINUE
	AND	TEMP_VAL
	STA	TEMP_FIRST
	JSR	S_SET_PTB_PTD
	JSR	S_0.2T_DELAY
	LDA	IF_CONTINUE
	AND	TEMP_VAL
	ORA	TEMP_FIRST
	JSR	S_SET_PTB_PTD
	JSR	S_0.2T_DELAY
	JSR	S_0.2T_DELAY			;041029 for more delay
	JSR	S_0.2T_DELAY
	JSR	S_0.2T_DELAY
	JSR	S_CLR_PTB_PTD
L_NO_RESET_PINS:
;	BCLR	TEST_PIN,PTB
	PULH
	RTS

S_CLR_PTB_PTD:
	LDA	#$F0
	AND	PORTB
	STA	PORTB
	LDA	#$F8
	AND 	PORTD
	STA	PORTD
	RTS

S_JUDGE_ONES:				;041030 For many 1s 
	LDA	TEMP_VAL
	LDX	#$08
L_LOOP_SHIFT:
	ASLA
	PSHA
	BCC	L_CONTINUE_SHIFT
	LDA	ONES_CNT
	INCA
	STA	ONES_CNT	
L_CONTINUE_SHIFT:
	PULA
	DBNZX	L_LOOP_SHIFT	
	RTS

S_SET_PTB_PTD:
	PSHH
	PSHA
	AND	#$07
	ORA	PORTD
	STA	PORTD
	PULA
	ASRA
	ASRA
	ASRA
	ORA	PORTB
	STA	PORTB
	PULH
	RTS

S_GET_RIGHT_CHAR:
	PSHH
	BRSET	LR_FLAG,PRINT_STATUS,L_SET_AS_SPACE
	BCLR	LR_FLAG,PRINT_STATUS
	LDA	#$8A
	SUB	DOT_CNT
	CMP	#$03
	BLS	L_SET_AS_SPACE
	LDHX	RD_INDEX
	CPHX	WR_INDEX
	BHS	L_FINISH_BUFFER
	JSR	S_RD_CHAR_FRAM			;S_RDFRAM_PROCESS
	LDHX	RD_INDEX
	AIX	#$0001
	STHX	RD_INDEX
	LDA	READ_BYTE
	CMP	#$20
	BHS	L_CAL_TABLE_INDEX
	CMP	#$0D				;MEET CR TO JUDGE IF NEXT IS LF?
	BNE	L_SET_AS_SPACE
;	LDHX	RD_INDEX			;0D+0A ignore next 0A,if only 0D remove these three lines
;	AIX	#$0001				;test 20041111
;	STHX	RD_INDEX
	BSET	LR_FLAG,PRINT_STATUS
L_SET_AS_SPACE:
	LDA	#$20
L_CAL_TABLE_INDEX:
	SUB	#$20
	LDX	#$05
	MUL
	PSHX
	TAX
	PULH
	STHX	TABLE_INDEX
	JMP	L_FIN_GET_CHAR
L_FINISH_BUFFER:
	LDHX	#$0000
	STHX	TABLE_INDEX
	BCLR 	ON_PRINTING,F_STATUS
	JSR	S_STOP_MOTOR
L_FIN_GET_CHAR:	
	PULH
	RTS
	

S_LR_KEY_PROCESS:
	BRSET	ON_PRINTING,F_STATUS,L_CLR_KBF		;L_WAIT_PRINT
	BRSET	PBIT2,PTA,L_CLR_KBF			;FILTER KEY PRESS
	JSR	S_0.2T_DELAY
	BRSET	PBIT2,PTA,L_CLR_KBF
	SEI
;	JSR	S_CLR_PTB_PTD
	JSR	S_OPEN_PS
	BSET	MOTOR,PTA
	BRSET	HSW,PTA,*
	BRCLR	HSW,PTA,*
	BRSET	HSW,PTA,*
	JSR	S_STOP_MOTOR
	CLI
L_CLR_KBF:
	BCLR	LR_KEYF,F_STATUS
L_WAIT_PRINT:
	RTS
	
	
;***************************************************
S_STOP_MOTOR:
;	JSR	S_CLR_PTB_PTD				;TEST 11/09/2004
	BRCLR	HSW,PTA,*
	JSR	S_0.8T_DELAY
	BCLR	MOTOR,PTA
	BCLR	PS_SD,PTA
;	JSR	S_CLR_PTB_PTD
	RTS
;**************************SUBROUTINES CALLED BY PROCESS***************
S_OPEN_PS:
	BRSET	PS_SD,PTA,L_PS_OPENED
	BSET	PS_SD,PTA
	JSR	S_0.8T_DELAY
	JSR	S_0.8T_DELAY
	JSR	S_0.8T_DELAY
	JSR	S_0.8T_DELAY
L_PS_OPENED:	
	RTS

⌨️ 快捷键说明

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