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

📄 project(9.18).asm

📁 一个基于51单片机的报警系统。包含有电路图
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;数组首址
SEC         EQU   0C801H
KK          EQU   0C200H

ALF         EQU   0C300H
AJH         EQU   0C350H


KEYQUA      EQU   0C800H        ;存储EEPROM样本个数的计数值



;端口地址
DISPORT     EQU   07FFFH        ;显示锁存器地址
GD1PORT     EQU   0DFFFH
GD2PORT     EQU   0E7FFH
GD3PORT     EQU   0EFFFH
GD4PORT     EQU   0F7FFH

LOCKPORT1234  EQU   0EFFFH      ;电磁锁和步进电机锁端口,端口0带步进电机;端口1带电磁锁


;位变量地址
KEYERR      BIT   P1.5          ;"重插"指示灯
KEYIN       BIT   P1.3          ;卡插入判断端口
POWER       BIT   P1.4          ;+5V OFF
BIPORT      BIT   P3.4          ;音乐脉冲输入端
SENDPOWER   BIT   P3.5          ;采样电源
DSP0        BIT   P1.6          ;显示管0位选
DSP1        BIT   P1.7          ;显示管1位选
CT0FLAG     BIT   7CH           ;定时器限时标志

ROWST       BIT   74H           ;行点色标志

CRIFLAG     BIT   77H           ;临界区EEPROM访问标志
RF          BIT   78H           ;匹配成功标志
TF          BIT   79H           ;像卡有效标志
PRTF        BIT   7AH           ;有效时间打印标志
LAEND       BIT   7BH           ;像卡逻辑分析结束标志
MF          BIT   7CH           ;步进电机旋转方向指示标志

T_CLK       Bit   P1.0          ;实时时钟时钟线引脚
T_IO        Bit   P1.1          ;实时时钟数据线引脚
T_RST       Bit   P1.2          ;实时时钟复位线引脚



;片内RAM工作单元
MINBUF      EQU   1BH           ;三个计时工作单元
SECBUF      EQU   1CH
MSBUF       EQU   1DH
LED0        EQU   20H           ;二个显示工作单元
LED1        EQU   21H
T1COUNT     EQU   22H           ;定时器1中断次数计数单元
CT0         EQU   23H           ;开门维持时间工作单元

;FLAG        EQU   20H           ;定义标志寄存器
;RINT        BIT   20H.0         ;接收中断标志=1为接收中断,用来在主程序中判断是否有过中断
;TINT        BIT   20H.1         ;发送中断标志=1为发送中断,用来在主程序中判断是否有过中断
;RBUF        EQU   30H           ;接收数据存放寄存器
;TBUF        EQU   31H           ;发送数据存放寄存器

PERTY       EQU   2DH
CHECK       EQU   24H            ;存放发布信息校验码, 初始为00H,发完后需复位
COUNT       EQU   25H            ;存放发布信息计数值,初始为66,发完后需复位


;40h--46h 存放 "秒 分 时 日 月 星期 年 "
Second      EQU  40H


;常量
AGTIMES     EQU   15           ;重插次数计数单元
DIMENVOL    EQU   66           ;60维向量所占字节数


       ORG     0000H            ;程序运行起始地址
       LJMP    START

       ORG     0003H            ;中断服务程序入口
       LJMP    INTOP

       ORG     000BH            ;定时器0入口
       LJMP    CT0P

       ORG     001BH            ;定时器1中断入口
       LJMP    CT1P

       ORG     0023H            ;串口中断
       LJMP    INT_COM


       ORG     0030H

START:
      SETB    POWER              ;关电源
START1:
      CLR     POWER              ;开电源
START2:
      MOV     SP,#30H


      CLR     ES


      CLR     EA
      ;LCALL   GET1302
      ;sjmp start2
      MOV     DPTR,#LOCKPORT1234 ;初始时将所有电磁锁关闭
      MOV     A,#00H
      MOVX    @DPTR,A

     ; MOV     R2,#00H
     ; LCALL   OPENLOCK

      CLR     RF                 ;关匹配成功标志
      CLR     TF                 ;关像卡时间有效标志
      CLR     PRTF               ;清有效时间打印标志
      SETB    CRIFLAG            ;关EEPROM临界区访问标志
      CLR     SENDPOWER          ;关采样电源
      MOV     LED0,#0
      CLR     DSP0               ;关显示器
      CLR     DSP1




;============================复位函数==========================
;定时器工作方式以及赋初值
RESET:
      CLR     CT0FLAG           ;定时形式位参数,=0时为2分钟限时复位,=1由外给定定时值
      MOV     TMOD,#21H         ;定时器0工作方式1/定时器1工作方式2,用于波特率发生
      MOV     TL0,#0B0H         ;定时100MS
      MOV     TH0,#3CH
      MOV     TL1,#0F3H         ;波特率为2400
      MOV     TH1,#0F3H
      MOV     PCON,#80H         ;PCON最高位为1,波特率加倍
      SETB    TR1               ;启动波特率发生定时器1
;      MOV     TL1,#0FFH
;      MOV     TH1,#0FFH
      MOV     SCON,#0F0H         ;串口通信工作方式3

       MOV     DPTR,#LOCKPORT1234 ;初始时将所有锁位机关闭
       MOV     A,#00H
       MOVX    @DPTR,A

   CLR     TI

      SETB    EA                ;开总中断
      SETB    ET0               ;允许T0中断
;      LCALL   RESCT0            ;调用计时复位程序
      MOV     IP,#10H           ;设置串口中断为最高优先级

      CLR     SENDPOWER
      CLR     IT0
;      SETB    ES                 ;开串口中断

      MOV     CHECK,#00H         ;异或校验字,存放24H单元
      MOV     COUNT,#DIMENVOL    ;接收字节计数器值存放于R0
      MOV     23H,#0C4H          ;设置接收数据指针DPH
      MOV     22H,#00H           ;DPL


RESET1:
      MOV     DPTR,#ALF          ;ALF,AJH共84个单元清0
      MOV     A,#0
      MOV     R0,#84
RESET2:
      MOVX    @DPTR,A
      INC     DPTR
      DJNZ    R0,RESET2


       PUSH    PSW



;主程序
MAIN:
;       SETB    KEYERR             ;灭"重插"指示灯

       MOV     DPTR,#LOCKPORT1234 ;初始时将所有锁位机关闭
       MOV     A,#00H
       MOVX    @DPTR,A

       MOV     LED0,#31H
       MOV     LED1,#07H
       SETB    EA                ;开总中断
       SETB    ET0               ;允许T0中断
       LCALL   RESCT0            ;调用计时复位程序
       MOV     IP,#10H           ;设置串口中断为最高优先级
       CLR     IT0
       SETB    ES                 ;开串口中断

CL_DL:
       LCALL   DISPLAY


 ;      MOV     DPTR,#LOCKPORT1234 ;初始时将所有锁位机关闭
;      MOV     A,#00H
;       MOVX    @DPTR,A

       JNB     KEYIN,CL_DL       ;判断像卡是否插入,否则等待,调用显示

       SETB    KEYERR            ;灭重插指示灯

       MOV     DPTR,#LOCKPORT1234 ;初始时将所有锁位机关闭
       MOV     A,#00H
       MOVX    @DPTR,A

       LCALL   DL100MS


       LCALL   DL100MS

;       LCALL   DL100MS
;       LCALL   DL100MS
;       LCALL   DL100MS



       LCALL   CJ                ;调用采集子程序


       LCALL   DIFFEREN          ;GA->GB, 图域整定
       LCALL   GSTAN             ;GB->GC,规范化
       LCALL   LEVEL             ;调用去躁子程序


       LCALL   TAK               ;调用特征提取子程序
       LCALL   MATEE


       ;SETB    RF
       JB      RF,CL_DL1         ;判断RF=1?
       CLR     KEYERR            ;否,则开重插指示灯,直到有卡插入
       MOV     DPTR,#DAT
       LCALL   MUSIC             ;调出错音乐子程序
;       MOV     A,SECBUF          ;取计时值
;       CJNE    A,#5H,CJ2         ;是否等于5秒

       CLR     POWER              ;开电源

       MOV     DPTR,#LOCKPORT1234 ;初始时将所有锁位机关闭
       MOV     A,#00H
       MOVX    @DPTR,A

       DJNZ    AGTIMES,MAIN       ;判重插是否达到15次,是则锁位机
       SJMP    CL_DL2
CL_DL1:
       LCALL   CALTIME             ;计算持卡有效时间,并置卡有效标志TF


       LCALL   SECADMIN            ;根据TF,管理动态数组

CL_DL2:
       POP     PSW
       LJMP    START1             ;返回主程序,等待下次插卡

;MAIN:



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                                    ;
;数据采集部分,共128x4个字节,存放于外部RAM C000H-C1FFH共512个单元   ;
;                                                                    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CJ:
       PUSH    00H                ;R0压栈
       PUSH    06H
       PUSH    PSW
       MOV     DPTR,#LOCKPORT1234 ;初始时将所有锁位机关闭
       MOV     A,#00H
       MOVX    @DPTR,A
;       SETB    KEYERR
       MOV     R6,#00H            ;采样字节计数单元赋初值0
       MOV     R0,#00H            ;
       MOV     P2,#0C0H           ;外部RAM起始单元 0C000H
;       LCALL   RESCT0            ;调用计时复位程序
CJ1:

       MOV     LED0,#39H
       MOV     LED1,#1EH
       LCALL   DISPLAY

       SETB    SENDPOWER
       CLR     EX0                ;关INT0
;       MOV     A,SECBUF          ;取计时值
;       CJNE    A,#5H,CJ2         ;是否等于5秒
;       CLR     KEYERR             ;亮"重插"指示灯
;       SETB    POWER               ;关电源
;       LJMP    START1              ;重新插卡
CJ2:
       SETB    IT0                ;IT0边沿申请有效
       SETB    EA                 ;开总中断允许控制位
       SETB    EX0                ;开INT0
       CJNE    R6,#80H,CJ1        ;R6为采样计数值,不等于128次则继续采样
       CLR     SENDPOWER
       CLR     EX0                ;采样完则关中断


       POP     PSW
       POP     06H
       POP     00H                ;R0出栈
       RET

;显示子程序
DISPLAY:
       PUSH    03H
       PUSH    04H
       PUSH    05H
       PUSH    DPH
       PUSH    DPL
      MOV     DPTR,#LOCKPORT1234 ;初始时将所有锁位机关闭
      MOV     A,#00H
      MOVX    @DPTR,A


 ;      LCALL   RESCT0            ;调用计时复位程序

       MOV     R4,#1
DISP:

       CLR     DSP0
       CLR     DSP1
       SETB    DSP0
       CLR     DSP1
       MOV     DPTR,#DISPORT
       MOV     A,LED0
       MOVX    @DPTR,A

       MOV     R5,#0
       DJNZ    R5,$
       SETB    DSP1
       CLR     DSP0
       MOV     A,LED1
       MOVX    @DPTR,A
       MOV     R3,#0
       DJNZ    R3,$
       DJNZ    R4,DISP
       POP     DPL
       POP     DPH
       POP     05H
       POP     04H
       POP     03H
       RET

;//////////////////////////////////////////////////////////////
;===============================================================
;                         串口中断函数                         ;
;                接收上位机发布信息、销卡处理                  ;
;===============================================================

INT_COM:
       CLR     TR0
       CLR     EA                ;关中断
;       PUSH    PSW               ;入栈,保护现场
       PUSH    ACC
       PUSH    03H
       PUSH    04H
       PUSH    05H
       PUSH    07H
       PUSH    06H
INT1:
       JB      RI,R11            ;判断是否接收

INT2:
       CLR      TI             ;发送则中断返回
       POP     06H
       POP     07H
       POP     05H
       POP     04H
       POP     03H
       POP     ACC
;       POP     PSW
       SETB    TR0
       SETB    EA
       RETI
R11:
       CLR     RI
       JNB     SM2,R14           ;判SM2,为1则接收地址,为0则接收命令或者数据
       MOV     A,SBUF
       CJNE    A,#01H,R12        ;判地址是否相符,否则中断返回
       CLR     SM2               ;清SM2,准备接收命令或者数据
       MOV     SBUF,#01H         ;地址相符则回送本地址
       JNB     TI,$
       CLR     TI

R12:
       AJMP    INT_END           ;中断返回
R13:
       MOV     A,CHECK           ;取校验码并发送到上位机
       MOV     CHECK,#00H        ;校验码复位
       MOV     SBUF,A
       JNB     TI,$
       CLR     TI
       JNB     RI,$              ;接收校验结果
       CLR     RI
       MOV     A,SBUF
       XRL     A,#0FEH           ;=FEH则校验正确
       JZ      T11
      MOV     CHECK,#00H         ;异或校验字,存放24H单元
      MOV     COUNT,#DIMENVOL    ;接收字节计数器值存放于R0
      MOV     23H,#0C4H          ;设置接收数据指针DPH
      MOV     22H,#00H           ;DPL

       MOV     SBUF,#0FFH        ;校验不正确则发送FFH到上位机
       JNB     TI,$
       CLR     TI
       SETB    SM2               ;恢复SM2
       AJMP    INT_END
R14:
       JB      RB8,R15           ;RB8=0则接收数据,RB8=1则响应销卡处理

⌨️ 快捷键说明

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