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

📄 pci_av2.asm

📁 ATM机报警卡,具有接近探测、振动报警、出钞口检测报警、款箱开启报警等功能。
💻 ASM
📖 第 1 页 / 共 2 页
字号:


             ORG  0000H

           LJMP    START

             ORG  000BH                   ;定时器0中断入口地址
           LJMP    START

             ORG  0023H                   ;串口中断入口地址

           LJMP   RSLINK                  ;串行通讯子程序

             ORG   0100H                  ;主程序
;**********************************
;         初始化
;**********************************
START:
           MOV   SP,    #56H              ;堆栈指针
           MOV   P1,    #00H             ;P1口-P2口清零
           MOV   P2,    #00H
           MOV   IE,    #80H
           MOV   SCON,  #050H             ;串行接收方式1,SM2=0
           MOV   TMOD,  #20H              ;T1为方式2,T0为方式0
           MOV   TH1,   #0FDH
           MOV   TL1,   #0FDH
           SETB  TR1                      ;T1启动
           SETB  ET0                      ;T0开中断
           SETB  TR0                      ;T0启动
           MOV   R3,     #07H             ;记录状态赋初值
           MOV   R7,     #80H
REL1:      MOV   A,      R3
           ADD   A,      #30H
           MOV   R1,     A
           MOV   @R1,    #00H
           MOV   A,      R3
           ADD   A,      #40H
           MOV   R1,     A
           MOV   A,      R7
           MOV   TH0,   #00H              ;T0清零
           MOV   TL0,   #00H
           RL    A
           MOV   R7,     A
           MOV   @R1,    A
           MOV   A,      R3
           ADD   A,      #01H
           DEC   A
           JZ    REL2
           DEC   R3
           LJMP  REL1
REL2:      SETB   P3.2
           MOV   R3,     #00H
           LCALL SEND_ASK
;*********************************
;      监控循环体
;*********************************
           MOV   20H,    #00H             ;状态清零
           MOV   21H,    #00H             ;回答记录清零
           MOV   22H,    #0EFH            ;计时赋值
           MOV   23H,    22H
           MOV   2AH,    #00H
           
MAIN:      MOV   P0,     #0FFH
           MOV   50H,    #0EFH            ;本机地址存入50H单元
           CLR   RI
           CLR   TI
           SETB  EA
           SETB  ES                       ;串行开中断
           MOV   TH0,   #00H              ;T0清零
           MOV   TL0,   #00H

           MOV   A,     10H
           CJNE  A, #00H, NO_0
           LJMP  NO_11
NO_0:      DEC A
           MOV   10H,   A
NO_11:     MOV   A,     11H
           CJNE  A,  #00H, NO_1
           LJMP  NO_12
NO_1:      DEC A
           MOV   11H,   A
NO_12:     MOV   TH0,    #00H
           MOV   TL0,    #00H
           MOV   A,     12H
           CJNE  A,  #00H, NO_2
           LJMP  NO_13
NO_2:      DEC A
           MOV   12H,   A
NO_13:     MOV   A,     13H
           CJNE  A,  #00H, NO_3
           LJMP  NO_14
NO_3:      DEC A
           MOV   13H,   A
NO_14:     MOV   TH0,    #00H
           MOV   TL0,    #00H
           MOV   A,     14H
           CJNE  A,  #00H, NO_4
           LJMP  NO_15
NO_4:      DEC A
           MOV   14H,   A
NO_15:     MOV   A,     15H
           CJNE  A,  #00H, NO_5
           LJMP  NO_16
NO_5:      DEC A
           MOV   15H,   A
NO_16:     MOV   TH0,    #00H
           MOV   TL0,    #00H
           MOV   A,   16H
           CJNE  A,  #00H, NO_6
           LJMP  NO_17
NO_6:      DEC A
           MOV   16H,   A
NO_17:     MOV   A,     17H
           CJNE  A,  #00H, NO_7
           LJMP  SCANSTART
NO_7:      DEC A
           MOV   17H,   A

SCANSTART: MOV   R1,    #06H              ;扫描开始 6-1
DEC1:      DEC   R1
           MOV   A,     P1
           ANL   A,     #0F8H             ;P1低三位清零
           ADD   A,     R1                ;与扫描地址合成
           MOV   P1,    A
           MOV   TH0,   #00H              ;T0清零
           MOV   TL0,   #00H
           LCALL TIMER1
           JNB   P3.2,  ALARM1            ;转报警处理
MAIN_LOOP1: CJNE  R1,  #00H,   DEC1       ;是否循环完
           INC   R3
           CJNE  R3,  #06H,  MAIN_C
           MOV   R3,    #00H
           CPL   P2.6                     ;看门狗
MAIN_C:    DJNZ  23H,   MAIN_LP1
           LJMP  SEND_CX                  ;转发送查询
MAIN_LP1:  LJMP  MAIN

ALARM1:    LJMP  ALARM

;***********************************
;           报警处理程序
;***********************************
           ORG     02A0H

ALARM:     MOV   TH0,    #00H
           MOV   TL0,    #00H
           MOV   A,      R1
           ADD   A,      #10H
           MOV   R0,     A
           CJNE  @R0,  #00H,  ALARM_1
           MOV   @R0,   #2AH

           MOV   A,      R1
           ADD   A,      #30H
           MOV   R0,     A
           CJNE  @R0,  #01H,   ALARM_1
ALM_0:     CJNE  A,   #30H,  ALM_1  ;IN1
           MOV   R2,   #01H
           SETB  P1.5
           LJMP  ALM_EXT
ALM_1:     CJNE  A,   #31H,  ALM_2
           MOV   R2,  #02H
           SETB  P1.6
           LJMP  ALM_EXT
ALM_2:     CJNE  A,   #32H,  ALM_3
           MOV   R2,  #04H
           SETB  P1.7
           LJMP  ALM_EXT
ALM_3:     CJNE  A,   #33H,  ALM_4
           MOV   R2,  #08H
           SETB  P1.4
           SETB  P2.2
           LJMP  ALM_EXT
ALM_4:     CJNE  A,  #34H,  ALM_5
           MOV   R2,   #10H
           SETB  P2.1
           LJMP  ALM_EXT
ALM_5:     CJNE  A,  #35H,  ALARM_1
           MOV   R2,   #20H
           SETB  P2.0
ALM_EXT:   LCALL  SEND
ALARM_1:   MOV   TH0,    #00H
           MOV   TL0,    #00H
           LJMP  MAIN_LOOP1

RSLINK_RET2:   LJMP   RSLINK_RET1
;*************************************
;        串行通讯中断子程序
;*************************************

RSLINK:        PUSH   DPH
               PUSH   DPL
               PUSH   PSW
               JNB    RI,    RSLINK_RET2
               CLR    RI
               CLR    ES
               CPL    P2.6
               MOV   TH0,   #00H       ;T0清零
               MOV   TL0,   #00H
               MOV    A,    SBUF
               CJNE   A,    #0EBH,   RSLINK_RET2
RSLINK_SELFR1: MOV   TH0,   #00H       ;T0清零
               MOV   TL0,   #00H
               JNB    RI,   RSLINK_SELFR1
               MOV    A,    SBUF
               CJNE   A,    #0EFH,   RSLINK_RET2
               CLR    RI

RSLINK_SELFR2: MOV   TH0,   #00H        ;T0清零
               MOV   TL0,   #00H
               JNB    RI,   RSLINK_SELFR2
               MOV    A,    SBUF
               CLR    RI
               MOV    51H,  A                ;指令存入51H

RSLINK_SELFR3: MOV   TH0,   #00H             ;T0清零
               MOV   TL0,   #00H
               JNB    RI,   RSLINK_SELFR3
               MOV    A,    SBUF
               CLR    RI
               MOV    52H,  A                ;操作数存入52H
RSLINK_SELFR4: MOV   TH0,   #00H              ;T0清零
               MOV   TL0,   #00H
               JNB    RI,   RSLINK_SELFR4
               MOV    A,    SBUF
               CLR    RI
               MOV    53H,  A                ;操作数存入53H

RSLINK_SELFR5: MOV   TH0,   #00H              ;T0清零
               MOV   TL0,   #00H
               JNB    RI,   RSLINK_SELFR5
               MOV    A,    SBUF
               CLR    RI
               MOV    54H,  A                ;校验和存入54H
               MOV    A,    #0EFH
               ADD    A,    51H
               ADD    A,    52H
               ADD    A,    53H
               CJNE   A,    54H,    RSLINK_RET3
               MOV    A,    51H               ;取出指令
               CJNE   A,    #73H,  RSLINK_STOP_WD      ;启动监视
               MOV    20H,  #01H
               LJMP   RSLINK_RET1
RSLINK_STOP_WD:CJNE   A,    #65H,  RSLINK_ANSWER       ;停止监视
               MOV    20H,  #00H
               MOV    22H,  #0EFH
               LJMP   RSLINK_RET1
RSLINK_ANSWER: CJNE   A,    #4FH,  RSLINK_CLS_OUT      ;回答
               MOV    21H,  #01H
               LJMP   RSLINK_RET1                             
RSLINK_CLS_OUT:CJNE   A,   #13H,   RSLINK_CLS_ALM  ;是否联动解除
               MOV    TH0, #00H
               MOV    TL0, #00H
               CLR    P1.5
               CLR    P1.6
               CLR    P1.7
               CLR    P2.0
               CLR    P2.1
               CLR    P2.2
RSLINK_RET3:   LJMP   RSLINK_RET1

RSLINK_CLS_ALM: MOV   TH0,   #00H                  ;T0清零
               MOV   TL0,   #00H
               CJNE   A,    #14H,   RSLINK_ZD_ALM  ;关闭ALARM
               CLR    P1.4
               LJMP   RSLINK_RET1
RSLINK_ZD_ALM: MOV    TH0,   #00H                  ;T0清零
               MOV    TL0,   #00H
               CJNE   A,     #1DH,   RSLINK_B_C    ;是否遮挡报警
               SETB    P1.4
               LJMP   RSLINK_RET1
RSLINK_B_C:    CJNE   A,     #10H,   RSLINK_ASK
               MOV    A,     52H
               CJNE   A,     #0FFH,  STATE_C
               MOV    30H,   #01H                  ;记录状态
               MOV    31H,   #01H
               MOV    32H,   #01H
               MOV    33H,   #01H
               MOV    34H,   #01H
               MOV    35H,   #01H
               MOV    36H,   #01H
               MOV    37H,   #01H
               LJMP   RSLINK_RET1
STATE_C:       MOV    30H,   #00H                  ;记录状态
               MOV    31H,   #00H
               MOV    32H,   #00H
               MOV    33H,   #00H
               MOV    34H,   #00H
               MOV    35H,   #00H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -