📄 epp.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 + -