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

📄 tic4.asm

📁 适用51单片机的2401存储器的读写操作
💻 ASM
📖 第 1 页 / 共 4 页
字号:
        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 + -