分享

射频卡读写源代码

 wkwable 2015-03-08

        SEL EQU P3.0
        UI  EQU P3.1
        SCL EQU P3.2
        SDA EQU P3.3
        SCU EQU p3.4
        SDU EQU P3.5


        BUFFAD EQU 40H;存放接收的数据块的首地址,
                      ;请注意,数据块的首地址应为要接受的
                      ;数据块长度.
        ORG 0000H
        AJMP MAIN
        ORG 0040H


MAIN:   MOV SP,#60H
        MOV P1,#0FFH
        MOV 50H,#4
        MOV 51H,#3
        MOV 52H,#2
        MOV 53H,#1
        ACALL DISPLAY
        ACALL DELAY1


        MOV P1,#0FFH
        MOV R1,#50
KK:     ACALL DELAY
        DJNZ R1,KK
                   ;首先确定数据
                   ;的传输方式I2C格式
       SETB SEL
       SETB UI
                ;工作程序开始
                ;开始工作命令
JS:    ACALL START
                ;发送数据头#0ACH
       MOV 30H,#1
       MOV 31H,#0ACH
       MOV R0,#30H
       ACALL SEND
                 ;发送"工作开始"指令
       MOV 30H,#1
       MOV 31H,#80H
       MOV R0,#30H
       ACALL SEND
                发送STOP指令
       ACALL  WAITSTOP
       CJNE A,#3,XK
       CLR P1.0
       AJMP $
       ;ACALL STOP


XK:                   ;发送开始接收命令开始接收
       ACALL START
       MOV 30H,#1
       MOV 31H,#0ADH
       MOV R0,#30H
       ACALL SEND
       ;AJMP LK
       MOV BUFFAD,#1
       ACALL RECE
                 ;发送STOP命令


OKD:   ACALL RECE
       ACALL STOP
       MOV A,40H
       MOV B,#0
       XRL B,A
       MOV A,B
       CJNE A,41H,WRONGB
       AJMP PASB
WRONGB:CLR P1.0
       AJMP $
PASB:
       MOV P1,40H
       MOV A,40H
       MOV B,#100
       DIV AB
       MOV 53H,A
       MOV A,B
       MOV B,#10
       DIV AB
       MOV 52H,A
       MOV 51H,B
       ACALL DISPLAY
       MOV R2,#250
KXD:   ACALL DELAY
       ACALL DELAY
       ACALL DELAY
       DJNZ R2,KXD
       MOV P1,#0FFH
       ACALL DELAY1
                   ;;;;;;;;;;;;;;;;;;!!!!!!!!!!!!!!!!!
JSX:   ACALL START
                ;发送数据头#0ACH
       MOV 30H,#1
       MOV 31H,#0ACH
       MOV R0,#30H
       ACALL SEND
                 ;发送"工作开始"指令
       MOV 30H,#1
       MOV 31H,#30h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#01h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#01h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#06h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#06h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#06h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#06h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#06h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#06h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#06h
       MOV R0,#30H
       ACALL SEND


       MOV 30H,#1
       MOV 31H,#06h
       MOV R0,#30H
       ACALL SEND


 


              XKX:                   ;发送开始接收命令开始接收
       ACALL START
       MOV 30H,#1
       MOV 31H,#0ADH
       MOV R0,#30H
       ACALL SEND
LK:    MOV BUFFAD,#1
       ACALL RECE
       MOV A,40H
       MOV B,#10
       DIV AB
       MOV 51H,A
       MOV 50H,B



                 ;发送STOP命令
       ACALL RECE
       ;ACALL RECE
       ACALL WAITSTOP
       MOV A,40H
       MOV B,#0
       XRL B,A
       MOV A,41H
       CJNE A,42H,WRONB
       AJMP PASBX
WRONB: MOV P1,#0FFH
       CLR P1.0
       ;CLR P1.1
       MOV A,40H
       MOV B,#100
       DIV AB
       ;MOV 53H,A
       MOV B,#100
       DIV AB
       ;MOV 53H,A
       MOV A,B
       MOV B,#10
       DIV AB
       MOV 53H,A
       MOV 52H,B
       MOV A,42H
       MOV B,#100
       DIV AB
       MOV A,B
       MOV B,#10
       DIV AB
       ;MOV 51H,A
       ;MOV 50H,B
       ACALL DISPLAY
       AJMP JSX
PASBX: MOV P1,#0FFH
       CLR P1.1
       ;CLR P1.2
       MOV A,40H
       MOV B,#100
       DIV AB
       ;MOV 53H,A
       MOV A,B
       MOV B,#10
       DIV AB
       MOV 55H,A
       MOV 54H,B
       MOV A,41H
       MOV B,#100
       DIV AB
       ;MOV 53H,A
       MOV A,B
       MOV B,#10
       DIV AB
       MOV 53H,A
       MOV 52H,B
       MOV A,42H
       MOV B,#100
       DIV AB
       ;MOV 53H,A
       MOV A,B
       MOV B,#10
       DIV AB
       ;MOV 51H,A
       ;MOV 50H,B
       ACALL DISPLAY
