?? 參考例子_收發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 + -