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

📄 epp.asm

📁 SL811HS的参考源代码
💻 ASM
字号:
;--------------------------------------------------------------------------
;  epp.asm :  epp interface
;  Copyright:  (c)1998 ScanLogic Corporation
;  Revision:   May/28/98        SNguyen       Created
;              Oct/23/00        revised
;--------------------------------------------------------------------------

;--------------------------------------------------------------------------
; DELAY TIME 500US base on 24MHz Clock instruction
;--------------------------------------------------------------------------
DELAY_500US:
   PUSH	0                    
   MOV  0,#0H
d500lp:
   nop
   DJNZ	0,d500lp
   POP	0
   RET

;--------------------------------------------------------------------------
; DELAY TIME 1MS
;--------------------------------------------------------------------------
DELAY_100MS:
   push  0
   MOV	 0,#200
d100:
   CALL	 DELAY_500US
   DJNZ	 0,d100
   pop   0
   RET

;--------------------------------------------------------------------------
; INIT SCANNER FROM SPP MODE TO EPP MODE
;--------------------------------------------------------------------------
INIT_SCANNER:
   SetInput
   SETB INIT                   ;negate all the control of EPP signal
   SETB WAIT
   SETB	ADRSB
   SETB	DATSB
   SETB	WRITE

   CLR	INIT                   ;reset the Scanner ASIC
   CALL DELAY_100MS
   SETB INIT

   CALL INIT_SPP_TO_EPP        ;Setup from pass through to EPP

SET_EPP:
   MOV  P1,#SMODE_R
   CALL EPPAddrWr

   MOV  P1,#10010100B	       ;Scanner mode register setup for EPP
   CALL EPPDataWr              ;Write Scanner Mode Register
   CALL SET_GOUT               ;Turn the power scanner ON
   CALL INIT_9811              ;Init 9811 chip
   MOV  P1,#INTIME_R           ;Setup LED Timer:  0CH
   CALL	EPPAddrWr
   MOV	P1,#02H                ;Default: Duration of the timer
   CALL	EPPDataWr

;--------------------------------------------------------------------------
; EPP MODE WRITE ADDRESS
;--------------------------------------------------------------------------
SET_MOTOR_STATUS:
   MOV  P1,#MCTRL_17_R         ;Motor Controller at 17H
   CALL EPPAddrWr
   MOV  P1,#00000111B          ;Turn on the motor
   CALL EPPDataWr
   RET

;--------------------------------------------------------------------------
;  EPPDelay:
;--------------------------------------------------------------------------
EPPDelay:
   JB   WAIT,DelayR1
   JB   WAIT,DelayR1
   JB   WAIT,DelayR1
DelayR1:
   ret

;--------------------------------------------------------------------------
;  EPP MODE WRITE ADDRESS
;--------------------------------------------------------------------------
EPPAddrWr:
   CLR	WRITE
   CLR	ADRSB
   acall EPPDelay
   SETB ADRSB
   SETB WRITE
   SetInput
   RET

;--------------------------------------------------------------------------
;  EPP WRITE DATA
;--------------------------------------------------------------------------
EPPDataWr:
   CLR  WRITE
   CLR	DATSB
   acall EPPDelay
   SETB	DATSB
   SETB	WRITE
   SetInput
   RET

;--------------------------------------------------------------------------
;  EPP READ DATA
;--------------------------------------------------------------------------
EPPDataRd:
   CLR	DATSB
   acall EPPDelay
   MOV	A,P1          ;store to A and 
   SETB	DATSB
   RET

;--------------------------------------------------------------------------
;  INIT SCANNER SPP MOED TO EPP MODE (for scanner ASIC)
;--------------------------------------------------------------------------
INIT_SPP_TO_EPP:
   CALL DELAY_100MS
   CLR	P1.0		;1
   SETB	P1.0		;2
   CLR	P1.0
   SETB	P1.0		;3
   CLR	P1.0
   SETB	P1.0		;4
   CLR	P1.0
   SETB	P1.0		;5
   CLR	P1.0
   CLR	P1.1
   CLR	P1.2
   SETB	P1.0		;6
   CLR	P1.0
   SETB	P1.0		;7
   CLR	P1.0
   SETB	P1.1
   SETB	P1.2
   SETB	P1.0		;8
   CLR	P1.0
   SETB	P1.0		;9
   CLR	P1.0
   SETB	P1.0		;10
   CLR	P1.0
   SETB	P1.0		;11
   CLR	P1.0
   SETB	P1.0		;12
   CLR	P1.0
   SETB	P1.0		;13
   CLR	P1.0
   CLR	P1.1
   CLR	P1.2
   SETB	P1.0		;14
   CLR	P1.0
   SETB	P1.0		;15
   CLR	P1.0
   SETB	P1.1
   SETB	P1.2
   SETB	P1.0		;16
   CLR	P1.0
   SETB	P1.0
   RET

;--------------------------------------------------------------------------
;  INIT A/D LM-9811
;--------------------------------------------------------------------------
INIT_9811:
   MOV	R0,#06
   MOV  R1,#CON_R                 ;01H
   MOV	DPTR,#LM9811_TABLE_C

INIT_9811_LOOP:
   MOV	P1,R1
   CALL	EPPAddrWr
   CLR	A
   MOVC	A,@A+DATR
   MOV	P1,A
   CALL	EPPDataWr

INIT_WAIT:
   MOV  P1,#STATUS_R              ;0AH
   CALL	EPPAddrWr
   CALL	EPPDataRd
   JB	A.7,INIT_WAIT

   INC	DPTR
   DJNZ	R0,INIT_9811_LOOP
   INC	R1
   MOV	R0,#06
INIT_9811_LOOP_1:
   MOV	P1,R1
   CALL	EPPAddrWr
   CLR	A
   MOVC	A,@A+DPTR
   MOV	P1,A
   CALL	EPPDataWr
   INC	R1
   INC	DPTR
   DJNZ	R0,INIT_9811_LOOP_1
   RET

;--------------------------------------------------------------------------
; TURN ON POWER LED
;--------------------------------------------------------------------------
SET_GOUT:
   MOV  P1,#GOUT_R                ;0B
   CALL	EPPAddrWr
   MOV	P1,#00000010B
   CALL	EPPDataWr
   CALL DELAY_100MS               ;WHEN POWER ON ,MUST DELAY 100MS
   RET


;--------------------------------------------------------------------------
; FIFO to SL11/SL811S Memory start at
;   A  = SL11/SL811S Address
;   R0 = Number of byte
;--------------------------------------------------------------------------
FIFO2SL11:
    MOV     P1,A
    acall   SL11Addr      ;Setup SL11Addr
rdLoop:
    CLR     DATSB         ;assert the strobe to read data from EPP
    CLR     NCS		  ;SL11/SL811S CS low
    CLR     NWRITE        ;latch the data EPP
    SETB    NWRITE        ;negate data
    SETB    NCS           ;negate CS
    SETB    DATSB         ;EPP negate
    DJNZ    R0,rdLoop     ;write number of byte from R0
    ret

;--------------------------------------------------------------------------
; SL11/SL811S Memory to FIFO
;   A  = SL11/SL811S Address
;   R0 = Number of byte
; OPTIMIZE for the SPEED from SL11/SL811S to EPP FIFO
;--------------------------------------------------------------------------
SL112FIFO:
    MOV     P1,A
    acall   SL11Addr       ;Setup SL11Addr
CpyLoop:
    clr     NCS
    clr     NREAD
    clr     WRITE
    CLR	    DATSB
    acall   EPPDelay
    SETB    DATSB
    SETB    WRITE
    setb    NREAD
    setb    NCS
    djnz    R0,CpyLoop    
    ret

;************************************************************************
;************************************************************************
CheckNflag:
    mov     r1,#0
fl1:
    mov     P1,#STATUS_R
    acall   EPPAddrWr
    acall   EPPDataRd
    jnb     acc.7,Fl_exit
    djnz    r1,fl1
Fl_exit:
    ret

;************************************************************************
;************************************************************************
MovStepper:
    jnb     cmd1,Ck_exit
    acall   CheckNflag
    mov     a,wValue1              ;get motor stepper command
    orl     a,#40h                 ;move forward
    mov     P1,#MCTRL_R            ;stepper register
    acall   EPPAddrWr
    mov     P1,A
    acall   EPPDataWr
Ck_exit:
    ret



⌨️ 快捷键说明

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