SSD:   MOV R2,#250
KXDX:  ACALL DELAY
       ACALL DELAY
       ACALL DELAY
       ACALL DELAY
       ACALL DELAY
       ACALL DELAY
       ACALL DELAY
       DJNZ R2,KXDX
       AJMP JSX


 


SEND:           ;MOV R0,#ADDD
                MOV       A,@R0
                INC       R0
                MOV       R2,A
CARDSENDACK0:   MOV       A,@R0;$$$$$$$$$$$$$$$$$$$
                MOV       R1,#8
CARDSENDACK1:   RLC       A
                MOV       SDA,C
                LCALL     DELAY
                SETB      SCL
                LCALL     DELAY
                CLR       SCL
                LCALL     DELAY
                DJNZ      R1,CARDSENDACK1;$$$$$$$$$$发送一个8位的数据
                SETB      SDA            ;%%%%%%%%%%
                ;LCALL     DELAY
                SETB      SCL            ;%%%%%%%%%% 发送ACK信号
                ;LCALL     DELAY
                MOV       C,SDA          ;&&&&&&&&&
                LCALL     DELAY
                CLR       SCL
                LCALL     DELAY
                JC        CARDSENDACK2  ;&&&&&&&&&&检测ACK信号
                INC       R0
                DJNZ      R2,CARDSENDACK0
CARDSENDACK2:   RET
START:
                LCALL    DELAY
                CLR      SCL
                LCALL    DELAY
                SETB     SDA
                LCALL    DELAY
                SETB     SCL
                LCALL    DELAY
                LCALL    DELAY
                CLR      SDA
                LCALL    DELAY
                CLR      SCL
                LCALL    DELAY
                RET
 STOP:          CLR  SCL
  LCALL    DELAY
   CLR      SDA
                LCALL    DELAY
                SETB     SCL
  LCALL  DELAY
                LCALL    DELAY
                SETB     SDA
                LCALL    DELAY
                RET
  WAITSTOP:     CLR  SCL
  LCALL    DELAY
   CLR      SDA
                LCALL    DELAY
                SETB     SCL
                LCALL    DELAY
                LCALL    DELAY
                SETB     SDA
                ;LCALL    DELAY
                ;CLR      SCL
                ;LCALL    DELAY
                ;CLR      SDA
                ;LCALL    DELAY
                ;LCALL    DELAY
                MOV      R7,#50
WAITE5550OP0:
                MOV      R6,#00H
WAITE5550OP1:
                SETB     SDA
                ACALL DELAY
                JB       SDA,WAITE5550OP2
                JNB      SDA,$                         ;ADD TIMEOUT OPTIONS HERE
                MOV      A,#01H  ;顺利停止
                RET
WAITE5550OP2:
                DJNZ     R6,WAITE5550OP1
                DJNZ     R7,WAITE5550OP0
                MOV      A,#03H;停止出错
                RET


RECE:           MOV        R0,#BUFFAD;接收数据块的首地址
                MOV        A,@R0
                ;MOV        PACKL,A;要接收的数据块的长度,即字节数.
                ;MOV        PACKD,#BUFFAD
                MOV        R2,A
CARDRECEACK0:   CLR        SCL
                LCALL      DELAY
                SETB       SDA
                MOV        A,#0FFH;;;;;;;;;移位初始值,数据0
                MOV        R1,#8       ;数据的位数
CARDRECEACK1:   SETB       SCL
                MOV        C,SDA
                RLC        A
                LCALL      DELAY
                CLR        SCL
                LCALL      DELAY
                DJNZ       R1,CARDRECEACK1
                CLR        SDA
                LCALL      DELAY
                SETB       SCL
                LCALL      DELAY
                CLR        SCL
                LCALL      DELAY
                SETB       SDA
                LCALL      DELAY
                MOV        @R0,A
                INC        R0
                DJNZ       R2,CARDRECEACK0
                RET
DELAY:          MOV        R5,#8
                DJNZ       R5,$
                RET
DISPLAY:
        MOV R2,#6
        MOV R0,#50H
  XK2:  MOV A,@R0
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        CPL A
TCONTU: MOV R3,#8
 TSTA:  JNB ACC.0,ST0
  ST1:  SETB P3.5
        CLR P3.4
        SETB P3.4
        LJMP  TCONT
   ST0: CLR P3.5
        CLR P3.4
        SETB P3.4
 TCONT: RR A
        DJNZ R3,TSTA
        INC R0
        DJNZ R2,XK2
        RET
TAB:   DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
       DB 88H, 83H, 0C6H, 0A1H,86H, 8EH, 8CH,0FFH,0C1H
       DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
       DB 06H


DELAY1: MOV      R5,#0FFH
DEL0:  MOV      R6,#0EBH
DEL1:  MOV      R7,#10
       DJNZ     R7,$
       DJNZ     R6,DEL1
       DJNZ     R5,DEL0
       RET

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多