1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

THIẾT kế hệ THỐNG điều KHIỂN DÙNG vđk ATMEGA16 điều KHIỂN HOẠT ĐỘNG CHO

45 723 1

Đ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 45
Dung lượng 3,18 MB

Nội dung

+ Cấu trúc tổng quát VĐK Atmega16: - Hiệu xuất cao high performance , là loại vi điều khiển AVR 8 bit công suấtthấp - Cấu trúc lệnh đơn giản, thời gian thực thi lệnh như nhau thật ra l

Trang 1

BỘ CÔNG THƯƠNG TRƯỜNG CAO ĐẲNG CÔNG NGHIỆP HUẾ

KHOA ĐIỆN -

Trang 2

BỘ CÔNG THƯƠNG TRƯỜNG CAO ĐẲNG CÔNG NGHIỆP HUẾ

KHOA ĐIỆN -

Sinh viên thực hiện: Giáo viên hướng dẫn:

Lớp: 14CDDC11

Niên khoá: 2014 - 2017

Trang 3

TRƯỜNG CĐ CÔNG NGHIỆP HUẾ CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN ĐỘC LẬP - TỰ DO - HẠNH PHÚC

TỔ BỘ MÔN TRANG BỊ ĐIỆN * * * * * * * * *

NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

Họ và tên sinh viên : Lê Hữu MinhLớp : 14CDDC13

Ngành : Công nghệ kỹ thuật điện-điện tử

I Tên khóa luận: Thiết kế hệ thống điều khiển dùng VĐK Atmega16 điều khiển mộtkhâu chuyền băng tải vận chuyển sản phẩm

II Yêu cầu:

- Sản phẩm từ băng tải 1 dưới chạy đến tác động vào S1; lúc này piston A tiến: nângsản phẩm lên

- Khi piston A nâng hết và chạm vào hành trinh cuối;lúc này piston B đẩy ra, đưa sảnphẩm sang băng chuyền 2 nằm phía trên

- Khi piston B chạm vào hành trình cuối,thì piston B lùi về

- Khi piston B về đến chạm hành trình đầu thì tiếp tục piston A hạ về lại vị trí banđầu.Kết thúc một chu trình chuyển băng vận chuyển sản phẩm

III Nội dung:

CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ VĐK ATMEGA 16

1.1 Cấu trúc tổng quát VĐK Atmega

1.2 Cấu tạo phần cứng

1.3 Cấu trúc một chương trình Atmega

1.4 Compile và upload chương trình lên bo

1.5 Tập lệnh cơ bản của Atmega

CHƯƠNG 2: LẬP TRÌNH ĐIỀU KHIỂN

2.1 Phân tích và xây dựng sơ đồ công nghệ

2.2 Xây dựng sơ đồ bước dịch chuyển

2.3 Xây dựng sơ đồ mạch khí nén động lực

Trang 4

2.4 Xây dựng sơ đồ thuật toán

2.5 Xây dựng sơ đồ mạch nguồn

2.6 Xây dựng sơ đồ mạch nguyên lý

2.7 Chương trình điều khiển

CHƯƠNG 3: THIẾT KẾ HỆ THỐNG

3.1 Linh kiện

3.2 Thiết kế mạch in

CHƯƠNG 4: MÔ PHỎNG VÀ KẾT LUẬN

III Báo cáo: Thực hiện trên khổ giấy A4 với định dạng theo quy định của nhà trường

IV Cán bộ hướng dẫn: Đào Hữu Lũy

Ngày giao nhiệm vụ: 25/9/2016

VI Ngày hoàn thành: 20/2/2017

TỔ TRƯỞNG TBM TRANG BỊ ĐIỆN CÁN BỘ HƯỚNG DẪN Đào Hữu Lũy

Trang 5

LỜI CẢM ƠN

Để hoàn thành đồ án này, em xin tỏ lòng biết ơn sâu sắc đến các thầy cô và bạn

bè, đã tận tình giúp đở em trong suốt quá trình làm đồ án

