📄 参考例子_收发asm-2.txt
字号:
主程序中有:
LCALL IC_MT8880_RST
;----------------------------------------------------------------
--
FORINT0: ;摘机。
MOV A,#01H ;摘机鸣叫一声
LCALL BEEP_ACC ;鸣叫次数在ACC中。
LCALL SELECT_SET
LCALL DELAY1S
FORINT0_1:
LCALL IC_MT8880_REC;结果这段程序有问题,请见相应部分。
LCALL RING_ACC ;将DTMF数据通过鸣叫次数的方法报告出来,
;实际没有按下按键也鸣叫十多次。
LCALL DELAY5S
LJMP FORINT0_1 ;正在测试MY8880,所以做了个循环。
RETI
;----------------------------------------------------------------
;---------IC_MT8880_BEGIN----------------------------------------
;IC_MT8880的收发程序(8051系列)
; DO-D3=P0.0-P0.3(数据总线)
IC_MT8880_WR BIT P0.4
IC_MT8880_CS BIT P0.5
IC_MT8880_RS BIT P0.6
IC_MT8880_CP BIT P0.7
IC_MT8880_DATA EQU P0
;----------------写数据子程序-----------------------
IC_MT8880_W:
ORL A,#0F0H
MOV IC_MT8880_DATA,A
NOP
CLR IC_MT8880_CS
CLR IC_MT8880_WR
CLR IC_MT8880_CP
NOP
SETB IC_MT8880_CP
NOP
SETB IC_MT8880_WR
NOP
SETB IC_MT8880_CS
RET
;------------------读数据子程序----------------------
IC_MT8880_R:
CLR IC_MT8880_CS
SETB IC_MT8880_WR
CLR IC_MT8880_CP
NOP
SETB IC_MT8880_CP
NOP
MOV A,IC_MT8880_DATA
CLR IC_MT8880_WR
NOP
SETB IC_MT8880_CS
ANL A,#0FH
RET
;----------------读状态寄存器子程序-------------------------
IC_MT8880_RC:
SETB IC_MT8880_RS
LCALL IC_MT8880_R
RET
;---------------读接收数据寄存器子程序------------------------
IC_MT8880_RD:
CLR IC_MT8880_RS
LCALL IC_MT8880_R
RET
;---------------写数据寄存器子程序------------------------
IC_MT8880_WD:
CLR IC_MT8880_RS
LCALL IC_MT8880_W
RET
;--------------写控制寄存器子程序-------------------------
IC_MT8880_WC:
SETB IC_MT8880_RS
LCALL IC_MT8880_W
RET
;-------------------IC_MT8880初始化子程序----------------------------
IC_MT8880_RST:
MOV A,#00H
LCALL IC_MT8880_WC ;写8880CRA
LCALL IC_MT8880_WC ;写8880CRA
MOV A,#08H
LCALL IC_MT8880_WC ;写8880CRA
MOV A,#00H
LCALL IC_MT8880_WC ;写8880CRB
MOV A,#04H
LCALL IC_MT8880_WC ;写8880CRA,至8880模式 1 为 DTMF,IRQ
RET
;----------------收码程序-------------------
IC_MT8880_REC:
IC_MT8880_REC_1:
MOV A,#0FFH
;MOV IC_MT8880_DATA,A;???这句加了,哪怕我没按下按键,也始终说我收到
;了,没加就循环死机了
LCALL IC_MT8880_RC ;读 8880 状态寄存器
JNB ACC.3,IC_MT8880_REC_1 ;===ACC.X都不行=========这儿问题特大!!
LCALL IC_MT8880_RD ;读 8880 接收数据寄存器
RET
;----------------发码程序-------------------
IC_MT8880_SEN: ;这个程序还没有开始检查。
PUSH ACC
MOV A,#0DH
LCALL IC_MT8880_WC ;写8880CRA
MOV A,#02H
LCALL IC_MT8880_WC ;写8880CRB,8880 模式2为TONE,DTMF,IRQ,BURST
POP ACC ;SEND DATA!!!!
LCALL IC_MT8880_WD ;发送数据
IC_MT8880_SEN_2:
MOV A,#0FFH
LCALL IC_MT8880_RC ;读 8880 状态寄存器
JNB ACC.1,IC_MT8880_SEN_2
RET
;---------IC_MT8880_END-----------------------------------------------
补充:
;************************
;延时程序 600MS 随便延时,有一定长度就行
DL1:MOV R3,#0FFH
DL12:MOV R4,#0FFH
DL:NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R4,DL
DJNZ R3,DL12
RET
;*************************
;播号程序
BH:CLR RSO
CLR LED
MOV A,#08H
MOV P1,A
SETB CLK
ACALL DL1
ACALL DL1
ACALL DL1
CLR CLK
ACALL DL1
ACALL DL1
ACALL DL1
SETB RSO
SETB RW
MOV A,#6FH
MOV P1,A
SETB CLK
ACALL DL1
LOOP0: MOV A,P1
JNB ACC.1,LOOP0
CLR CLK
ACALL DL1
SETB LED
ACALL DL1
ACALL DL1
ACALL DL1 ;播号码#8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -