📄 accesscontrol-51.asm
字号:
;*************************************************************
AR0 BIT P0.0 ;MT8880
AR1 BIT P0.1 ;MT8880
AR2 BIT P0.2 ;MT8880
AR3 BIT P0.3 ;MT8880
CL BIT P0.4 ;MT8880的CALL
RW BIT P0.5 ;MT8880的RW
RSI BIT P0.6 ;MT8880的RSI
CP BIT P0.7 ;MT8880的CP
MT8880 EQU P0 ;MT8880的控制脚
YX EQU P1 ;MT8816行列地址:0\Y2\Y1\Y0_X3\X2\X1\X0
REST8816 BIT P1.7 ;MT8816复位
CLK BIT P2.0 ;HD7279的CLK
DAT BIT P2.1 ;HD7279的DATA
KEY BIT P2.2 ;HD7279的KEY
; LED2 BIT P2.3 ;未用
; LED1 BIT P2.4 ;未用
BELL BIT P2.5 ;提示音
st BIT P2.6 ;MT8816锁存线
DI BIT P2.7 ;MT8816开关线 =1开,=0关
PTT_S BIT P3.2 ;手柄的PTT
PTT_D BIT P3.3 ;电台的PTT
RV BIT P3.4 ;振铃检测:0振铃
LRC BIT P3.5 ;摘挂机控制:0挂机\1摘机
CD BIT P3.6 ;MSM7512的载波检测
MOD1 BIT P3.7 ;MSM7512的收发控制=0:;发=1:收
CKQSBZ BIT 20H.0 ;串口收到第1位后=1
CKJSBZ BIT 20H.1 ;串口收到结束位后=1
SYCX BIT 20H.2 ;双音出现否?=0未出现;=1出现
gh BIT 20H.3 ;改号键按下后=1,收到第1个键后=0
CLQYD BIT 20H.4 ;20S内收到信息处理器的应答=1 (02H Y 03H)
ZLBZ BIT 20H.5 ;振铃标志:533Hz=1、666Hz=0
DATA_IN DATA 21H ;键盘值
DATA_OUT DATA 22H ;HD7279用
CKQS EQU 30H ;串口收起始地址
DFHM EQU 40H ;对方电话号码起始、最长到4FH
BJHM EQU 50H ;本机电话号码起始、最长到5FH
BJDZ EQU 60H ;本机地址起始、最长到67H
WSZC EQU 74H ;电话位数暂存
ZQH1 EQU 75H ;灾情种类暂存
ZQH2 EQU 76H ;灾情程度暂存
T0HZC EQU 77H ;T0高位暂存
T0LZC EQU 78H ;T0低位暂存
T0MS EQU 79H ;T0模式:0_1K单音;1_串口收到第1个字节启动定时;2_拨号后等待回答
GNJZC EQU 7AH ;功能键的值暂存
BIT_COUNT DATA 7BH ;HD7279发送、接收控制每BIT的8位
TIMER4 EQU 7CH
TIMER5 EQU 7DH
TIMER6 EQU 7EH
TIMER7 EQU 7FH
;定义与IAP有关的特殊功能寄存器
isp_data equ 0e2h
isp_addrh equ 0e3h
isp_addrl equ 0e4h
isp_cmd equ 0e5h
isp_trig equ 0e6h
isp_contr equ 0e7h
;flash操作等待时间
;enable_isp equ 83h ;<5M
enable_isp equ 82h ;<10M
;enable_isp equ 81h ;<20M
;enable_isp equ 80h ;>20M
;*************************************************************
ORG 0000H
AJMP START
ORG 0003H
AJMP BINGKOU
ORG 000BH
AJMP ZDT0
ORG 0023H
AJMP PCTOMCU
ORG 100H
;**********;初始化************************************************
START: MOV TMOD,#21H ;设置定时器1为方式2(做波特率发生器,晶振7.3728M)
;设置定时器0为方式1(做延时用,晶振7.3728M)
MOV TH1,#0F0H ;T1初始值设置(FC:4800 BIT/S)F0:1200 BIT/S
MOV TL1,#0F0H
MOV TH0,#0FEH ;T0初始值设置(0.5ms)
MOV TL0,#0CCH
MOV T0HZC,TH0 ;T0初始值暂存
MOV T0LZC,TL0
SETB EA ;CPU允许中断
SETB ES ;允许串口中断
SETB ET0 ;允许T0中断
MOV SCON,#50H ;设置串口为方式1(8个数据位)
SETB TR1 ;启动定时器1
CLR ST ;MT8816锁存线
;*************************************************************
MOV 20H,#00H ;标志位全部清零
MOV DATA_OUT,#10100100B ;HD7279发复位指令
LCALL SEND
SETB REST8816 ;MT8816复位
LCALL D10MS
CLR REST8816
mov GNJZC,#0Ah ;功能键默认为无线状态
CLR LRC ;有线挂机状态
CLR PTT_D ;电台处于收状态
lcall dgb ;灯全灭
LCALL kgh ;开改号灯
lcall d100ms
lcall dgb ;灯全灭
LCALL kzj ;开转接灯
lcall d100ms
lcall dgb ;灯全灭
lcall kyx ;开有线灯
lcall d100ms
lcall dgb ;灯全灭
lcall kwx ;开无线灯
lcall d100ms
lcall kdy ;开电源灯
lcall ftsy ;自检完成发2个100ms提示音
lcall d100ms
lcall tftsy
lcall d100ms
lcall ftsy
lcall d100ms
lcall tftsy
;*******MT8880初始化******************************************************
MOV MT8880,#01111111B
SETB CP
CLR CP
MOV MT8880,#01010000B
SETB CP
CLR CP
MOV MT8880,#01010000B
SETB CP
CLR CP
MOV MT8880,#01011000B
SETB CP
CLR CP
MOV MT8880,#01010000B
SETB CP
CLR CP
MOV MT8880,#01111111B
SETB CP
CLR CP
SETB MOD1 ;///
lcall d100ms
mov yx,#38h ;电台的phone到7512的输入端:收数据用
lcall DK ;打开开关
mov yx,#7fh ;7512的RX到单片机:无线数据到单片机
lcall DK ;打开开关
mov yx,#02h ;手柄的mic接电台的mic //00
lcall DK ;打开开关
mov yx,#13h ;手柄的phone接电台的phone //11
lcall DK ;打开开关
MOV SBUF,#"("
JNB TI,$
CLR TI
mov dph,#20h ;调出第1扇区存的对方电话号码
mov r0,#0FFh
START0A:INC R0
mov dpl,r0
lcall byte_read
CJNE A,#0FFH,START0B
MOV SBUF,#")"
JNB TI,$
CLR TI
MOV SBUF,#"("
JNB TI,$
CLR TI
AJMP START0C
START0B:MOV SBUF,A
JNB TI,$
CLR TI
AJMP START0A
START0C:mov dph,#22h ;调出第2扇区存的本机电话号码
mov r0,#0FFh
START0D:INC R0
mov dpl,r0
lcall byte_read
CJNE A,#0FFH,START0E
MOV SBUF,#")"
JNB TI,$
CLR TI
MOV SBUF,#"("
JNB TI,$
CLR TI
AJMP START0F
START0E: MOV SBUF,A
JNB TI,$
CLR TI
AJMP START0D
START0F:mov dph,#24h ;调出第3扇区存的本机地址
mov r0,#0FFh
START0G:INC R0
mov dpl,r0
lcall byte_read
CJNE A,#0FFH,START0H
MOV SBUF,#")"
JNB TI,$
CLR TI
AJMP START1
START0H:MOV SBUF,A
JNB TI,$
CLR TI
AJMP START0G
;;;;;;;;主程序循环区域;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START1: JNB KEY,AJ0 ;检测是否有键按下
AJMP PTT0 ;去手柄PTT是否按下?
AJ0: MOV DATA_OUT,#15H ;有键按下,发送读键盘指令
lcall SEND
lcall RECEIVE
MOV A,DATA_IN
lcall FTSY ;发提示音:BELL脚输出作为提示音
JNB KEY,$
lcall TFTSY ;停发提示音
;按无线键
cjne a,#0AH,AJ1
mov GNJZC,a ;功能键的值暂存
AJ0A: lcall DGB ;灯全灭
lcall kwx ;无线灯亮
SETB REST8816 ;复位MT8816
LCALL D10MS
CLR REST8816
SETB MOD1 ;///
lcall d100ms
mov yx,#38h ;电台的phone到7512的输入端:收数据用
lcall DK ;打开开关
mov yx,#7fh ;7512的RX到单片机:无线数据到单片机
lcall DK ;打开开关
mov yx,#02h ;手柄的mic接电台的mic //00
lcall DK ;打开开关
mov yx,#13h ;手柄的phone接电台的phone //11
lcall DK ;打开开关
ajmp START1
;按有线键
AJ1: cjne a,#0BH,AJ2
SETB LRC ;摘机
mov GNJZC,a ;功能键的值暂存
lcall DGB ;灯全灭
lcall kyx ;有线灯亮
SETB REST8816 ;复位MT8816
LCALL D10MS
CLR REST8816
mov yx,#09h ;手柄的mic到放大器1的输入
lcall DK ;打开开关
mov yx,#4ah ;放大器1的输出到电话的mic
lcall DK ;打开开关
mov yx,#15h ;电话的pnoned到手柄的phone
lcall DK ;打开开关
;mov yx,#58h ;电话的phone到7512的输入端:收数据用
;lcall DK ;打开开关
;mov yx,#7fh ;7512的RX到单片机:无线数据到单片机
;lcall DK ;打开开关
ajmp START1
;按转接键
AJ2: cjne a,#0CH,AJ3
mov GNJZC,a ;功能键的值暂存
lcall dgb ;段关闭:除电源灯外全灭
lcall kzj ;转接灯亮
SETB REST8816 ;复位MT8816
LCALL D10MS
CLR REST8816
;clr LRC
mov yx,#51h ;电话的pnoned到手柄的phone:监听
lcall DK ;打开开关
;mov yx,#52h ;电话的pnone到电台的mic:发信号
;lcall DK ;打开开关
;mov yx,#43h ;电台的phone到电话的mic
;lcall DK ;打开开关
mov yx,#58h ;电话的phone到7512的输入端:收数据用
lcall DK ;打开开关
mov yx,#7fh ;7512的RX到单片机:无线数据到单片机
lcall DK ;打开开关
setb mod1
;mov yx,#02h ;手柄的mic接电台的mic //00
;lcall dk ;关断开关
;mov yx,#13h ;手柄的phone接电台的phone //11
;lcall dk ;关断开关
ajmp START1
;按挂机键
AJ3: cjne a,#0DH,AJ4
AJ3a: clr lrc ;挂机
mov GNJZC,#0AH ;功能键默认为无线
mov yx,#02h ;手柄的mic接电台的mic //00
lcall gd ;关断开关
mov yx,#13h ;手柄的phone接电台的phone //11
lcall gd ;关断开关
AJMP AJ0A ;到无线按键
;按灾情键(呼叫控制器中键值=0CH)
AJ4: cjne a,#0EH,AJ5
lcall dgb ;段关闭:除电源灯外全灭
lcall kzq ;灾情灯亮
mov GNJZC,a ;功能键的值暂存
mov r6,#2 ;R6存灾情的位数
ajmp START1
;按改号键
AJ5: cjne a,#0FH,AJ6
lcall dgb ;段关闭:除电源灯外全灭
lcall kgh ;改号灯亮
mov GNJZC,a ;功能键的值暂存
setb gh ;改号键按下后=1,收到第1个键后=0
ajmp START1
;按的0~9键
AJ6: mov b,a ;将键盘的值暂存便于发双音是判断0要发0A
mov a,GNJZC
cjne a,#0BH,AJ8 ;是否是在有线摘机状态下按的0~9键(拨号)
mov yx,#67h ;tSTART0H880到7512的输入
lcall DK ;打开开关
mov yx,#48h ;7512的输出到电话的mic
lcall DK ;打开开关
LCALL CRAB ;发双音
mov a,b ;取回键盘值
ANL A,#0FH
cjne a,#00h,AJ7
MOV A,#0AH ;键盘值=0时发0A
AJ7: ORL A,#10H ;发数字低4位决定
MOV MT8880,A
SETB CP
CLR CP
LCALL FSY ;发双音
LCALL TFSY ;停发双音
mov yx,#67h ;断开tSTART0H880到7512的输入
lcall GD
mov yx,#48h ;断开7512的输出到电话的mic
lcall GD
ajmp START1
AJ8: cjne a,#0FH,AJ14 ;是否是在改号状态下按的0~9键(改号)
jnb gh,AJ13 ;是否是按了改号键后的第1个键:是则要檫除相应扇区
MOV A,B ;取回该键值
cjne a,#1,AJ10 ;是否是修改对方电话号码?
mov dph,#20h ;第1扇区存对方电话号码
mov dpl,#00h
AJ9: mov r0,#00h ;从本扇区的00H开始存
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -