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

📄 lptprinterinterfaceto8951.asm

📁 Printer interface with 89c51 controller (LPT Port connector)
💻 ASM
📖 第 1 页 / 共 2 页
字号:
       cpu "8051.tbl"
        hof "int8"
;IEC:      EQU       A8H	      
PSW:      equ       0D0h      ;program status word.
IE:       EQU       0A8H      ;INTERRUPT ENABLE.
SBUF:     EQU       99H       ;SEND BUFFER.
SCON:     EQU       98H       ;SERIAL CONTROL.
TH1:      EQU       8DH       ;TIMER 1 HIGH.
TH0:      EQU       8CH       ;TIMER 0 HIGH.
TL1:      EQU       8BH       ;TIMER 1 LOW.
TL0:      EQU       8AH       ;TIMER 0 LOW.
TMOD:     EQU       89H       ;TIMER MODE.
TCON:     EQU       88H       ;TIMER CONTROL.
PCON:     EQU       87H       ;POWER CONTROL REGISTER.
DPH:      EQU       83H       ;DATA POINTER HIGH.
DPL:      EQU       82H       ;DATA POINTER LOW.
SP:       EQU       81H       ;STACK POINTER.
P0:       EQU       80H       ;PORT 0.
P1:       EQU       90H       ;PORT 1.
P2:       EQU       0A0H      ;PORT 2.
P3:       EQU       0B0H      ;port 3.
p4:       EQU       0E8H      ;port 4	
p6:       equ       0F8h      ;port6.
Acc:      equ       0E0h      ;Acc.
;
;MCS-51 INTERNAL BIT ADDRESSES
;
CY:       EQU       0D7H      ;CARRY FLAG
AC:       EQU       0D6H      ;AUXILIARY-CARRY FLAG
F0:       EQU       0D5H      ;USER FLAG 0
RS1:      EQU       0D4H      ;REGISTER SELECT MSB
RS0:      EQU       0D3H      ;REGISTER SELECT LSB
OV:       EQU       0D2H      ;OVERFLOW FLAG
P:        EQU       0D0H      ;PARITY FLAG
PS:       EQU       0BCH      ;PRIORITY SERIAL PORT
PT1:      EQU       0BBH      ;PRIORITY TIMER 1
PX1:      EQU       0BAH      ;PRIORITY EXTERNAL 1
PT0:      EQU       0B9H      ;PRIORITY TIMER 0
PX0:      EQU       0B8H      ;PRIORITY EXTERNAL 0
EA:       EQU       0AFH      ;ENABLE ALL INTERRUPT
ES:       EQU       0ACH      ;ENABLE SERIAL INTERRUPT
ET1:      EQU       0ABH      ;ENABLE TIMER 1 INTERRUPT
EX1:      EQU       0AAH      ;ENABLE EXTERNAL 1 INTERR
ET0:      EQU       0A9H      ;ENABLE TIMER 0 INTERRUPT
EX0:      EQU       0A8H      ;ENABLE EXTERNAL 0 INTERR
SM0:      EQU       09FH      ;SERIAL MODE 0
SM1:      EQU       09EH      ;SERIAL MODE 1
SM2:      EQU       09DH      ;SERIAL MODE 2
REN:      EQU       09CH      ;SERIAL RECEPTION ENABLE
TB8:      EQU       09BH      ;TRANSMITT BIT 8
RB8:      EQU       09AH      ;RECEIVE BIT 8
TI:       EQU       099H      ;TRANSMIT INTERRUPT FLAG
RI:       EQU       098H      ;RECEIVE INTERRUPT FLAG
TF1:      EQU       08FH      ;TIMER 1 OVERFLOW FLAG
TR1:      EQU       08EH      ;TIMER 1 RUN CONTROL BIT
TF0:      EQU       08DH      ;TIMER 0 OVERFLOW FLAG
TR0:      EQU       08CH      ;TIMER 0 RUN CONTROL BIT
IE1:      EQU       08BH      ;EXT INTERR. 1 EDGE FLAG
IT1:      EQU       08AH      ;EXT INTERR. 1 TYPE FLAG
IE0:      EQU       089H      ;EXT INTERR. 0 EDGE FLAG
IT0:      EQU       088H      ;EXT INTERR. 0 TYPE FLAG
BDE:      EQU       0dfH
 
 org   0030h
    SLETTER:	DFS 1	
    DATE1:	dfs 1		;1
    DATE2:	dfs 1		;2
    DOT1:   	dfs 1		;3
    DATE3:   	dfs 1		;4
    DATE4:   	dfs 1		;5
    DOT2:   	dfs 1		;6 
    DATE5:	dfs 1		;7
    DATE6:	dfs 1		;8
    
    TIME1:	dfs 1		;9
    TIME2:	dfs 1		;10 
    DOT3:	dfs 1		;11
    TIME3:	dfs 1		;12
    TIME4:  	dfs 1		;13
    DOT4:  	dfs 1		;14
    TIME5:	dfs 1		;15
    TIME6:  	dfs 1		;16
    
    L1A:  	dfs 1		;18
    L1B:  	dfs 1		;19
    L1C:  	dfs 1		;20
    L1D:  	dfs 1		;21
    L1E:  	dfs 1		;22
    
    L2A:  	dfs 1		;
    L2B:  	dfs 1		;
    L2C:  	dfs 1		;
    L2D:  	dfs 1		;
    L2E:  	dfs 1		;
    
    L3A:  	dfs 1		;36
    L3B:  	dfs 1		;37
    L3C:  	dfs 1		;38
    L3D:  	dfs 1		;39
    L3E:  	dfs 1		;40
    
    L4A:  	dfs 1		;36
    L4B:  	dfs 1		;37
    L4C:  	dfs 1		;38
    L4D:  	dfs 1		;39
    L4E:  	dfs 1		;40
                  
    SERIAL1:	dfs 1		;104
    SERIAL2:	dfs 1		;105
    SERIAL3:    dfs 1		;107
    gap:	dfs 1
    SERIAL4:    dfs 1		;110
    SERIAL5:    dfs 1		;111
    SERIAL6:    dfs 1		;113
     
    AVERAGE1:   DFS 1 
    AVERAGE2:   DFS 1
    AVERAGE3:	DFS 1
    AVERAGE4:	DFS 1	
    AVERAGE5: 	DFS 1
    
    RESULT1:	DFS 1
    RESULT2:	DFS 1
    RESULT3:	DFS 1
    RESULT4:	DFS 1
    
    ORLSER:	DFS 1
    SLNO1:	DFS 1
    SLNO2:	DFS 1
 ORG 0800H
  	MSG1: DFB "            GLAMOUR INDUSTRIES LTD",0DH,0AH,0AH,0FFH
  	MSG2: DFB "                                       GLAMOURPOONDI-201",0DH,0AH,0AH,0FFH
  	MSG3: DFB "                                                                DATE : ",0FFH
  	MSG4: DFB "                                                                TIME : ",0FFH
  	MSG5: DFB "                            Push In Load Test Report For WPA :",0FFH
  	MSG6: DFB "                      SL.NO     PUSH IN LOAD    REMARKS",0DH,0AH,0AH,0FFH

 org 0000h
        LJMP start
 org 0200h
start:  MOV sp,#20h
	LCALL init
	
	MOV A,#00H
	MOV SLNO1,A
	MOV A,#00H
	MOV SLNO2,A
	
	MOV     R0,#30H		;STARTING STORAGE.
ZEROO:	MOV     @R0,#00H        ;\
	INC	R0		; |-WRITE ZERO IN MEMORY.
	CJNE    R0,#7FH,ZEROO	;/
	
RE:	MOV     R0,#30H		;BRING INTO STARTING STORAGE ADDRESS.
	jnb 	ri,$	    	;wait until ri is set
        clr 	ri             	;clear interrupt
        MOV 	a,SBUF       	;get character
        mov	@R0,a
	CJNE    a,#53h,re	;CHECK "S"
	INC R0
rere:	LCALL   inchar
	CJNE    R0,#65h,rere    ;NOT EQUAL MEANS GOTO LOOP.(ADD NO.OF DATA WITH STARTING ADDRESS OF MEMORY).
		
	LCALL ADDSL		;\ 
	LCALL SERCHE		; |--serial no. adding.
	MOV A,ORLSER		;/
        CJNE A,#01H,SECONDP	;check for is it starting serial no.
	LCALL   PRINTER
	MOV     R0,#30H		;BRING INTO STARTING STORAGE ADDRESS.
	ljmp 	RE
	
SECONDP:LCALL   second
	LJMP	RE
;----------------------------------------------------------------------
init:	mov scon,#52h       ; 8 bit UART mode
        mov tmod,#20h       ; use timer 1 as baud rate clk
        mov th1,#-13        ; 2400 Baud with 12MHz xtal
        setb tr1            ; start timer	
        ret     
;----------------------------------------------------------------------
inchar: jnb ri,$	    ; wait until ri is set
        clr ri              ; clear interrupt
        MOV @R0,SBUF        ; get character
	INC R0	
return: ret
;---------------------------------------------------------------------- 		
SERCHE:	MOV A,SLNO2
	SWAP A
	ORL A,SLNO1
	MOV ORLSER,A
	RET
;----------------------------------------------------------------------
ADDSL:	CLR  C
	MOV  A,SLNO1
	ADDC A,#01H
	DA   A
	MOV  SLNO1,A
	MOV  A,SLNO2
	ADDC A,#00H
	DA   A
	MOV  SLNO2,A
	RET	
;---------------------------------------------------------------------- 	
PRINTER:NOP
	NOP
	setb  P2+6
	ACALL strobe		
  	ACALL NEXTLINEINIT  	  	
        ACALL DELAYP		;NOP-14 FOR DELAY.
	MOV   A,#0Eh		;"SHIFTOUT"
  	MOV   P0,A
   	NOP
  	ACALL STROBE
	MOV   A,#1Bh		;\"ESCAPE" 
  	MOV   P0,A		; |		
  	ACALL STROBE		; |
	MOV   A,#47h		; |"CHARACTER SIZING" from 0-72
  	MOV   P0,A		; |
  	ACALL STROBE		;/
	MOV   A,#1Bh		;\"ESCAPE"
  	MOV   P0,A		; |
  	ACALL STROBE		; |
	MOV   A,#2Dh		; |"CHARACTER SIZING" from 0-72
  	MOV   P0,A		; |
  	ACALL STROBE		;/
	ACALL DELAYP		;57-NOP DELAY REQUIRED.
	ACALL STROBE
	ACALL DELAYP

	MOV   R5,#00h
	MOV   DPTR,#MSG1	;SEND BLANK LINE & "GLAMOUR INDUSTRIES LTD" HEADING.
PSEND: 	MOV   A,R5
	MOVC  A,@A+DPTR	
	CJNE  A,#0FFh,KKK1	
	ACALL DELAYP
	ACALL NEXTLINEINIT
	LJMP  XXXX1	
KKK1:	MOV   P0,A
	ACALL STROBE
	INC   R5
	LJMP  PSEND 
	
XXXX1:	MOV   R5,#00h
	MOV   DPTR,#MSG2	;SEND "CHENNAI-58" HEADING.
PSEND1: MOV   A,R5
	MOVC  A,@A+DPTR
	CJNE  A,#0FFh,KKK2	
	ACALL DELAYP		
	ACALL NEXTLINEINIT
	LJMP  XXXX2
KKK2:	MOV   P0,A
	ACALL STROBE
	INC   R5
	LJMP  PSEND1
	
XXXX2:	MOV   R5,#00h
	MOV   DPTR,#MSG3	;SEND "DATE:" HEADING.
PSEND2: MOV   A,R5
	MOVC  A,@A+DPTR
	CJNE  A,#0FFh,KKK3	
				;ACALL DELAYP		
				;ACALL NEXTLINEINIT
	LJMP  XXXX3
KKK3:	MOV   P0,A
	ACALL STROBE
	INC   R5
	LJMP  PSEND2

XXXX3:	MOV   P0,DATE1		;SEND DATE DATA.	
	ACALL STROBE
	MOV   P0,DATE2		;SEND DATE DATA.	
	ACALL STROBE
	MOV   P0,DOT1		;SEND DOT DATA.	
	ACALL STROBE
	MOV   P0,DATE3		;SEND DATE DATA.	
	ACALL STROBE
	MOV   P0,DATE4		;SEND DATE DATA.	
	ACALL STROBE
	MOV   P0,DOT2		;SEND DOT DATA.	
	ACALL STROBE
	MOV   P0,DATE5		;SEND DATE DATA.	
	ACALL STROBE
	MOV   P0,DATE6		;SEND DATE DATA.	
	ACALL STROBE
	MOV   A,#20H
	MOV   P0,A		;SEND SPACE DATA.	
	ACALL STROBE
	MOV   A,#0DH
	MOV   P0,A		;SEND SPACE DATA.	
	ACALL STROBE
	MOV   A,#0AH
	MOV   P0,A		;SEND SPACE DATA.	
	ACALL STROBE	

	MOV   R5,#00h
	MOV   DPTR,#MSG4	;SEND "TIME:" HEADING.
PSEND3: MOV   A,R5
	MOVC  A,@A+DPTR
	CJNE  A,#0FFh,KKK4	
				;ACALL DELAYP		
				;ACALL NEXTLINEINIT
	LJMP  XXXX4
KKK4:	MOV   P0,A
	ACALL STROBE
	INC   R5
	LJMP  PSEND3

XXXX4:	MOV   P0,TIME1		;SEND TIME DATA.	
	ACALL STROBE
	MOV   P0,TIME2		;SEND TIME DATA.	
	ACALL STROBE
	MOV   P0,DOT3		;SEND DOT DATA.	
	ACALL STROBE
	MOV   P0,TIME3		;SEND TIME DATA.	
	ACALL STROBE
	MOV   P0,TIME4		;SEND TIME DATA.	
	ACALL STROBE
	MOV   P0,DOT4		;SEND DOT DATA.	
	ACALL STROBE
	MOV   P0,TIME5		;SEND TIME DATA.	
	ACALL STROBE
	MOV   P0,TIME6		;SEND TIME DATA.	
	ACALL STROBE
	MOV   A,#20H
	MOV   P0,A		;SEND SPACE DATA.	
	ACALL STROBE
	MOV   A,#0DH
	MOV   P0,A		;SEND SPACE DATA.	
	ACALL STROBE
	MOV   A,#0AH
	MOV   P0,A		;SEND SPACE DATA.	
	ACALL STROBE		
	MOV   R5,#00h
	MOV   DPTR,#MSG5	;SEND "Push In Load Test Report For WPA :" HEADING.
PSEND4: MOV   A,R5
	MOVC  A,@A+DPTR
	CJNE  A,#0FFh,KKK5	
				;ACALL DELAYP		
				;ACALL NEXTLINEINIT
	LJMP  XXXX5
KKK5:	MOV   P0,A
	ACALL STROBE
	INC   R5
	LJMP  PSEND4
	

⌨️ 快捷键说明

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