📄 tic4.asm
字号:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BEGIN42: CLR ICSCL
LCALL DELAY_20
SETB ICSDA
NOP
NOP
NOP
SETB ICSCL
NOP
NOP
NOP
CLR ICSDA
NOP
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END_42: CLR ICSCL
NOP
NOP
CLR ICSDA
NOP
NOP
NOP
SETB ICSCL
NOP
NOP
NOP
SETB ICSDA
NOP
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BRD_42:
MOV R4,#08H
BRD_421:
CLR ICSCL
LCALL DELAY_20
SETB ICSDA
LCALL DELAY_20
SETB ICSCL
MOV C,ICSDA
RRC A
LCALL DELAY_20
DJNZ R4,BRD_421
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BWR_42:
MOV R4,#00H
BWR_421:
setb ICSCL
LCALL DELAY_20
clr ICSCL
LCALL DELAY_20
DJNZ R4,BWR_421
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTERR42:
CLR ICSCL
NOP
NOP
CLR ICRST
NOP
NOP
CLR ICSDA
LCALL DELAY_20
SETB ICRST
LCALL DELAY_20
SETB ICSDA
LCALL DELAY_20
CLR ICRST
LCALL DELAY_20
RET
;===========24C01控制===================
;WRITE A BYTE TEMP0----POS TEMP2----DATA
WRITE24C01:
LCALL bstart
MOV DATAW , #0a0h
LCALL wbyte
MOV DATAW ,TEMP0 ;addr
LCALL wbyte
MOV DATAW ,TEMP2
LCALL wbyte ;data
LCALL bstop
LCALL DELAY10
RET
;--------------write a byte from DATAW
wbyte:
mov a,#8h
mov R3,a
wb0_1:
clr TEMP1.0
jnb DATAW.7, OO24 ;if DATAW.7==0 jmp
setb TEMP1.0
OO24:
LCALL bitout
mov a,DATAW
rl a
mov DATAW, a
djnz R3, wb0_1
LCALL bitin
ret
;--------------AT24CXX WRITE A BIT
bitout:
clr SCL24
nop
jnb TEMP1.0,bit0_0 ;if tyempbit=0 jmp 00 ??
setb SDA24
nop
sjmp bit0_1
bit0_0:
clr SDA24
nop
nop
bit0_1:
setb SCL24
nop
NOP
nop
nop
clr SCL24
nop
nop
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;TEMP0----POS TEMP2----DATA
READ24C01:
LCALL bstart
mov DATAW,#0a0h
LCALL wbyte
mov DATAW,TEMP0
LCALL wbyte
LCALL bstart
mov DATAW,#0a1h
LCALL wbyte
LCALL rbyte
mov TEMP2,DATAR
LCALL bstop
ret
;--------------read a byte FROM 24C01
RBYTE:
mov R3,#08H
mov datar,#00H
RB0_1:
LCALL bitin
jnb TEMP1.0,mm24
setb DATAR.0
MM24:
mov a,DATAR
rl a
mov DATAR,a
nop
djnz R3,rb0_1
rr a
mov DATAR,a
ret
;------------AT24CXX READ A BIT
bitin:
clr SCL24
nop
nop
nop
clr TEMP1.0
setb SCL24
nop
nop
SETB SDA24
NOP
nop
nop
JNB SDA24 , CC24
setb TEMP1.0
CC24:
nop
nop
NOP
clr SCL24
nop
ret
;--------------- AT24CXX START SUB
bstart:
SETB SCL24
NOP
NOP
setb SDA24
nop
nop
nop
nop
nop
nop
clr SDA24
nop
nop
nop
nop
nop
NOP
clr SCL24
ret
;---------------AT24CXX STOP SUB
bstop:
clr SDA24
nop
nop
NOP
nop
nop
setb SCL24
nop
nop
nop
nop
nop
nop
nop
setb SDA24
nop
nop
ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DELAY: MOV R7,#80 ;80*250*2=40ms
MOV R6,#0F0H
DELAY2: DJNZ R6,DELAY2
MOV R6,#0F0H
DJNZ R7,DELAY2
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;USE IN SEND
delay_PC:
MOV R6,#0F0H
DELAYPC1:
MOV R7,#0F0H
DELAYPC2:
DJNZ R7,DELAYPC2
DJNZ R6,DELAYPC1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_10:MOV R7,#00H ;500us
DELAY1: DJNZ R7,DELAY1
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;IC CARD USE
DELAY_20:
MOV R3,#09h
DELAY_201:
DJNZ R3,DELAY_201
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;USE IN WRITE 24C01
DELAY10: ;5mS
MOV R7,#10
MOV R6,#0F0h
DELAY3: DJNZ R6,DELAY3
MOV R6,#0F0H
DJNZ R7,DELAY3
RET
;=========是否传送超时==========
OVERTIME:
CLR RFLAG.2
INC OVTIM
MOV A,OVTIM
CJNE A,#05H,OVERTIMEOUT
SETB RFLAG.2
OVERTIMEOUT: RET
;====工作的灯光显示========
NORMALLIGHT:
SETB P2.1
SETB P2.2
RET
;======插卡处理的灯光显示======
GREENLIGHT:
CLR P2.1
SETB P2.2
RET
;=======错卡处理的灯光显示====
REDLIGHT:
SETB P2.1
CLR P2.2
RET
;==========
NOLIGHT:
CLR P2.1
CLR P2.2
RET
;==== 设置定时器0工作方式(10ms)=======
INIT0:
CLR TR0
CLR ET0
MOV TMOD,#21H ;
MOV TL0, #0ffh ;12 MHz #0f0H
MOV TH0, #0dbh ;12 MHz #0d8H
SETB TR0
SETB EA
SETB ET0
RET
;=====串口初始化=================
INITCOMM:
CLR EA
CLR TR1
MOV TMOD,#21H
MOV TH1,#0F3H;(fDh ;(9600) f3h(2400 f4) E6H( 1200bod e8)
MOV TL1,#0F3H;(fdh ;9600 0f3h 0E6H
MOV SCON,#50H
SETB TR1
SETB EA
SETB ES
RET
;========看门狗==============
SEDOG:
SETB P2.0
NOP
NOP
NOP
CLR P2.0
RET
;=========开机===============
RESTORE:
SETB P2.3
NOP
NOP
RET
;==========关机==============
CLOSESTORE:
CLR P2.3
NOP
NOP
RET
;======置IC卡端口状态===================
INITIC: CLR ICRST
NOP
NOP
CLR ICSCL
NOP
NOP
SETB ICINT ;置IC卡插卡状态为输入方式
RET
;======选择寄存器组================
CHOSERES:
CLR PSW.3
CLR PSW.4
RET
;=======初始化变量(清理寄存器)=====
INICLR: MOV R0,#20H
INICLR1: MOV @R0,#00H
INC R0
CJNE R0,#66H,INICLR1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -