📄 mt8888a.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 + -