1. Trang chủ
  2. » Cao đẳng - Đại học

Tài liệu MT8888 và 8051

12 445 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 217,09 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Reference Voltage output Luôn có giá trị là nửa điện áp nguồn nuôi ở đây là 2.5V nối vơi điện trở 4M7 xuống mass Hai chân thạch anh dùng loại 3.579545 MHz 9 /WR Yêu cầu đọc dữ liệu từ th

Trang 1

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

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

Trang 2

Chân Tên Chức năng Ghi chú

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

Reference Voltage output Luôn có giá trị là nửa điện

áp nguồn nuôi (ở đây là 2.5V)

nối vơi điện trở 4M7 xuống mass

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

9 /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 /CS Chip 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

14-17 D0-D3 Đường dữ liệu

19 St/Gt Steering input/ Guard Time output

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

1.2 Các thanh ghi

MT8888 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

Trang 3

RSO /WR /RD Thanh ghi

Register

Register

Register

Bảng 1.2 Chọn thanh ghi

b3 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 CRB b2 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

TMF 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 tone

1: phát tone Lư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

Trang 4

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

b3 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ệ

REGISTER FULL

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

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

REGISTER EMPTY

(BURST MODE

ONLY)

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

Khi thanh ghi được đọ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ệu

Qui 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

2: Chọn dòng Lư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 CRB

0: Phát đa tone 1: Phát đơn tone b1 TEST 0: Không chọn

1: Chọn Nế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ế độ burst

1: phát liên tục Tần số phát là 51+51, nếu ở chế độ DTMF

Tần số 102+102 nếu ở chế độ CP

Trang 5

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

Trang 6

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)

DataReg 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 KeilC

char temp;

temp = SCReg ; // đọc giá thanh ghi trạng thái vào temp

SCReg = 0 ; // ghi lên thanh ghi điều khiển (CRA hoặc CRB) giá trị 0

temp = DataReg ; // đọc giá trị từ thanh ghi Received Data Register vào temp DataReg = 0 ; // ghi lên thanh ghi Transmit Data Register giá trị 0

Cá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.

ALE A9 A8 P0 /RD /WR INT1

/CS RSO D0-D3 /RD /WR IRQ/CP

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

Trang 7

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ờ

//lần ghi tiếp theo chắc chắn là thanh ghi CRA

SCReg = 8; //Write to CRA

SCReg = 0; //Write to CRB

MT_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

Trang 8

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)

{

EA=0;

do

{

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==0 Y

N

Trang 9

Hàm xử lí ngắt như sau

void 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ư sau

char ReceiveDTMF(void)

{

EA=1;

while(ok==0){;}

Digit &=0x0f; // bỏ nible cao vì chỉ có nible thấp của digit là có ý nghĩa

return 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 ==1 N

Y

Ok=0;

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

Cho phép ngắt

Trang 10

D T M F _ I N

C 4

1 n

C 6

1 u

R 1 1 1 0 0 k

C 2 0 4 7 u

G N D

C 3 1 u

-+ U 1 A

T L 0 8 4

3

2 1

R 1 3

1 0 k

T 1

1 : 1

1 3

2 4

D 1

Z 4 3 V

-+

U 1 D

T L 0 8 4

1 2

1 3

1 4

M a y d i e n t h o a i b a n

D T M F _ O U T

D U O N G D A Y D I E N T H O A I

R 6 2 2 k

R 9 5 0 0 k

C 5

1 0 u

T I P

D 2

Z 4 3 V

R I N G

R 8 1 0 0 k

-+

U 1 B

T L 0 8 4

5 6 7

G N D

R 7

1 0 k

G N D

R 4

1 k

G N D

R 5 2 2 k

R 3 1 k

Đâ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 reg

char xdata SCReg _at_ 0xffff;

//Data read from MT8888

char 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 );

}

}

//////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////

Trang 11

EA=0;

MT_Read = SCReg;

if(DRecieved==1)

{

ok=1;

Digit = DataReg;

}

EA=1;

}

void init(void){

//initalize interrupts

IT1=1;

EA=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 data

do

{

MT_Read = SCReg;

}

while (TFinished==0);

}

char ReceiveDTMF(void)

{

EA=1;

Trang 12

Digit &=0x0f; // b? nible cao vì ch? có nible th?p c?a digit là có ý ngh?a

return Digit;

}

void main(void)

{

char digit;

init();

initMT8888();

setupMT8888();

// Goi cho ban be

// o day minh dung tong dai noi bo

TransmitDTMF(12);

delayms(1500);

TransmitDTMF(3);

delayms(1500);

///////////////////

// nhan phim nhan

while(1)

{

digit = ReceiveDTMF();

switch (digit) {

case 1:

// lam gi ban muon // sang mot vai led chang han break;

} }

}

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ỉ thiennhan8404@yahoo.com

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

Ngày đăng: 18/08/2014, 07:49

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Sơ đồ chân linh kiện MT8888C - Tài liệu MT8888 và 8051
Hình 1.1 Sơ đồ chân linh kiện MT8888C (Trang 1)
Bảng 1.1 Mô tả chân IC - Tài liệu MT8888 và 8051
Bảng 1.1 Mô tả chân IC (Trang 2)
Bảng 1.2 Chọn thanh ghi - Tài liệu MT8888 và 8051
Bảng 1.2 Chọn thanh ghi (Trang 3)
Bảng 1.4 Thanh ghi điều khiển CRB - Tài liệu MT8888 và 8051
Bảng 1.4 Thanh ghi điều khiển CRB (Trang 4)
Bảng 1.5 Thanh ghi trạng thái - Tài liệu MT8888 và 8051
Bảng 1.5 Thanh ghi trạng thái (Trang 4)
Hình 1.3 Giản đồ thời gian đọc các thanh ghi MT8888 - Tài liệu MT8888 và 8051
Hình 1.3 Giản đồ thời gian đọc các thanh ghi MT8888 (Trang 5)
Hình 1.5 Sơ đồ khối giao tiếp 8051-MT8888 - Tài liệu MT8888 và 8051
Hình 1.5 Sơ đồ khối giao tiếp 8051-MT8888 (Trang 6)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w