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

📄 project(9.18).asm

📁 一个基于51单片机的报警系统。包含有电路图
💻 ASM
📖 第 1 页 / 共 5 页
字号:
SECADMIN2:

       LCALL   VECMOV             ;调用向量移位子程序,根据匹配行号,将其后的向量
                                      ;向前移动一个位置,覆盖该向量,达到删除的目的
       SJMP    SECADMIN4

SECADMIN3:
       LCALL   DL100MS           ;延时等待临界变量访问标志可用
       LCALL   DL100MS
       SJMP    SECADMIN1



SECADMIN4:
       SETB    CRIFLAG            ;开临界区
       SETB    TR0
       RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                      匙膜逻辑关系分析模块                                    ;
;而分析的难点是匙膜的"与"关系,处理内容主要是"或"、"与"及"或与"三种逻辑关系。  ;
;ALF(C300H):标志本卡是否已经插入过,0--没,1--有                           ;
;AJH(C350H):存储某锁位机‘与’关系已经插入过的像卡数目计数,是否到齐             ;
;R2:为形参,由MATEE提供被识别的行号作为实参                                    ;
;LAEND:为带出的逻辑关系标志实参,LAEND=0表示匙膜逻辑分析结束,结果正确;      ;
;LAEND=1表示"与"关系匙膜未到齐,具体地说:                                      ;
;就是已插入的被认为是匹配正确的匙膜数小于设定的"与"关系匙膜数                  ;                              ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LAP:
       CLR     TR0
       PUSH    B
       PUSH    04H
       PUSH    05H
       PUSH    06H
       MOV     DPTR,#KEYQUA
;       MOVX    A,@DPTR
;       MOV     R3,A
       MOV     DPTR,#SEC             ;取出参与分析的H、P和L值
       MOV     A,R2                  ;匹配成功及时间有效得到的向量行号
       MOV     B,#DIMENVOL
       MUL     AB
       ADD     A,#49                 ;定位该卡的房间号
       JNC     LAP1
       INC     B
LAP1:
       ADD     A,DPL
       MOV     DPL,A
       MOV     A,B
       ADDC    A,DPH
       MOV     DPH,A
       MOVX    A,@DPTR
       MOV     R4,A                  ;将该卡的房间号存入R4
       INC     DPTR
       INC     DPTR
LAP2:
       MOVX    A,@DPTR
       MOV     R5,A                  ;将共锁“与“关系向量的数目存入R5
       INC     DPTR
LAP3:
       MOVX    A,@DPTR
       MOV     R6,A                  ;将逻辑关系存入R6,1-‘或’,2-‘与’
       CJNE    R6,#01H,LAP4          ;是否为‘或‘关系
       SJMP    LAP7
LAP4:                                ;‘与’关系处理
       MOV     DPTR,#ALF
       MOV     A,R2
;       MOV     B,#2
;       DIV     AB
       ADD     A,DPL
       MOV     DPL,A
       MOVX    A,@DPTR
       CJNE    A,#1,LAP5             ;ALF中值为0表示该卡没插入过
       SJMP    LAP6
LAP5:
       MOV     DPTR,#AJH
       MOV     A,DPL
       DEC     R4
       ADD     A,R4
       MOV     DPL,A
       MOVX    A,@DPTR
       MOV     R1,A
       INC     R1
       MOV     A,R1
       CLR     C
       SUBB    A,R5
       JZ      LAP7
       MOV     DPTR,#ALF
       MOV     A,R2
;       MOV     B,#2
;       DIV     AB
       ADD     A,DPL
       MOV     DPL,A
       MOV     A,#1
       MOVX    @DPTR,A
       MOV     DPTR,#AJH
       MOV     A,R4
       ADD     A,DPL
       MOV     DPL,A
       MOV     A,R1
       MOVX    @DPTR,A
LAP6:
       SETB    LAEND
       SJMP    LAP10
LAP7:
       MOV     DPTR,#ALF
       MOV     A,#0
       MOV     R4,#84                    ;ALF占80个单元、AJH占4个单元
LAP8:
       MOVX    @DPTR,A                   ;将ALF、AJH共84个单元清零
       INC     DPTR
       DJNZ    R4,LAP8
LAP9:
       CLR     LAEND                     ;关系匹配完成
LAP10:
       POP     06H
       POP     05H
       POP     04H
       POP     B
       SETB    TR0
       RET




;***********************************************************
;将图域一行像素(4字节)调入片内RAM子程序
;R1:为形参,用于计数GC的传送单元数目,同时也为GC的地址指针。
;返回时数值增4。
;***********************************************************
GCTOGBUF:
       PUSH    00H
       MOV     P2,#0C0H
       MOV     08H,0CH         ;片内RAM 3x4工作数组(GDBUF)上移一行
       MOV     09H,0DH
       MOV     0AH,0EH
       MOV     0BH,0FH

       MOV     0CH,10H
       MOV     0DH,11H
       MOV     0EH,12H
       MOV     0FH,13H
       MOV     R0,#10H         ;从片外RAM来的三字节像素数据存入
GARR1:
       MOVX    A,@R1           ;工作数组的最后一行
       MOV     @R0,A
       CJNE    R0,#13H,GARR2   ;放满则退出,否则继续
       INC     R1
       POP     00H
       RET
GARR2:
       INC     R0
       INC     R1
       AJMP    GARR1

;****************************************************************
;GDBUF松弛数组(FLABBY)
;FLAARR:松弛数组,建立于片外RAM,首地址C200H。R0:GDBUF的地址指针。
;R1:FLAARR的地址指针。R2:一字节位的松弛计数器。
;运行结果:一个像素占一个字节。
;****************************************************************
FLABBY:
       PUSH    00H
       PUSH    01H
       PUSH    02H
       MOV     R0,#08H
       MOV     R1,#0
       MOV     P2,#0C2H
FLABB1:
       MOV     R2,#0
       MOV     A,@R0
FLABB2:
       MOV     B,A
       ANL     A,#01H
       MOVX    @R1,A
       MOV     A,B
       RR      A
       CJNE    R2,#7,FLABB3
       CJNE    R0,#13H,FLABB4
       POP     02H
       POP     01H
       POP     00H
       RET
FLABB3:
       INC     R1
       INC     R2
       AJMP    FLABB2
FLABB4:
       INC     R0
       INC     R1
       AJMP    FLABB1

;****************************************************************
;中心线像素属性确认子程序    CALL BY LEVEL
;PERTY:数值特征变量,占用2DH单元,映射位地址6FH~68H
;R0:用于计数中心线元素地址。
;****************************************************************
PROPERTY:
       PUSH    00H
       MOV     PERTY,#0
       MOV     P2,#0C2H
       MOV     R0,#20H
       MOV     B,R0
       CJNE    R0,#20H,PROPE6
PROPE1:
       LCALL   LEFTSTR
PROPE2:
       LCALL   SCETWO
       MOV     A,PERTY
       CJNE    A,#00H,PROPE4
       MOV     A,#0
       SJMP    PROPE5
PROPE3:
       CJNE    R0,#3FH,PROPE6
       POP     00H
       RET

PROPE4:
       CJNE    A,#0FFH,PROPE3
       MOV     A,#1
PROPE5:
       MOVX    @R0,A
       AJMP    PROPE3
PROPE6:
       INC     R0
       MOV     B,R0
PROPE7:
       LCALL   RIGHTSTR
       CJNE    R0,#3FH,PROPE1
       CLR     6FH
       CLR     68H
       CLR     69H
       AJMP    PROPE2

;***************************************************************
;提取松弛数组子程序   CALL BY   LEVEL
;***************************************************************
BYTBIT:
       MOVX    A,@R0
       MOV     C,ACC.0
       MOV     R0,B
       RET

;***************************************************************
;左边缘像素右三点取值子程序  CALL  BY  LEVEL
;***************************************************************
LEFTSTR:
       MOV     A,R0         ;取右下角像素
       ADD     A,#33
       MOV     R0,A
       LCALL   BYTBIT
       MOV     6FH,C
       INC     R0           ;取右像素
       LCALL   BYTBIT
       MOV     68H,C
       CLR     C            ;取右上角像素
       MOV     A,R0
       SUBB    A,#31
       MOV     R0,A
       LCALL   BYTBIT
       MOV     69H,C
       RET
;**************************************************************
;右边缘像素左三点取值子程序  CALL BY LEVEL
;**************************************************************
RIGHTSTR:
       MOV     A,R0         ;取左上角像素
       CLR     C
       SUBB    A,#33
       MOV     R0,A
       LCALL   BYTBIT
       MOV     6BH,C
       DEC     R0           ;取左像素
       LCALL   BYTBIT
       MOV     6CH,C
       MOV     A,R0         ;取左下角像素
       ADD     A,#31
       MOV     R0,A
       LCALL   BYTBIT
       MOV     6DH,C
       RET

;*************************************************
;中二点像素取值子程序    CALL BY LEVEL
;*************************************************
SCETWO:
       MOV     A,R0          ;取上像素
       SUBB    A,#32
       MOV     R0,A
       LCALL   BYTBIT
       MOV     6AH,C
       MOV     A,R0          ;取下像素
       ADD     A,#32
       MOV     R0,A
       LCALL   BYTBIT
       MOV     6EH,C
       RET
;***********************************************************
;中心线压缩子程序   CALL BY LEVEL
;R0:用于计数GDBUF的地址。R1:用作松弛数组中心线元素地址指针。
;R2:用于一个字节的位计数。B:用于压缩过程中的工作单元。
;***********************************************************
CENCON:
       PUSH    00H
       PUSH    01H
       PUSH    02H
       CLR     C
       MOV     R0,#0CH
       MOV     R1,#20H
       MOV     R2,#0
       MOV     B,#0
CENCON1:
       MOVX    A,@R1
       RRC     A
       MOV     A,B
       RRC     A
       MOV     B,A
       CJNE    R2,#7,CENCON2   ;8单元一位像素压缩为一个字节否?否,
       MOV     @R0,A           ;则转CENCON2再压,已压完回送GDBUF
       LJMP    CENCON4
CENCON2:
       INC     R2
CENCON3:
       INC     R1
       LJMP    CENCON1
CENCON4:
       CJNE    R0,#0FH,CENCON5 ;全压缩完否?没有再压,压缩完退出
       POP     02H
       POP     01H
       POP     00H
       RET
CENCON5:
       MOV     R2,#0
       MOV     B,#0
       INC     R0
       LJMP    CENCON3

;***********************************************************
;GDBUF送GC子程序   CALL BY LEVEL
;R0:为GDBUF的中心线单元指针。R1:为GC地址指针形参。
;***********************************************************
GBUFTOGC:
       PUSH    00H
       MOV     R0,#0CH
       MOV     P2,#0C0H
       DEC     R1
       DEC     R1
       DEC     R1
       DEC     R1
GBUF1:
       MOV     A,@R0
       MOVX    @R1,A
       CJNE    R0,#0FH,GBUF2
       POP     00H
       RET
GBUF2:
       INC     R0
       INC     R1
       lJMP    GBUF1
;***********************************************************
;松弛数组下移32个单元子程序      CALL BY LEVEL
;R0:为FLAAAR地址指针.R1:为GC地址指针.
;***********************************************************
PAARR:
       PUSH    00H
       PUSH    01H
       MOV     P2,#0C2H
       MOV     R0,#0
       MOV     R1,#20H
PAA1:
       MOVX    A,@R1
       MOVX    @R0,A
       CJNE    R1,#5FH,PAA2
       POP     01H
       POP     00H
       RET
PAA2:
       INC     R0
       INC     R1
       lJMP    PAA1

;************************************************************************
;子基元匹配程序 CALL BY MATEE
;A,R5为带入实参.A为KK中的基元,R5为SEC中向量的基元。R0,R6为全局变量,
;R0为"子基元0距离匹配正确的总次数",R6为"子基元有效匹配的总次数"
;************************************************************************
CHILDELT:
       PUSH    07H
       MOV     R7,#4
       MOV     B,A
CHILDELT1:
       MOV     A,B
       XRL     A,R5              ;异或
       ANL     A,#03H            ;只取最低2位
       JNZ     CHILDELT2A        ;判最低2位是否一致
       INC     R0                ;一致,两个全局变量增1
       INC     R6
       SJMP    CHILDELT2
CHILDELT2A:
       INC     R6                 ;不一致,只有R6增1
CHILDELT2:
       MOV     A,B               ;两个基元都各向右移动2位,判断下一个子基元
       RR      A
       RR      A
       MOV     B,A
       MOV     A,R5
       RR      A
       RR      A
       MOV     R5,A
       DJNZ    R7,CHILDELT1      ;判4个子基元都判断完否
       POP     07H
       RET
;*****************************************************************
;单元移位子程序   CALL BY MATEE
;R0,R1为带入实参。R0为发生"前<后"情况时的前地址,R1为后地址;

⌨️ 快捷键说明

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