新闻  |   论坛  |   博客  |   在线研讨会
电子密码锁源程序(ASM)(2)
szyth | 2008-08-15 10:41:26    阅读:1260   发布文章

 ;***************************
        ;*****  显示子程序  ********
        ;***************************
        ;功能:分五屏幕显示数据,分别是XSA,XSB,XSC,XSD,XSE.代表六种状态。
        ;锁定状态显示。
     XSA:PUSH  ACC
         PUSH  PSW
         MOV  A,    TIMERS1
         MOV  DPTR, #TAB
         MOVC A,    @A+DPTR
         MOV  SBUF, A                    ;送已经输入密码的次数
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH               ;送短线
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH                ;送短线
         JNB  TI, $
         CLR  TI                         ;送F
         MOV  SBUF, #78H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #78H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #11H
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
         ;成功开锁状态显示
     XSB:PUSH ACC
         PUSH PSW
         MOV  A,    TIMERS1
         MOV  DPTR, #TAB
         MOVC A,    @A+DPTR
         MOV  SBUF, A
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #10H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #10H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #10H
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
         ;密码输入及修改状态
     XSC:PUSH ACC
         PUSH PSW
         LCALL KILLXS
         SETB RS1   ;切换到第三组寄存器。防止操作数读取错误。
         MOV  R6,  TIMERS
         MOV  A,   R6
         SUBB A,   #01H
         JNC  SC0
         JZ  SC1
     SC0:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC1:MOV  A,   R6
         SUBB A,   #02H
         JNC  SC11
         JNZ  SC2
    SC11:MOV  SBUF,#0FEH
         JNB  TI, $
         CLR  TI
     SC2:MOV  A,   R6
         SUBB A,   #03H
         JNC  SC22
         JNZ  SC3
    SC22:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC3:MOV  A,   R6
         SUBB A,   #04H
         JNC  SC33
         JNZ  SC4
    SC33:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC4:MOV  A,   R6
         SUBB A,   #05H
         JNC  SC44
         JNZ  SC5
    SC44:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC5:MOV  A,   R6
         SUBB A,   #06H
         JNC  SC55
         JNZ  SC6
    SC55:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
     SC6:MOV  A,   R6
         SUBB A,   #07H
         JNC  SC66
         JNZ  EXIT_C
    SC66:MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         NOP
         NOP
  EXIT_C:NOP
         CLR  RS1
         POP  PSW
         POP  ACC
         NOP
         RET

         ;密码输入错误的提示
     XSD:PUSH ACC
         PUSH PSW
         MOV  SBUF, #98H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #79H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #11H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #79H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #79H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #38H
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
         ;锁定状态显示
     XSE:PUSH ACC
         PUSH PSW
         MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #54H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #39H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #11H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #3DH
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #0FEH
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
     XSF:PUSH ACC
         PUSH PSW
         MOV  SBUF, #98H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #38H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #39H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #39H
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #3DH  ;U
         JNB  TI, $
         CLR  TI
         MOV  SBUF, #98H
         JNB  TI, $
         CLR  TI
         POP  PSW
         POP  ACC
         RET
  KILLXS:PUSH ACC
         PUSH PSW
         MOV  R7,   #06H
 LOOP_XS:MOV  SBUF, #0FFH
         JNB  TI, $
         CLR  TI
         DJNZ R7,LOOP_XS
         NOP
         POP  PSW
         POP  ACC
         RET
        TAB: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D1H,10H,90H ,0FFH
;****************************************************************
;*******               24C02读写程序                      ×××××××
;****************************************************************
 AT_RADE:PUSH  PSW
         PUSH  ACC
         MOV   R0,#AT1    ;CPU首地址
         MOV   R6,#06H    ;8字节
         MOV   R5,#08H    ;8位
         MOV   R7,#00H    ;24C02首地址
         LCALL READ     ;读数据
         NOP
         NOP
         POP   ACC
         POP   PSW
         RET

  AT_WR:
       PUSH  PSW
       PUSH  ACC
       MOV R0,#PS1    ;CPU RAM首地址
       MOV R6,#06H    ;8字节
       MOV R5,#08H    ;8 BIT
       MOV R7,#00H    ;24C02 RAM 首地址
       LCALL WRT      ;先写进
       NOP
       NOP
       POP  ACC
       POP  PSW
       RET

;---------------------
;读串行器件 R0:RAM的起始地址,R5:位计数器,
;R6:读的字节数,R7:读的起始地址
READ: NOP
 NOP
  LCALL START0
 MOV A,#0A0H
 LCALL WRB
 LCALL ACK
 JB F0,RD_FAIL
 MOV A,R7
 LCALL WRB
 LCALL CHK
 JB F0,RD_FAIL
 LCALL START0
 MOV A,#0A1H
 LCALL WRB
 LCALL CHK
 JB F0,RD_FAIL
RD_N: NOP
 NOP
 LCALL RDB
 MOV @R0,A
 DJNZ R6,GO_ACK
 LCALL N_ACK
 RD_FAIL:NOP
 LCALL STOP
 MOV A,#0FFH
 RET;*************read
GO_ACK: NOP
 NOP
 DEC R0
 LCALL ACK
 JMP RD_N
;写串行器件 R0:RAM的起始地址,R5:位计数器,
;R6:写的字节数(页),R7:写的起始地址
WRT: NOP
 NOP
 LCALL START0
 MOV A,#0A0H
 LCALL WRBYT
 LCALL CHK
 JB F0,WR_FAIL
 MOV A,R7
 LCALL WRBYT
 LCALL CHK
 JB F0,WR_FAIL
WR_N: NOP
 NOP
 MOV A,@R0
 LCALL WRBYT
 LCALL CHK
 JB F0,WR_FAIL
 DEC R0
 DJNZ R6,WR_N
WR_FAIL:NOP
 LCALL STOP
 MOV A,#0FFH
 RET;*********wrt
;--------------------
START0: NOP
 NOP
 SETB SDA
 SETB SCL
 NOP
 NOP
 CLR SDA
 NOP
 NOP
 CLR SCL
 NOP
 RET
;-------------------
STOP: NOP
 NOP
 CLR SDA
 SETB SCL
 NOP
 NOP
 SETB SDA
 NOP
 NOP
 CLR SCL
 NOP
 RET
;--------------------
ACK: NOP
 NOP
 CLR SDA
 SETB SCL
 NOP
 NOP
 CLR SCL
 SETB SDA
 NOP
 RET
;--------------------
N_ACK: NOP
 NOP
 SETB SDA
 SETB SCL
 NOP
 NOP
 CLR SCL
 CLR SDA
 NOP
 RET
;--------------------
CHK: NOP
 NOP
 SETB SDA
 NOP
 NOP
 SETB SCL
 NOP
 NOP
 MOV C,SDA
 MOV F0,C
 CLR SCL
 NOP
 NOP
 RET
;---------------------
RDB: NOP
 NOP
 SETB SDA
 MOV R5,#8
RD_B: NOP
 NOP
 CLR SCL
 NOP
 NOP
 SETB SCL
 NOP
 NOP
 MOV C,SDA
 RLC A
 NOP
 NOP
 SETB SDA
 CLR SCL
 DJNZ R5,RD_B
 NOP
 RET
;一字节数据发送子程序
WRBYT:  MOV  R5,#8
WLP:  RLC  A
  JC  WR1
  CLR SDA
  SETB SCL
 NOP
  NOP
  CLR SCL
  DJNZ R5,WLP
  RET
  WR1: SETB SDA
  SETB SCL
        NOP
  NOP
  CLR SCL
  CLR SDA
  DJNZ R5,WLP
  RET
;--------------------
WRB: NOP
 NOP
 MOV R5,#8
WR_B: NOP
 NOP
 SETB SDA
 RLC A
 JC WR_1
 CLR SDA
 NOP
WR_1: SETB SCL
 NOP
 NOP
 CLR SCL
 NOP
 CLR SDA
 NOP
 DJNZ R5,WR_B
 NOP
 RET
;***********************************************************************************************
;*************               毫秒延时程序           ********************************************
;***********************************************************************************************
  T10MSD:SETB   RS0
         MOV    R4, #12
      TM:MOV    R3, #128
     TM6:DJNZ   R3, TM6
         DJNZ   R4, TM
         CLR    RS0
         RET


 T100MSD:MOV     R3,   #200
     D11:MOV     R4,   #125
     D12:DJNZ    R4,   D12
         DJNZ    R3,   D11
         RET
        
 T500MSD:LCALL   T100MSD
         LCALL   T100MSD
         LCALL   T100MSD
         LCALL   T100MSD
         LCALL   T100MSD
         NOP
         RET

     SEC:SETB   RS1
         MOV    R7,    #0AH
  SEC_LP:LCALL  T100MSD
         DJNZ   R7,SEC_LP
         NOP
         CLR    RS1
         RET
         END

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客