Em chân thần cảm ơn đến thầy Đào hữu lũy,giảng viên ,bộ môn trang bị điện tậntình truyền đạt kiến thức trong những tháng qua

Em cũng xin chân thành cảm ơn các thầy cô giáo trong trường nói chung.Các thầy

cô trong Khoa Điện nói riêng đã dạy dỗ cho em và đã tận tình truyền đạt kiến thứctrong những năm học tập vừa qua có gì thiếu sót Em rất mong nhận được sự chỉbảo,đóng góp ý kiến của các thầy cô và bạn bè để em có điều kiện bổ sung, nâng cao ýthức của mình,phục vụ tốt hơn cho công việc thực tế sau nay

Cuối cùng em kính chúc quý Thầy Cô và bạn bè dồi dào sức khỏe và thành côngtrong sự nghiệp của mình Em xin chân thành cảm ơn

Huế, ngày……tháng …năm 2017

Trang 6

MỤC LỤC

Trang 7

MỞ ĐẦU

ỹ thuật vi điều khiển hiện nay rất phát triển rất mạnh mẽ, nó được ứng

dụng vào rất rất nhiều lĩnh vực từ trong đời sống sinh hoạt hàng ngày(khóa số, tủ lạnh,

ti vi, ) cho tới các lĩnh vực trong công nghiệp cũng như trong quân sự Do có nhiều

ưu điểm như nhỏ gọn, khả năng lập trình để điều khiển theo ý muốn, giá thành thấp, cókhả năng xử lí được nhiều công việc… lên vi điều khiển trở thành linh kiện không thểthiếu được trong các thiết bị phục vụ con người chúng ta

AVR là một trong rất nhiều dòng vi điều khiển 8bit hiện nay Nó được ứngdụng rộng rãi trong lĩnh vực điều khiển ứng dụng, lĩnh vực điều khiển đo lường, lĩnhvực điều khiển tự động, lĩnh vực điều khiển quảng cáo v.v …

Với những kiến thức đã có được về dòng vi điều khiển AVR em đã chọn đề tài tốtnghiêp: ” Thiết kế hệ thống điều khiển dùng VĐK Atmega16 điều khiển hoạt động chomột máy dập khuôn”

Mục tiêu của đề tài là kết hợp vi đi ều khiển AVR Atmega16 vào công nghiệp

để điều khiển máy dập khuôn

Page | 7

Trang 8

CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ VĐK ATMEGA 16

1.1 Cấu trúc tổng quát VĐK Atmega16:

+ Giới thiệu VĐK AVR:

- Vi điều khiển AVR do hãng Atmel (Hoa Kì) sản xuất được gới thiệu lần đầu năm

