mt8888 - 8051

15
Giao tiếp MT888 và 8051 1/15 Trần Thiện Nhân MT8888 VÀ 8051 1 Giới thiệu MT8888 Để tạo giao diện giao tiếp với mạng điện thoại, Mitel giới thiệu đến chúng ta một dòng các vi điều khiển: MT8880, MT8888, MT8889... Các vi điều khiển này đều có khả năng thu và phát tín hiệu DTMF (Dual Tone) cùng các khả năng khác như lọc tín hiệu xử lí cuộc gọi (Call progress Filter), phát đơn tone (Single Tone). Trong đó MT8888 là IC được thiết kế riêng để giao tiếp với dòng vi điều khiển Intel mà ở đây là 8051. Nếu đọc kĩ datasheet của chúng bạn có thể nhận thấy có một vài khác biệt nhỏ giữa chúng. Mặc dù MT8880, MT8889 đều có thể giao tiếp với 8051, nhưng tôi khuyên bạn nên sử dụng MT8888. 1.1 Sơ đồ chân MT8888 Hình 1.1: Sơ đồ chân linh kiện MT8888C

Upload: api-3696281

Post on 07-Jun-2015

1.424 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: MT8888 - 8051

Giao tiếp MT888 và 8051 1/12 Trần Thiện Nhân

MT8888 VÀ 8051

1 Giới thiệu MT8888Để tạo giao diện giao tiếp với mạng điện thoại, Mitel giới thiệu đến chúng ta một dòng

các vi điều khiển: MT8880, MT8888, MT8889... Các vi điều khiển này đều có khả năng thu và phát tín hiệu DTMF (Dual Tone) cùng các khả năng khác như lọc tín hiệu xử lí cuộc gọi (Call progress Filter), phát đơn tone (Single Tone). Trong đó MT8888 là IC được thiết kế riêng để giao tiếp với dòng vi điều khiển Intel mà ở đây là 8051. Nếu đọc kĩ datasheet của chúng bạn có thể nhận thấy có một vài khác biệt nhỏ giữa chúng. Mặc dù MT8880, MT8889 đều có thể giao tiếp với 8051, nhưng tôi khuyên bạn nên sử dụng MT8888.

1.1 Sơ đồ chân MT8888

Hình 1.1: Sơ đồ chân linh kiện MT8888C

Page 2: MT8888 - 8051

Giao tiếp MT888 và 8051 2/12 Trần Thiện Nhân

Chân Tên Chức năng Ghi chú1 IN+ Ngõ vào không đảo Đây là các chân của một

op_am làm nhiệm vụ khếch đại tính hiệu vào.

2 IN- Ngỏ vào đảo3 GS Gain Select

4 VRef

Reference Voltage output Luôn có giá trị là nửa điện áp nguồn nuôi (ở đây là 2.5V)

5 VSS GND

6 OSC1Chân vào của thạch anh yêu cầu nối vơi điện trở 4M7 xuống mass

Hai chân thạch anh dùng loại 3.579545 MHz

7 OSC2 Chân ra của thạch anh.

8 TONETone DTMF out put Đường phát tín hiệu

DTMF9 /WR Yêu cầu đọc dữ liệu từ thanh ghi Bốn chân này dùng để

điều khiển việc truy xuất dữ liệu của IC. Đặc biệt chú ý các chân này, đây là điểm khác biệt giữa các IC đã nói ở trên.

10 /CSChip Select, yêu cầu đặt ở mức thấp khi truy xuất dữ liệu của IC

11 RS0 Cho phép chọn thanh ghi truy xuất

12 /RD Yêu cầu ghi dữ liệu lên thanh ghi

13 IRQ/CPChân tạo ngắt Tạo ngắt ngoài cho vi điều

khiển.14-17 D0-D3 Đường dữ liệu 18 Est Early Steering ouput Không cần quan tâm19 St/Gt Steering input/ Guard Time output20 VCC Power Chân nguồn nối lên 5V

Bảng 1.1 Mô tả chân IC

1.2 Các thanh ghiMT8888 dùng 5 thanh ghi cho việc giao tiếp với vi điều khiển, chúng được chia thành

3 nhóm: thu phát dữ liệu (Transmit Data Register: chỉ ghi, Receive Data Register: chỉ đọc), điều khiển (Control Register A và B: chỉ ghi), trạng thái (Status Register: chỉ đọc).Cụ thể như sau:

Transmit Data Register: chứa mã của nhị phân của kí tự mà MT8888 sẽ phát, rõ ràng đây là thanh ghi chỉ ghi.

Receive Data Register: chứa mã nhị phân của kí tự vừa nhận được, bạn chỉ có thể đọc giá trị này. Chú ý mã này chỉ có ý nghĩa khi có dấu hiệu nhận được một kí tự (ngắt).

Control Register A và B: là hai thanh ghi dùng để định chế độ của MT8888, chúng là các thanh ghi chỉ ghi.

Status Register: đúng như tên của nó, thanh ghi này cho biết trạng thái của IC, đây là thanh ghi chỉ đọc.

Page 3: MT8888 - 8051

Giao tiếp MT888 và 8051 3/12 Trần Thiện Nhân

RSO /WR /RD Thanh ghi0 0 1 Ghi lên Transmit Data

Register0 1 0 Đọc từ Receive Data

Register1 0 1 Ghi lên Control

Register1 1 0 Đọc từ Status

RegisterBảng 1.2 Chọn thanh ghi

Bit Tên Chức năngb3 RSEL 0: Lần ghi kế tiếp được thực hiện lên thanh ghi CRA

1: Lần ghi kế tiếp được thực hiện lên thanh ghi CRBb2 IRQ 0: Không tạo ngắt.

1: Cho phép tạo ngắt trên chân 13.Nếu chọn chế độ DTMF thí ngắt được tạo khi nhận được tín hiệu DTMF hợp lệ hoặc đã phát xong tín hiệu DTMF.Lưu ý: bit này dùng kết hợp với b1 của CRA

b1 CP-/DTMF

Dùng kết hợp với b3 của CRA.0: chọn chế độ lọc tín hiệu xử lí cuộc gọi.1: chọn chế độ DTMF.Lưu ý: ở chế độ CP không thu được DTMF và ngược lại.

b0 TOUT 0: ngừng phát tone1: phát toneLưu ý: bit này có giá trị trong tất cả các chế độ.

Bảng 1.3 Thanh ghi điều khiển CRA

Page 4: MT8888 - 8051

Giao tiếp MT888 và 8051 4/12 Trần Thiện Nhân

Bảng 1.4 Thanh ghi điều khiển CRB

Bit Tên Bật Tắtb3 DELAYED STEERING Khi không nhận được tín

hiệu hợp lệNhận được tín hiệu hợp lệ

b2 RECEIVE DATA REGISTER FULL

Khi có dữ liệu hợp lệ trong thanh ghi nhận

Khi thanh ghi trạng thái được đọc

b1 TRANSMIT DATA REGISTER EMPTY (BURST MODE ONLY)

Khi đã sẵn sàng cho việc nhận kí tự mới.

Khi thanh ghi được đọc

b0 IRQ Đã có ngắt xảy ra b1 hoặc b2 được bật

Khi thanh trạng thái được đọc

Bảng 1.5 Thanh ghi trạng thái

2 Giao tiếp MT8888-8051

2.1 Giới thiệuQui trình đọc và ghi các thanh ghi của MT8888 được mô tả trong các hình 1.2 và 1.3.

Đối với qui trình đọc (hình 1.3) các tín hiệu /CS và RSO phải được đặt trước, dữ liệu sẽ được đọc từ thanh ghi MT8888 khi tín hiệu /RD được set xuống 0.

Sau khi quan sát hình 1.4, giản đồ thời gian lệnh MOVX của 8051, tôi đã nhận thấy sự tương đồng giữa hai giản đồ hình 1.3 và hình 1.4. Nếu ta nối ALE với /CS, một chân của P2 với RSO, /RD của 8051 với /RD của MT8888, bus dữ liệu với P0 khi đó ta có thể dùng MOVX để đọc với các thanh ghi của MT8888 mà không phải dùng thêm bất kì lệnh nào khác. Hình 1.5 là sơ đồ khối giao tiếp mà tôi đã thực hiện, trong đó A8 (P2.0) là chân được chọn để nối với RSO; A9 (P2.1), ALE và hai cổng logic tạo thành một tín hiệu tự động điều khiển chân /CS của MT8888, chân A9 được xem như là CS của MT8888, nó phải được set ở mức cao khi muốn chọn MT8888, bạn có thể bỏ đi hai cổng logic, nối trực tiếp chân ALE với MT8888 điều này đồng nghĩa với MT8888 luôn được chọn.

Bit Tên Chức năngb3 C-/R 1: Chọn cột

2: Chọn dòngLưu ý: bit này dùng kết hợp với b2 của CRB

b2 S-/D Dùng kết hợp với b3 của CRB0: Phát đa tone1: Phát đơn tone

b1 TEST 0: Không chọn 1: ChọnNếu được chọn tín hiệu trên chân 13 sẽ tương tự như tín hiệu DELAYED STERRING của Status Register.

b0 /BURST 0: Chế độ burst1: phát liên tụcTần số phát là 51+51, nếu ở chế độ DTMF.Tần số 102+102 nếu ở chế độ CP.

Page 5: MT8888 - 8051

Giao tiếp MT888 và 8051 5/12 Trần Thiện Nhân

Hình 1.2 Giản đồ thời gian ghi các thanh ghi MT8888

Hình 1.3 Giản đồ thời gian đọc các thanh ghi MT8888

Hình 1.4 Giản đồ thời gian lệnh MOVX của 8051

PCH DPH

PCL Opcode DPL External data in

ALE

/RD

/PSEN

Port 2

Port 0

Page 6: MT8888 - 8051

Giao tiếp MT888 và 8051 6/12 Trần Thiện Nhân

Với sơ đồ khối như trên MT8888 được xem như là bộ nhớ dữ liệu ngoài, với các ô nhớ được đọc bởi lệnh MOVX A,@DPTR và ghi bởi lệnh MOVX @DPTR,A có hai địa chỉ ô nhớ sau, (chỉ quan tâm byte địa chỉ cao).

Tên A9 A8 Đọc GhiSCReg 1 1 Status Register CRA, CRBDataReg 1 0 Received Data Register Transmit Data Register

Khai báo trong KeilC char xdata SCReg _at_ 0xffff ;char xdata DataReg _at_ 0xfeff ;

Truy xuất các thanh ghi trong KeilCchar temp;temp = SCReg ; // đọc giá thanh ghi trạng thái vào tempSCReg = 0 ; // ghi lên thanh ghi điều khiển (CRA hoặc CRB) giá trị 0temp = DataReg ; // đọc giá trị từ thanh ghi Received Data Register vào tempDataReg = 0 ; // ghi lên thanh ghi Transmit Data Register giá trị 0

2.2 Chương trình mẫu viết trong KeilCCác biến dùng trong bài viết này được khai báo như sau

char bdata MT_Read;sbit TFinished = MT_Read^1;sbit DRecieved = MT_Read^2;bit ok;char idata Digit;

Quá trình lập trình cho MT8888 yêu cầu các bước sau

Bước 1: MT8888 yêu cầu phải được khởi động trước khi thu phát DTMF.

ALEA9A8

P0

/RD/WR

INT1

/CS

RSO

D0-D3

/RD/WRIRQ/CP

8051 MT8888

Hình 1.5 Sơ đồ khối giao tiếp 8051-MT8888

Page 7: MT8888 - 8051

Giao tiếp MT888 và 8051 7/12 Trần Thiện Nhân

Hàm khởi động MT8888 trong KeilC, nó phải được gọi trong vòng 100ms sau khi reset.

void initMT8888(void){

MT_Read = SCReg; // Read status Register, xóa tất cả các cờSCReg = 0; //Write to control Register ghi không cần biết thanh ghi nào

SCReg = 0; //Write to control Register ghi không cần biết thanh ghi nào, //lần ghi tiếp theo chắc chắn là thanh ghi CRA

SCReg = 8; //Write to CRASCReg = 0; //Write to CRBMT_Read = SCReg; // Read status Register, xóa tất cả các cờ

}

Bước 2: Cài đặt chế độ cho MT8888, trong bài viết này tôi trình bày chế độ Burst mode 50 + 50 và thu tín hiệu DTMF.

void setupMT8888(void){

SCReg = 13; //write to control A, 1101//chọn thanh ghi CRB cho lần ghi tiếp theo//cho phép ngắt trên chân 13 (ngắt 1)//chọn chế độ DTMF//không phát tone

SCReg = 0; //write to control B, 0000//không quan tâm//chọn chế độ phát đa tone//không chọn chế độ TEST//chọn chế độ phát Burst

}

Bước 3: thu hoặc phát tone DTMF.

Qui trình phát tone DTMF.

Page 8: MT8888 - 8051

Giao tiếp MT888 và 8051 8/12 Trần Thiện Nhân

Vì chúng ta đang ở chế độ Burst nên sau khi phát bạn phải đợi cho đến khi MT8888 báo là đã phát xong và đã sẵn sàng nhận kí tự khác thì việc phát mới xem là đã kết thúc.

void TransmitDTMF(char digit){

EX1=0; // cấm ngắt 1EA=0;DataReg = digit; // write digit to transmit datado{

MT_Read = SCReg;}while (TFinished==0);

}

Quá trình thu tone DTMF:Trước tiên dùng ngắt 1 để đẩy kí tự nhận được vào biến digit và báo là có kí tự vừa

nhận

Begin

End

Ghi dữ liệu digit lên thanh ghi phát

Đọc thanh ghi trạng thái vào MT_Read

TFinished==0Y

N

Page 9: MT8888 - 8051

Giao tiếp MT888 và 8051 9/12 Trần Thiện Nhân

Hàm xử lí ngắt như sauvoid my_int1(void) interrupt 2{

EA=0;MT_Read = SCReg;if(DRecieved==1){

ok=1;Digit = DataReg;

}EA=1;

}

Hàm nhận một kí tự sẽ như sauchar ReceiveDTMF(void){

EA=1;while(ok==0){;}Digit &=0x0f; // bỏ nible cao vì chỉ có nible thấp của digit là có ý nghĩareturn Digit;

}

--------------------------------------------------------------------------------------------------------Xin hãy xem thêm datasheet để biết chi tiết.

Ngắt 1

End Ngắt 1

Cấm tất cả các ngắt

Đọc thanh ghi trạng thái vào MT_Read

DRecieved ==1N

Y

Ok=0;Đọc giá trị thanh ghi nhận vào digit

Cho phép ngắt

Page 10: MT8888 - 8051

D TM F _ I N

C 4

1 n

C 6

1 u

R 1 1 1 0 0 k

C 2 0 . 4 7 u

GND

C 3 1 u

-

+ U 1 A

TL 0 8 4

3

21

R 1 3

1 0 k

T1

1 : 1

1 3

2 4

D 1Z 4 . 3 V

12

-

+

U 1 D

TL 0 8 4

1 2

1 31 4

May dien thoai ban

D TM F _ O U T

DUONG DAY DIEN THOAI

R 6 2 2 k

R 9 5 0 0 k

C 5

1 0 u

TI P

D 2Z 4 . 3 V

12

R I N G

R 8 1 0 0 k

-

+

U 1 B

TL 0 8 4

5

67

GND

R 71 0 k

GND

R 41 k

GND

R 5 2 2 k

R 3 1 k

Giao tiếp MT888 và 8051 10/12 Trần Thiện Nhân

Đây là sơ đồ test, mạch này tôi tìm được trên mạng.Để thu tone , bạn chỉ cần nhấc máy điện thoại lên, và bấm số, chú ý tránh bấm số

đúng, vì khi đó tổng đài sẽ thực hiện kết nối điện thoại của bạn với một hộ nào đó. Việc ấn số liên tiếp 1,2,3,4,5… thì không có vấn đề gì .

Để phát tone, bạn cũng nhấc máy điện thoại lên, thử dùng chương trình mình vừa viết xong, quay số tự động đến nhà người quen, bạn mình chẳng hạn, sau đó, bạn dùng ống nghe điện thoại là có thể nói chuyện bình thuờng.

Chương trình tôi đã viết như sau

#include <AT89X52.h>//MT8888 Data Reg char xdata DataReg _at_ 0xfeff;//Control Reg Read Status Reg//Read on the Control Reg and write to the Status regchar xdata SCReg _at_ 0xffff;//Data read from MT8888char bdata MT_Read;sbit TFinished = MT_Read^1;sbit DRecieved = MT_Read^2;bit ok;char idata Digit;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void delayms(unsigned int time){

while(time--){

unsigned char temp=125;while(temp--);

}}

//////////////////////////////////////////////////////////////////// interrupts//////////////////////////////////////////////////////////////////

Page 11: MT8888 - 8051

Giao tiếp MT888 và 8051 11/12 Trần Thiện Nhân

void my_int1(void) interrupt 2{

EA=0;MT_Read = SCReg;if(DRecieved==1){

ok=1;Digit = DataReg;

}EA=1;

}void init(void){

//initalize interruptsIT1=1;EX1=0; //enable interrupt 1EA=0; //enable interrupts

}

void initMT8888(void){

MT_Read = SCReg;SCReg = 0;SCReg = 0;SCReg = 8;SCReg = 0; MT_Read = SCReg;

}void setupMT8888(void){

SCReg = 13; //write to control A SCReg = 0; //write to control B

}

void TransmitDTMF(char digit){

EX1=0;EA=0;DataReg = digit;// write digit to transmit datado{

MT_Read = SCReg;}while (TFinished==0);

}

char ReceiveDTMF(void){

EA=1;

Page 12: MT8888 - 8051

Giao tiếp MT888 và 8051 12/12 Trần Thiện Nhân

while(ok==0){;}Digit &=0x0f; // b? nible cao vì ch? có nible th?p c?a digit là có ý ngh?areturn Digit;

}

void main(void){

char digit;init();initMT8888();setupMT8888();// Goi cho ban be// o day minh dung tong dai noi boTransmitDTMF(12);delayms(1500);TransmitDTMF(3);delayms(1500);///////////////////// nhan phim nhanwhile(1){

digit = ReceiveDTMF();switch (digit){

case 1:// lam gi ban muon// sang mot vai led chang hanbreak;

}}

}

Tôi đã giải thích kĩ các hàm dùng trong chương trình ở các phần trên. Mọi thắc mắc xin gởi theo địa chỉ [email protected].

Chúc các bạn thành công.