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

📄 mt8888a.asm

📁 基于MT8888的电话远程控制器设计代码
💻 ASM
字号:
;***********************************************;
;*********该程序在mt8888.asm的基础之上**********;
;*********已经加入拨识别码            **********;
;*********2003/ 05/08/23.12           **********;
;同一时间只允许一种报警,并有优先级别之分
;2003/6/6 ok
;***********************************************;
switch  bit     p3.3           ;提机高电平有效
IRQCP   BIT     p3.2           ;int0
;--------------------------------------------
;发送寄存器,接收寄存器地址:0000H
;控制寄存器、状态寄存器地址:0100H
;CS-----P2.1
;RS0----P2.0
;p1.0--p1.3为输入,p1.4--p1.7为脉冲信号输出
;3bh=01010101(55h)烟雾警识别码
;30h--3eh
;--------------------------------------------
        org     0000h
        ljmp    start
        org     0100h
 start: clr    switch          ;断开电话线
        mov     sp,#60h
        mov     p1,#0fh        ;设置p1口低4位为输入口
        nop                    ;高4位为脉冲信号输出口
        mov     3bh,#1         ;1 烟雾警识别码
        mov     3ch,#2         ;2 防盗警识别码
        mov     3dh,#3         ;3 煤气警识别码
        mov     3eh,#4         ;4 其他警识别码
        lcall   sen_del
        lcall   sen_del
        ;-----------------
        mov     dptr,#0100h    ;初始化MT8888
        movx    a,@dptr
        nop
        mov     a,#00h
        movx    @dptr,a         ;写CRA
        movx    @dptr,a         ;写CRA
        mov     a,#08h          ;允许写CRB
        movx    @dptr,a         ;写CRA
        mov     a,#00h
        movx    @dptr,a         ;写CRB
        nop
        movx    a,@dptr
        ;--------------

main:   lcall   sensor
        ljmp    main
;=======================================================
;报警信号检测子程序 total:4 way 判断P1口是否有报警信号
;=======================================================
sensor: jnb     p1.0,sen1
        lcall   sen_del         ;调防误报延时子程序40ms
        jnb     p1.0,sen1
        lcall   yanwu           ;p1.0为‘1’烟雾警
        mov     r4,#150
        lcall   zguaji          ;15S后再检测一次
        ljmp    senback
sen1:   jnb     p1.1,sen2
        lcall   sen_del         ;调防误报延时子程序10ms
        jnb     p1.1,sen2
        lcall   fangdao         ;p1.1为‘1’盗警
        mov     r4,#150
        lcall   zguaji          ;20S后再检测一次
        ljmp    senback
sen2:   jnb     p1.2,sen3
        lcall   sen_del         ;调防误报延时子程序10ms
        jnb     p1.2,sen3
        lcall   meiqi           ;p1.1为‘1’煤气警
        mov     r4,#150
        lcall   zguaji          ;20S后再检测一次
        ljmp    senback
sen3:   jnb     p1.3,senback
        lcall   sen_del         ;调防误报延时子程序10ms
        jnb     p1.3,senback
        lcall   other1
        mov     r4,#150
        lcall   zguaji          ;20S后再检测一次
senback:ret
;============================
;防误报延时子程序10ms
;============================
sen_del:mov     r7,#40
sen_dl1:mov     r6,#250
sen_dl0:djnz    r6,sen_dl0
        djnz    r7,sen_dl1
        ret
;============================
;拨号延时子程序200ms(待用)
;============================
dal_del:mov     R5,#10
dal_dl2:mov     r7,#200
dal_dl1:mov     r6,#100
dal_dl0:djnz    r6,sen_dl0
        djnz    r7,sen_dl1
        djnz    r5,dal_dl2
        ret
;============================
zguaji: nop
zgjlop: lcall   dal_del
        djnz    r4,zgjlop
        ret

;============================
;各类报警处理子程序
;============================

yanwu:  lcall   yw30h           ;送号码到30h--3ah单元(11位)
        mov     r0,#30h         ;电话号码存储单元起始地址
        mov     r1,#11          ;total11bit
        lcall   dail            ;调用拨号子程序
        ;mov     r4,#130
        ;lcall   zguaji          ;拨号后13秒延时
        lcall   ring
        mov     r0,#3bh         ;送警类识别码
        mov     r1,#1
        lcall   dail1
        mov     r4,#50
        lcall   zguaji          ;再延时5秒后挂机
        clr     switch          ;完毕挂机
        ret
;---------------------
fangdao:nop
        lcall   yw30h           ;送号码到30h--3ah单元(11位)
        mov     r0,#30h         ;电话号码存储单元起始地址
        mov     r1,#11          ;total11bit
        lcall   dail            ;调用拨号子程序
        mov     r4,#130
        lcall   zguaji          ;拨号后13秒延时
        mov     r0,#3ch         ;送警类识别码
        mov     r1,#1
        lcall   dail1
        mov     r4,#50
        lcall   zguaji          ;再延时5秒后挂机
        clr     switch          ;完毕挂机
        ret

meiqi:  nop
        lcall   yw30h           ;送号码到30h--3ah单元(11位)
        mov     r0,#30h         ;电话号码存储单元起始地址
        mov     r1,#11          ;total11bit
        lcall   dail            ;调用拨号子程序
        ;mov     r4,#130
        ;lcall   zguaji          ;拨号后13秒延时
        lcall   ring
        mov     r0,#3dh         ;送警类识别码
        mov     r1,#1
        lcall   dail1

        mov     r4,#50
        lcall   zguaji          ;再延时5秒后挂机
        clr     switch          ;完毕挂机
        ret

other1: nop
        lcall   yw30h           ;送号码到30h--3ah单元(11位)
        mov     r0,#30h         ;电话号码存储单元起始地址
        mov     r1,#11          ;total11bit
        lcall   dail            ;调用拨号子程序
        mov     r4,#130
        lcall   zguaji          ;拨号后13秒延时
        mov     r0,#3eh         ;送警类识别码
        mov     r1,#1
        lcall   dail1
        mov     r4,#50
        lcall   zguaji          ;再延时5秒后挂机
        clr     switch          ;完毕挂机
        ret
;===================================
;拨号子程序
;发送寄存器,接收寄存器地址:0000H
;控制寄存器、状态寄存器地址:0100H
;input:r0 电话号码存储单元起始地址
;      r1 电话号码位数
;===================================
dail:   push    acc
        setb    switch          ;接通电话线高电平有效
        mov     r4,#50
        lcall   zguaji          ;摘机后1秒拨号
        mov     dptr,#0100h     ;发送寄存器地址送dptr
        mov     a,#0dh          ;写8888 CRA
        movx    @dptr,a
        mov     a,#02h
        movx    @dptr,a         ;写8888 CRB
dailop: mov     dptr,#0000h
        mov     a,@r0
        movx    @dptr,a
        mov     dptr,#0100h
dailop1:movx    a,@dptr         ;读状态寄存器
        jnb     acc.1,dailop1
        lcall   dal_del
        lcall   dal_del
        inc     r0
        djnz    r1,dailop       ;拨号完毕?
        pop     acc
        ret
;============================
dail1:  push    acc
        mov     dptr,#0000h
        mov     a,@r0
        movx    @dptr,a
        mov     dptr,#0100h
dailopa:movx    a,@dptr         ;读状态寄存器
        jnb     acc.1,dailopa
        lcall   dal_del
        lcall   dal_del
        inc     r0
        djnz    r1,dail1         ;拨号完毕?
        pop     acc
        ret
;============================
;第一个号码
;============================
yw30h:  mov     30h,#1
        mov     31h,#3
        mov     32h,#6
        mov     33h,#5
        mov     34h,#8
        mov     35h,#0ah
        mov     36h,#6
        mov     37h,#4
        mov     38h,#3
        mov     39h,#5
        mov     3ah,#6
        ret
ring:   mov     r7,#10
        mov     r6,#60
rloop:  cpl     p1.4
        lcall   rg_del1
        djnz    r7,rloop
        clr     p1.4
        lcall   rg_del2
        djnz    r6,rloop
        ret
rg_del1:mov     4fh, #2
rglop1: mov     4eh,#0ffh
rglop2: djnz    4eh,rglop2
        djnz    4fh,rglop1
        ret
rg_del2:mov     4dh, #20
rglop11:mov     4ch,#0ffh
rglop22:djnz    4ch,rglop22
        djnz    4dh,rglop11
        ret
        end


⌨️ 快捷键说明

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