mov 10H,#6
mov 11H,#10
mov 12H,#5
lcall send_MT ;发送OK了,可以打公司的分机
here: ;lcall rece_MT ;收不到DTMF
ajmp here
INI_MT8880CE:
mov a,#07H ;0111
mov MTport,a ;读 XXXX
clr a2
mov a,#06H ;0110
mov MTport,a ;写CRA
clr a2
mov MTport,a
clr a2
mov a,#86H ;1000 0110
mov MTport,a ;使能CRB
clr a2
mov a,#06H ;0000 0110
mov MTport,a ;写CRB 0000
clr a2
mov a,#07H
mov MTport,a ;读状态标志,清除标志位
clr a2
ret
send_MT:
MOV R0,#10H ;发送数据缓冲首地址
MOV R1,#3
MOV A,#96H ; 写 8880CRA,使能B,DTMF
MOV MTport,A
clr a2
MOV A,#06H ;BURST模式,允许双音频
MOV MTport,A ; 写 8880CRB,8880 模式 2 为 TONE,DTMF,BURST
clr a2
LOOP2: MOV A,@R0
SWAP a ;数据换到高位
ORL A,#0FH ;XXXX 1111 屏低4位,有1出1
ANL A,#0F4H ;XXXX 0100 有0出0 写发送寄存器
MOV MTport,A ; 发送数据
clr a2
; MOV A,#0FFH
; MOV MTport,A ;输出1111 1111准备读状态字
LOOP3: mov MTport,#0F7H
clr a2
MOV A,MTport ; 读 8880 状态寄存器3
JNB ACC.5,LOOP3
INC R0
DJNZ R1,LOOP2
ret
;=================================
;接收子程式
;dtmf模式,接收信号,不允许发送
;=================================
rece_MT:
mov r1,#0
MOV R0,#10H ;接收到数据缓冲首地址
mov MTport,#0c6H ;out,DTMF,使能CRB
clr a2
mov MTport,#06H ; BURST 普通双音频
clr a2
LOOP1: MOV A,#0FFH
MOV MTport,A ;输出1111 1111,准备读取数据
mov MTport,#07H ;准备读状态
clr a2
MOV A,MTport ; 读 8880 状态寄存器
JNB ACC.6,LOOP1 ;判收满位,是否为1
mov MTport,#0F5H ;读收到的数据
clr a2
MOV A,MTport ; 读 8880 接收数据寄存器
ANL A,#0F0H ; 屏蔽低四位,非MT收到的数据
SWAP a ;高位数据移到低位
MOV @R0,A ;收到后输出LCM显示
cpl p3.7
INC R0
INC R1
CJNE R1,#07H,LOOP1
ret
;****************************************
;DELAY子程式,使用到R6,R7,24M一机器周期0.5us,DJNZ 2周期
;延时时间约为R6*R7*2*0.5us=0.005秒
;****************************************
DELAY1: ;24M时0.05秒
MOV R6,#200
DELAY2: MOV R7,#255
DJNZ R7,$
DJNZ R6,DELAY2
DELAY: ;24M时0.005秒
MOV R6,#20
DELAY3: MOV R7,#248
DJNZ R7,$
DJNZ R6,DELAY3
RET
;=====================================
;0.2S
;
;=====================================
DELAY0:
lcall DELAY1
lcall DELAY1
lcall DELAY1
lcall DELAY1
ret
end
帮我看下接收时那里出错了,如有中文资料发一份中文的资料给我吖,
搞好了,以上程式没问题,只是IC坏了.现在收发都OK了