mình đang làm mạch đồ án tôt nghiệp. cần giao tiếp MT8880 với 89C51. đã làm khá nhiều mạch nhưng vẩn ko thể chạy.
So đồ mạch kêt nối như sau: (cũng đã làm y nhw datasheet nhung ko chạy)
và đây là chương trình:
chương trình phát tone: (phat so dien thoai 0976789201)
#include <c:\Rigel\Reads51\Include\sfr51.inc>
#include <c:\Rigel\Reads51\Include\Rc51regs.inc>
;=========================== p1.7 không dùng, mặc định cho nó là 1
CS BIT P1.6
ORG 000h
mov scon,#52h
mov tmod,#21h
lcall delay ; tao tre 1s truoc khi khoi tao MT8880
LCALL INIT ; ham khoi tao MT8880,
LCALL SET_UP ; Cài đặt chế độ hoạt động cho MT
MOV A,#10 ;phát số 0
LCALL Transmit_DTMF ; chương trình con phát số
LCALL DELAY_250ms ; goi chuong trinh con delay 250 mili giay
MOV A,#9 ; phát số 9
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#7
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#6
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#7
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#8
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#9
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#2
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#10 ;phát số 0
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#1
LCALL Transmit_DTMF
ljmp $
;khoi dong MT
INIT:
MOV P1,#11111111B ; mac dinh cho P1.7=1 , luc dau CS=1
MOV P1,#10111111B ; tich cuc,CS=0 ,doc thanh ghi trang thai
; ta da thuc hien xong buoc 1 trong datasheet
MOV P1,#11100000B ; chuan bi xuat du lieu ra thanh ghi dk
MOV P1,#10100000B ; tich cuc chip , CS=0
; ta da thuc hien xong buoc 2trong datasheet
MOV P1,#11100000B
MOV P1,#10100000B
; ta da thuc hien xong buoc 3trong datasheet
MOV P1,#11101000B
MOV P1,#10101000B
; ta da thuc hien xong buoc 4trong datasheet
MOV P1,#11100000B
MOV P1,#10100000B
; ta da thuc hien xong buoc 5trong datasheet
MOV P1,#11111111B
MOV P1,#10111111B
; ta da thuc hien xong buoc 6trong datasheet
RET
;thiết lập chế độ làm việc cho MT8880
SET_UP:
MOV P1,#11101101B
MOV P1,#10101101B ; b1) xuat 1101 ra thanh ghi dk CRA
MOV P1,#11100000B
MOV P1,#10100000B ; b2) xuat 0000 ra thanh ghi dk CRB
; Cac lenh tren dinh che do cho MT8880
RET
;================================================
;chuơng trình con phát số chúa trong nybble thấp của thanh chưa A
Transmit_DTMF:
; Ta phai doc thanh ghi trang thai , de biet digit truoc do da phat xong chua
MOV P1,#11111111B ; chuan bi doc thanh ghi trang thai
LOOP1:
CLR CS ; doc thanh ghi trang thai
mov c,p1.1 ; luu bit 1 cua thanh ghi trang thai vao C
SETB CS ; ngung doc thanh ghi trang thai
JNc LOOP1 ; cho bit1 cua thanh ghi status set len 1
; neu qua khoi loop1 , MT8880 san sang
; phat digit ke tiep
ANL A,#00001111B ; giu nybble thap
ORL A,#11000000B ; nybble cao la cac chan dk,nyble thap la
; digit can phat di
MOV P1,A ; chuan bi ghi digit ra thanh ghi data phat
CLR CS ; tich cuc CS
SETB CS ; ngung chon chip MT8880
RET
delay_250mS:
mov r2,#250
djnz r2,$
ret
;HAM DELAY 1s
DELAY:
mov r4,#100
lap100:
MOV TH0,#HIGH(-9126)
MOV TL0,#LOW(-9126)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
djnz r4,lap100
RET
END
chuong trinh thu tone (update sau)
Có ai làm MT8880 rôi chỉ giáo giúp vơi!
So đồ mạch kêt nối như sau: (cũng đã làm y nhw datasheet nhung ko chạy)
và đây là chương trình:
chương trình phát tone: (phat so dien thoai 0976789201)
#include <c:\Rigel\Reads51\Include\sfr51.inc>
#include <c:\Rigel\Reads51\Include\Rc51regs.inc>
;=========================== p1.7 không dùng, mặc định cho nó là 1
CS BIT P1.6
ORG 000h
mov scon,#52h
mov tmod,#21h
lcall delay ; tao tre 1s truoc khi khoi tao MT8880
LCALL INIT ; ham khoi tao MT8880,
LCALL SET_UP ; Cài đặt chế độ hoạt động cho MT
MOV A,#10 ;phát số 0
LCALL Transmit_DTMF ; chương trình con phát số
LCALL DELAY_250ms ; goi chuong trinh con delay 250 mili giay
MOV A,#9 ; phát số 9
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#7
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#6
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#7
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#8
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#9
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#2
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#10 ;phát số 0
LCALL Transmit_DTMF
LCALL DELAY_250ms
MOV A,#1
LCALL Transmit_DTMF
ljmp $
;khoi dong MT
INIT:
MOV P1,#11111111B ; mac dinh cho P1.7=1 , luc dau CS=1
MOV P1,#10111111B ; tich cuc,CS=0 ,doc thanh ghi trang thai
; ta da thuc hien xong buoc 1 trong datasheet
MOV P1,#11100000B ; chuan bi xuat du lieu ra thanh ghi dk
MOV P1,#10100000B ; tich cuc chip , CS=0
; ta da thuc hien xong buoc 2trong datasheet
MOV P1,#11100000B
MOV P1,#10100000B
; ta da thuc hien xong buoc 3trong datasheet
MOV P1,#11101000B
MOV P1,#10101000B
; ta da thuc hien xong buoc 4trong datasheet
MOV P1,#11100000B
MOV P1,#10100000B
; ta da thuc hien xong buoc 5trong datasheet
MOV P1,#11111111B
MOV P1,#10111111B
; ta da thuc hien xong buoc 6trong datasheet
RET
;thiết lập chế độ làm việc cho MT8880
SET_UP:
MOV P1,#11101101B
MOV P1,#10101101B ; b1) xuat 1101 ra thanh ghi dk CRA
MOV P1,#11100000B
MOV P1,#10100000B ; b2) xuat 0000 ra thanh ghi dk CRB
; Cac lenh tren dinh che do cho MT8880
RET
;================================================
;chuơng trình con phát số chúa trong nybble thấp của thanh chưa A
Transmit_DTMF:
; Ta phai doc thanh ghi trang thai , de biet digit truoc do da phat xong chua
MOV P1,#11111111B ; chuan bi doc thanh ghi trang thai
LOOP1:
CLR CS ; doc thanh ghi trang thai
mov c,p1.1 ; luu bit 1 cua thanh ghi trang thai vao C
SETB CS ; ngung doc thanh ghi trang thai
JNc LOOP1 ; cho bit1 cua thanh ghi status set len 1
; neu qua khoi loop1 , MT8880 san sang
; phat digit ke tiep
ANL A,#00001111B ; giu nybble thap
ORL A,#11000000B ; nybble cao la cac chan dk,nyble thap la
; digit can phat di
MOV P1,A ; chuan bi ghi digit ra thanh ghi data phat
CLR CS ; tich cuc CS
SETB CS ; ngung chon chip MT8880
RET
delay_250mS:
mov r2,#250
djnz r2,$
ret
;HAM DELAY 1s
DELAY:
mov r4,#100
lap100:
MOV TH0,#HIGH(-9126)
MOV TL0,#LOW(-9126)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
djnz r4,lap100
RET
END
chuong trinh thu tone (update sau)
Có ai làm MT8880 rôi chỉ giáo giúp vơi!
Comment