1996 AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny AVR (như AT tiny 13,

AT tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR (chẳnhạn AT90S8535, AT90S8515,…) có kích thước bộ nhớ vào loại trung bình và mạnhhơn là dòng Mega (như ATmega32, ATmega128,…) với bộ nhớ có kích thước vàiKbyte đến vài trăm Kbyte cùng với các bộ ngoại vi đa dạng được tích hợp trên chip,cũng có dòng tích hợp cả bộ LCD trên chip (dòng LCD AVR) Tốc độ của dòngATmega cũng cao hơn so với các dòng khác

- Sự khác nhau cơ bản giữa các dòng chính là cấu trúc ngoại vi, còn nhân thì vẫn nhưnhau (hình 1.1) Đặt biệt, năm 2008, Atmel lại tiếp tục cho ra đời dòng AVR mới làAmega AVR, với những tính năng mạnh mẽ chưa từng có ở các dòng AVR trước đó

Có thể nói AVR là dòng MCU 8 bit mạnh mẽ nhất hiện nay

+ Cấu trúc tổng quát VĐK Atmega16:

- Hiệu xuất cao ( high performance ), là loại vi điều khiển AVR 8 bit công suấtthấp

- Cấu trúc lệnh đơn giản, thời gian thực thi lệnh như nhau ( thật ra là AdvancedRISC Architecture )

• 32 x 8 thanh ghi công dụng chung ( chắc là 32 thanh ghi công dụng chung 8bit )

• Đầy đủ các sử lí tĩnh

• Hỗ trợ 16 MIPS khi hoạt động ở tần số 16 MHz

• Tích hợp bộ nhân 2 thực hiện trong 2 chu kì chip

- Bộ nhớ chương trình và dữ liệu không bay hơi ( nonvolatile )

• 16k byte trong hệ thống flash khả trình có thể nạp và xóa 1,000 lần o Tùychọn khởi động phần mã với các bit nhìn độc lập trong hệ thống bằng cáchvào chương trình khởi động chip

• 512 byte EEPROM có thể ghi và xóa 100,000 lần

• 1k byte ram nhớ tĩnh trong ( internal SRAM )

• Lập trình khóa cho phần mềm bảo mập

- Tính năng ngoại vi

Trang 9

• 2 bộ định thời/bộ đếm ( timers/counters ) 8 bit với các chế độ đếm riêng rẽ

và kiểu so sánh

• 1 bộ định thời/bộ đếm ( timer/counter ) 16 bit với các chế độ đếm riêng rẽ,kiểu so sánh và kiểu bắt sự kiện

• Bộ đếm thời gian thực với máy giao động riêng rẽ

• 4 kênh băm xung PWM

• 8 kênh ADC 10 bit

• Byte định hướng 2 đường giao tiếp nối tiếp

• Giao tiếp USART nối tiếp khả trình ○ Giao tiếp SPI nối tiếp chủ/tớ( master/slave )

• ○ Bộ định thời khả trình giám sát xung nhịp của chip 1 cách riêng rẽ ○ Tíchhợp bộ so sánh tín hiệu tương tự

- Giao tiếp JTAG

- Các tính năng đặt biệt của vi điều khiển

• Chế độ bật nguồn reset và phát hiện Brown-out khả trình

• Tích hợp mạch dao động RC bên trong

1.2 Cấu tạo phần cứng của Atemega16

+ Cấu trúc nhân AVR

CPU của AVR có chức năng bảo đảm sự hoạt động chính xác của các chương trình

Do đó nó phải có khả năng truy cập bộ nhớ, thực hiện các quá trình tính toán, điềukhiển các thiết bị ngoại vi và quản lý ngắt

+ Cấu trúc tổng quát

AVR sử dụng cấu trúc Harvard, tách riêng bộ nhớ và các bus cho chương trình và dữliệu Các lệnh được thực hiện chỉ trong một chu kỳ xung clock Bộ nhớ chương trìnhđược lưu trong bộ nhớ Flash

Page | 9

Trang 10

+ALU

ALU làm việc trực tiếp với các thanh ghi chức năng chung Các phép toán được thựchiện trong một chu kỳ xung clock Hoạt động của ALU được chia làm 3 loại: đại số,logic và theo bit

+ Thanh ghi trạng thái

Đây là thanh ghi trạng thái có 8 bit lưu trữ trạng thái của ALU sau các phép tính sốhọc và logic

Trang 11

C: Carry Flag ;cờ nhớ (Nếu phép toán có nhớ cờ sẽ được thiết lập)

Z: Zero Flag ;Cờ zero (Nếu kết quả phép toán bằng 0)

N: Negative Flag (Nếu kết quả của phép toán là âm)

V: Two’s complement overflow indicator (Cờ này được thiết lập khi tràn số bù 2)V, For signed tests (S=N XOR V) S: N

H: Half Carry Flag (Được sử dụng trong một số toán hạng sẽ được chỉ rõ sau)

T: Transfer bit used by BLD and BST instructions(Được sử dụng làm nơi chung giantrong các lệnh BLD,BST)

I: Global Interrupt Enable/Disable Flag (Đây là bit cho phép toàn cục ngắt Nếu bitnày ở trạng thái logic 0 thì không có một ngắt nào được phục vụ.)

+ Các thanh ghi chức năng chung

Page | 11

Trang 12

+ Con trỏ ngăn xếp (SP)

Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi chức năng đặcbiệt 8 bit Có địa chỉ trong các thanh ghi chức năng đặc biệt là $3E (Trong bộ nhớRAM là $5E) Có nhiệm vụ trỏ tới vùng nhớ trong RAM chứa ngăn xếp

Khi chương trình phục vu ngắt hoặc chương trình con thì con trỏ PC được lưu vàongăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí Và con trỏ ngăn xếp sẽ giảm 1 khithực hiện lệnh push Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ ăng 1 vàkhi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2 Như vậy con trỏngăn xếp cần được chương trình đặt trước giá trị khởi tạo ngăn xếp rước khi mộtchương trình con được gọi hoặc các ngắt được cho phép phục vụ Và giá trị ngăn xếp

ít nhất cũng phải lơn hơn hoặc bằng 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi + Quản lý ngắt

Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình rạng sẵn sxàng cho đổi dữ liệu của mình.Ví dụ:Khi bộ truyền nhận UART nhận được một byte nó sẽ báo cho CPU biết thông qua cờ RXC,hợc khi nó đã truyền được một byte thì cờ TX được thiết lập…Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện lại và lưu vị trí đang thực hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chương trình phục vụ ngắt đó chơ tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn xếp ra và tiếp tục thực hiện chươngtrình mà trước khi có ngăt nó đang thực hiện Trong trường hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt các ngắt theo mức ưu tiên Trong khi đang thực hiện ngắt mà xuất hiện ngắt mới thì sẽ xảy ra hai trường hợp Trường hớp ngắt này có mức ưu tiên cao hơn thì nó sẽ được phục vụ Còn nó mà có mức ưu tiên thấp hơn thì nó sẽ bị bỏ qua.Bộ nhớ ngăn xếp là

Trang 13

vùng bất kì trong SRAM từ địa chỉ 0x60 trở lên Để truy nhập vào SRAM thông thường thì ta dùng con trỏ X,Y,Z và để truy nhậpvào SRAM theo kiểu ngăn xếp thì ta dùng con trỏ SP Con trỏ này là một thanh ghi 16 bit và được truy nhập như hai thanh ghi 8 bit chung có địa chỉ SPL :0x3D/0x5D(IO/SRAM) và

SPH:0x3E/0x5E.Khi chương trình phục vụ ngắt hoặc chương trình con thì con trỏ PC được lưu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí.Và con trỏ ngăn xếp

sẽ giảm 1 khi thực hiện lệnh push

Ngược lại khi thực hiện lệnh POP thì con trỏ ngăn xếp sẽ tăng 1 và khi thực hiện lệnhRET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2 Như vậy con trỏ ngăn xếp cần đượcchương trình đặt trước giá trị khởi tạo ngăn xếp trước khi một chương trình con đượcgọi hoặc các ngắt được cho phép phục vụ Và giá trị ngăn xếp ít nhất cũng phải lớnhơn 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi

b) Sơ đồ khối:

Page | 13

Trang 14

Hình 1 Hình dạng thực tế Atmega16

Ý nghĩa các chân:

Chân 1 đến 8 : Cổng nhập xuất dữ liệu song song B ( PORTB ) nó có thể đc sử dụngcác chức năng đặc biệt thay vì nhập xuất dữ liệu

- Chân 9 : RESET (RST):Dùng để thiết lập trạng thái ban đầu cho vi điều khiển

+ ChânVcc: Chân số 10 là VCC cấp điện áp nguồn cho Vi điều khiển Nguồn điện cấp

- Chân 14 đến 21 : Cổng nhập xuất dữ liệu song song D ( PORTD ) nó có thể đc sửdụng các chức năng đặc biệt thay vì nhập xuất dữ liệu

- Chân 22 đến 29 : Cổng nhập xuất dữ liệu song song C ( PORTC ) nó có thể đc sửdụng các chức năng đặc biệt thay vì nhập xuất dữ liệu

Trang 15

- Chân 30, 31 : AVCC cấp điện áp so sánh cho bộ ADC

- Chân 32 : AREF điện áp so sánh tín hiệu vào ADC

+ Port A (PA): Port A gồm 8 chân (từ chân 33 đến 40) có chức năng: đầu vào chochuyển đổi ADC

+ Port C (PC): Port C gồm 8 chân (từ chân 22 đến chân 29) : Nếu giao tiếp

JTAG được kích hoạt điện trở trên các PC5(TDI), PC3 (TMS) ,PC2 (TCK) sẽ

được kích hoạt ngay cả khi khởi động lại (reset)

+ Port D (PD): Port D gồm 8 chân (từ chân 14 đến chân 21) : c+ vào ra của vi điiềukhiển

PORTA (PA7….PA0):là các chân từ 33 đến 40.Là cổng vào ra song song 8 bít khikhông dùng ở chế độ ADC.Bên trong có sẳn các điện trở kéo,khi PORTA là output thìcác điện trở kéo không hoạt động,khi PORTA là input thì các điện trở kéo được kíchhoạt

+PORTB (PB7….PB0):là các chân số 1 đến 8.Nó tương tự như PORTA khi sử dụngvào ra song song.Ngoài ra các chân của PORTB còn có các chức năng đặc biệt

+ PORTC (PC7….PC0):là các chân 22 đến 30.Cũng giống PORTA và PORTB khi làcổng vào ra song song.Nếu giao tiếp JTAG được bật,các trở treo ở các chânPC5(TDI),PC3(TMS),PC2(TCK) sẽ hoạt động khi sự kiện reset xảy ra

+ PORTD (PD7….PD0):là các chân 13 đến 21.Cũng là một cổng vào ra song songgiống các PORT khác

Page | 15

Trang 16

Hình 2 Cấu trúc chân Atmega16

1.3.Cấu trúc một chương trình Atmega

7. // Input / Output Cổng khởi tạo

8. // Port A khởi tạo

Trang 17

2. Tạo Project trên CodeVisionAVR

Sau khi cài đặt CodeVision, trên desktop xuất hiện icon của phần mềm, bạn mở

nó lên và tiến hành làm theo các bước sau đây:

- Tạo mới Project Chọn menu File và chọn New, chọn Project và chọn OK

Cửa sổ con firm xuất hiện,ở đây bạn chọn OK để xác nhận tạo 1 projectmới.tiếp theo là cửa sổ CodeVisionAVR dùng để chọn loại chip.Ở đây tôi chọnAT90,AtTiny, Atmega,FPSLIC,cho phép sử dụng các loại vi điều khiển tương ứng

Cuối cùng chọn OK để xác nhận

Page | 17

Trang 18

Cửa sổ CodeVisionAVR xuất hiện.Trong cửa sổ này,cho các bạn những tùychọn thiết lập ban đầu cho vi điều khiển của mình

Thẻ chip.với các loại tùy chọn loại chip,chon xung Clock

Ở đây tôi chọn Atmega 16 với xung Clock 8Mhz

Trang 19

Thẻ Port là các port tương ứng với các loại vi điều khiển ta chọn.trong trường hợp này,tôi chọn Atmega16 nên các Port gồm A,B,C,D.Ở mỗi port lại có các tùy chọn,giúp mình chọn chiều của port (Data Direction ) và giá trị của Port đó

(Pullup/Output Value)

Với Data Direction: Out là đầu ra, In là đầu vào

Với Pullup/Output Value: 0 là mức thấp, 1 là mức cao, P là có trở treo, T là không dùng trở treo

Ví dụ ở đây: PORTB.1 là Input và không dùng trở treo, PORTB.2 là Output và

ở mức thấp.Các Port khác làm tương tự

Page | 19

Trang 20

1.4.2.Upload chương trình lên bo

Cách nạp code chương trình trong Proteus

Để nạp code cho Vi điều khiển

1/ Double click trên Vi điều khiển Màn hình Edit Component sẽ xuất hiện 2/ Nhấp vào biểu tương open để mở file sẽ nạp

3/ Chọn file.hex hay file.cof để nạp / click Open

4/ Màn hình Edit Component :chọn OK

Trang 21

Sau khi nạp xong để kiểm tra hoạt động của mạch chúng ta nhấn vào nút Play

1.5 Tập lệnh cơ bản cua Atmega

Ngôn ngữ lập trình C là ngôn ngữ khá mạnh và được nhiều người sử dụng Lậptrình bằng ngôn ngữ cấp cao như C giúp xây dựng các ứng dụng nhanh chóng và dễdàng hơn Sau đây sẽ giới thiệu một cách cơ bản nhất về cách viết chương trình choAVR sử dụng ngôn ngữ C

Một chương trình C cho AVR thường bao gồm những thàn phần cơ bản như:chú thích (comments), biểu thức (expressions), câu lệnh (statements), khối (blocks),các toán tử, cấu trúc điều khiển (flow controls), hàm (function)…

Chú thích (comments): Chú thích là những đoạn trong chương trình dùng đểgiải thích hay bình phẩm những gì ta làm trong chương trình, phần chú thích khôngđược biên dịch vì vậy nó không có bất kỳ ảnh hưởng nào dến hoạt động của chươngtrình Có hai cách để tạo phần chú thích trong C là chú thích theo từng dòng bằng cáchđặt ở đầu dòng chú thích dấu “//” và chú thích block bằng cách kẹp đoạn cần chú thíchvào giữa /*…*/

Tiền xử lý (preprocessor): là một tiện ích của ngông ngữ C, các preprocessorđược trình biên dịch xử lý trước tất cả các phần khác Các preprocessor được bắt đầubằng dấu “#”, trong ngôn ngữ C có hai preprocessor được sử dụng phổ biến nhât đó là

Page | 21

Trang 22

#include và #define Preprocessor #include dùng để chỉ định 1 file được đính kèmtrong quá trình xử lý, và #define dùng để định nghĩa một chuỗi thay thế hoặc 1 macro.

Biểu thức (expressions): là một phần của các câu lệnh, biểu thúc có thể baogồm các biến, các toán tử, gọi hàm… Biểu thức trả về một giá trị đơn Biểu thứckhông phải là một câu lệnh hoàn chỉnh

Câu lệnh (statements): là một dòng lệnh hoàn chỉnh có thể bao gồm các từ khóa(key words), các biểu thức các câu lệnh khác và được kết thúc bằng dấu “;”

Khối (blocks): là sự kết hợp của nhiều câu lệnh để cùng thực hiện một nhiệm vụnào đó Khối được kẹp giữa hai dấu mở khối “{” và đóng khối “}”

Toán tử (operators): là những ký hiệu báo cho trình biên dịch biết nhũng nhiệm

vụ cần thực hiện(toán tử đại số, toán tử logic và quan hệ …)

Cấu trúc điều khiển (flow controls): Các cấu trúc điều khiển cho phép chươngtrình thực hiện đúng theo ý tưởng của người viết chương trình Các cấu trúc điều khiểnthường dùng trong lập trình C:

-“If (điều kiện) câu lệnh;” Nếu điều kiện là đúng thì thực hiện câu lệnh tiếp theo sau,câu lệnh có thể được viết cùng dòng hay dòng sau từ khóa if Điều kiện là một biểuthức bất kỳ có thể là sự kết hợp của nhiều điều kiện thông qua các toán tử quan hệAND(&&), OR(||), … Điều kiện được cho là đúng khi nó khác 0

Trong trường hợp cần thực thi nhiều câu lệnh khi một điều kiện nào đó thỏa mãn

ta có thể đặt các câu lệnh đó trong một khối:

Nếu cần thực hiện nhiều câu lệnh thì các câu lệnh cần được dặt trong 1 khối:

Ngày đăng: 20/05/2017, 16:17

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w