1. Trang chủ
  2. » Giáo Dục - Đào Tạo

CHƯƠNG 5 GIỚI THIỆU về VI xử lý AT89C52

16 856 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 16
Dung lượng 822 KB

Nội dung

Chương 5: GIỚI THIỆU VI XỬ LÝ AT89C52  VI ĐIỀU KHIỂN HỌ MCS-51MCS-51tm Là họ vi điều khiển hãng intel sản xuất vào đầu năm 80 ngày trở thành chuẩn công nghiệp ic tiêu biểu 8051 cho thấy khả thích hợp với ứng dụng mang tính điều khiển việc xử lí byte phép toán số học cấu trúc liệu nhỏ thực nhiều chế độ truy xuất liệu nhanh ram nội tập lệnh cung cấp tiện dụng lệnh số học bit gồm lệnh nhân lệnh chia cung cấp hỗ trợ mở rộng on-chip dùng cho biến bit kiểu liệu riêng cho phép quản lí kiểm tra bit trực tiếp điều khiển hệ thống logic đòi hỏi xử lí luận lí Sau bảng so sánh IC họ MCS-51TM : TÊN LINH BỘ NHỚ KIỆN CHƯƠNGù TRÌNH ON CHIP 8051 KB MROM 8031 KB 8751 KB EPROM 8951 KB Flash ROM 8052 KB MROM 8032 KB 8752 KB EPROM 8952 KB Flash ROM VI ĐIỀU KHIỂN AT89C52 BỘ NHỚ DỮ LIỆU TIMER ON CHIP 128 Bytes 128 Bytes 128 Bytes 128 bytes 256 Bytes 256 Bytes 256 Bytes 256 Bytes 2 2 3 3 Do họ MCS-51TM trở thành chuẩn công nghiệp nên có nhiều hãng sản xuất nó, điển hình ATMEL Corporation Hãng kết hợp nhiều tính dựa tảng kỹ thuật để tạo vi điều khiển tương thích với MCS-51TM mạnh mẽ AT89C52 vi điều khiển bit ATMEL sản xuất, chế tạo theo công nghệ CMOS, có chất lượng cao, công suất thấp với KB Flash (flash programmable and erasable read only memory) Thiết bò chế tạo cách sử dụng kỹ thuật nhớ không bốc mật độ cao ATMEL tương thích với chuẩn công nghiệp MCS-51 TM tập lệnh chân Flash on-chip cho phép nhớ lập trình lập trình hệ thống lập trình viên bình thường Bằng cách nối CPU bit với Flash chip đơn, AT89C52 vi điều khiển mạnh (có công suất lớn), cung cấp linh động cao giải pháp giá nhiều ứng dụng vi điều khiển Các đặc điểm chủ yếu AT89C52 : • Tương thích hoàn toàn với họ MCS-51TM Intel • Bộ nhớ chương trình 8K Byte thuộc loại Flash Memory.Độ bền : 1000 lần ghi/xóa • Tần số hoạt động : Hz đến 24 MHz.3 chế độ khóa nhớ • 256 x 8-Bit RAM nội.32 đường I/O lập trình (4 port) • timer/counter 16-bit.8 nguồn ngắt • Chế độ hạ nguồn chế độ lười tiêu tốn công suất thấp 2.1 Cấu tạo chân Tùy theo khả (về kinh tế, kỹ thuật, …) mà nhà sản xuất sản phẩm ứng dụng chọn kiểu chân ATMEL đưa 2.2 Sơ đồ khối 2.3 Mô tả chức chân Vcc : áp nguồn GND : đất Port : port I/O 8-bit hai chiều, cực máng hở Khi xuất ra, chân port lái đầu vào TTL Nếu ghi mức chân port chân dùng đầu vào trở kháng cao Port cấu hình thành bus multiplex đòa thấp liệu truy cập chương trình hay liệu từ bên Trong chế độ này, port có điện trở pullup nội Port nhận byte mã chương trình lập trình Flash xuất mã chương trình kiểm tra, cần có điện trở pullup bên Port : port I/O 8-bit hai chiều có pullup nội Đầu port lái đầu vào TTL Khi viết mức chân port chúng kéo lên có điện trở nội dùng làm đầu vào Khi vai trò cổng nhập, chân port bò kéo xuống thấp đổ dòng có nội trở kéo lên Hơn nữa, P1.0 P1.1 dùng đầu vào đếm timer/counter bên (P1.0/T2) xung kích (P1.1/T2EX) Port nhận byte đòa thấp lập trình Flash kiểm tra Flash Port : port I/O 8-bit hai chiều có pullup nội Đầu port lái đầu vào TTL Khi viết mức chân port chúng kéo lên có điện trở nội dùng làm đầu vào Khi vai trò cổng nhập, chân port bò kéo xuống thấp đổ dòng có nội trở kéo lên Port phát byte đòa cao nhận lệnh từ nhớ chương trình lúc truy xuất đến nhớ liệu mà có sử dụng đòa 16 bit (MOVX A, @DPTR) Trong ứng dụng dùng điện trở nội kéo lên mạnh xuất Khi truy xuất nhớ liệu dùng đòa bit, port phát nội dung ghi P2 Port nhận byte đòa cao lúc lập trình Flash lúc kiểm tra Flash Port : port I/O 8-bit hai chiều có pullup nội Đầu port lái đầu vào TTL Khi viết mức chân port chúng kéo lên có điện trở nội dùng làm đầu vào Khi vai trò cổng nhập, chân port bò kéo xuống thấp đổ dòng có nội trở kéo lên Port có chức họ MSC-51 iệt kê bảng sau: BIT TÊN ĐỊA CHỈ BIT CHỨC NĂNG THAY THẾ P3.0 P3.1 P3.2 P3.3 P3.4 RXD TXD INT0 INT1 T0 B0H B1H B2H B3H B4H P3.5 T1 B5H P3.6 P3.7 WR RD B6H B7H Nhận dừ liệu cho port nối tiếp Truyền dừ liệu cho port nối tiếp Ngắt Ngắt Ngõ vào từ bên cho timer/counter Ngõ vào từ bên cho timer/counter Xung ghi nhớ liệu Xung đọc nhớ liệu Port nhận vài tín hiệu điều khiển lúc lập trình Flash lúc kiểm tra Flash RST : ngõ vào Reset Khi ngõ đưa lên cao (trong hai chu kì máy), ghi bên AT89C51 tải giá trò thích hợp để khởi động hệ thống ALE/PROG (Address Latch Enable) : ALE xung xuất cho phép chốt byte đòa thấp truy cập nhớ Chân ngõ vào xung lập trình (PROG) lập trình Flash Trong hoạt động bình thường, ALE phát xung với tần số 1/6 tần số dao động on-chip dùng xung thời gian chuẩn bên Tuy nhiên, cần ý xung ALE bò truy cập nhớ Có thể hủy bỏ chức ALE cách set bit ghi vò trí 8EH Một bit set, ALE tích cực có lệnh MOVX MOVC Nếu lệnh ALE mức cao Việc set bit ghi vò trí 8EH không làm ảnh hưởng đến vi điều khiển truy cập nhớ PSEN (Program Store Enable) : PSEN xung strobe báo hiệu việc đọc nhớ chương trình ngoài, PSEN tích cực hai lần (mức thấp) chu kì máy, ngoại trừ hai xung PSEN bò truy xuất liệu Khi thi hành chương trình RAM nội, PSEN mức thụ động (mức cao) EA/VPP (External Access) : EA ngõ vào phép truy xuất nhớ chương trình từ bên nối với GND Khi EA treo lên nguồn VCC, chương trình thực thi ROM nội Chân nhận điện áp 12v (VPP) lập trình Flash XTAL1 : Đầu vào khuếch đại dao động đảo đầu vào đến mạch tạo xung clock nội XTAL2 : Đầu khuếch đại dao động đảo 2.4 Các ghi chức (SFR-Special Funtion Reisters) AT89C52 có 26 ghi chức thiết kế thành phần RAM on-chip Do ghi có đòa nó, nằm vùng từ 80H đến FFH Tuy nhiên, vùng vùng nhớ nên việc truy cập ghi thông qua lệnh dùng đònh vò trực tiếp khác với việc truy cập vùng nhớ dùng đònh vò gián tiếp Bảng vò trí ghi chức : Chú ý tất đòa có ghi, đòa ghi chip Đọc đòa có giá trò ngẫu nhiên ghi giá triï có tác động không xác đònh trước Phần mềm người dùng không nên ghi giá trò đến vò trí này, chúng dùng tương lai Trong trường hợp đó, giá trò bit Ngoài ghi tương tự 8051, AT89C52 có thêm : Các ghi Timer bit điều khiển trạng thái chứa ghi T2CON T2MOD cho Timer Cặp ghi RCAP2H RCAP2L ghi Capture/Reload chế độ capture 16 bit hay chế độ auto-reload 16 bit Ký hiệu TF2 Chức Cờ tràn Timer 2, set Timer tràn phải clear phần mềm TF2 không set RCLK = TCLK = EXF2 Cờ Timer 2, set xảy capture reload T2EX xuống thấp EXEN2 = Nếu ngắt Timer kích hoạt, EXF2 = làm CPU trỏ đến ISR Timer EXF2 phải xóa phần mềm EXF2 không gây nên ngắt chế độ đếm lên/xuống (DCEN = 1) RCLK Kích hoạt xung clock thu Khi set, xung tràn Timer xung clock cho thu port nối tiếp mode RCLK = thu port nối tiếp dùng xung tràn Timer TCLK Kích hoạt xung clock phát Khi set, xung tràn Timer xung clock cho phát port nối tiếp mode TCLK = phát port nối tiếp dùng xung tràn Timer EXEN2 Kích hoạt bên Khi set, cho phép capture hay reload T2EX xuống thấp (nếu Timer không sử dụng cho port nối tiếp) EXEN2 = làm cho Timer bỏ qua kiện T2EX TR2 Khởi động/Dừng Timer TR2 = làm khởi động Timer C/T2 Bit lựa chọn timer hay counter C/T2 = : timer C/T2 = : counter đếm kiện bên (kích cạnh xuống) CP/RL2 Lựa chọn capture hay reload CP/RL2 = 1: capture xảy T2EX xuống thấp EXEN2 = CP/RL2 = : reload xảy Timer tràn T2EX xuống thấp EXEN2 = Nếu TCLK hay RCLK = 1, bit bò bỏ qua timer bò ép vào chế độ reload Timer tràn Các ghi ngắt tập bit riêng lẻ cho phép ngắt chứa ghi IE Thiết lập hai mức ưu tiên cho nguồn ngắt cách set bit ghi IP 2.5 Bộ nhớ liệu AT89C52 có 256 byte nhớ RAM on-chip Trong đó, 128 byte có đòa với vùng ghi chức có cấu tạo vật lý riêng biệt Khi lệnh truy cập vò trí nội có đòa 7FH, chế độ đòa sử dụng báo cho CPU biết vùng đòa cần truy cập : RAM hay SFR Các lệnh dùng đòa trực tiếp truy cập vùng SFR Ví dụ lệnh sau truy cập SFR đòa 0A0H (port 2) MOV 0A0H,#data Lệnh dùng đòa gián tiếp truy cập 128 byte RAM Ví dụ truy cập đòa 0A0H gián tiếp thông qua R0 MOV R0,#0A0H MOV @R0,#data Chú ý tác vụ stack vốn sử dụng đòa gián tiếp nên vùng 128 byte RAM tiện dụng để làm vùng stack 2.6 Đặc tính dao động XTAL1 đầu vào đầu tương ứng khuếch đại đảo dùng làm dao động nội on-chip Có thể dùng thạch anh hay cộng hưởng ceramic Để lái vi điều khiển từ nguồn xung clock bên ngoài, XTAL2 phải để trống XTAL1 nối đến nguồn lái Không có yêu cầu duty cycle phải ý đến thời gian tối đa tối thiểu mức điện áp cao mức điện áp thấp 2.7 Chế độ lười Trong chế độ lười, CPU rơi vào trạng thái “ngủ” tất thiết bò ngoại vi tích cực Chế độ tạo phần mềm Nội dung RAM on-chip giá trò SFR giữ nguyên Kết thúc chế độ lười cách kích hoạt ngắt reset phần cứng Chú kết thúc chế độ lười cách reset phần cứng thông thường vi điều khiển gọi lại chương trình mà vừa thoát, hai chu kỳ máy trước thuật toán reset chiếm quyền điều khiển Phần cứng cấm truy cập RAM nội trường hợp không cấm truy cập đến chân port, xảy trường hợp không mong muốn Để loại bỏ trường hợp này, lệnh sau lệnh gọi chế độ lười không nên lệnh ghi port hay ghi nhớ 2.8 Chế độ hạ nguồn Trong chế độ hạ nguồn, dao động ngừng, lệnh gọi hạ nguồn lệnh cuối thực thi RAM on-chip SFR trì giá trò kết thúc chế độ hạ nguồn Kết thúc chế độ hạ nguồn cách : reset phần cứng Reset tạo lại giá trò cho SFR không thay đổi nội dung RAM on-chip Không nên reset trước Vcc phục hồi mức điện áp thông thường phải giữ đủ lâu để dao động phục hồi ổn đònh 2.9 Trạng thái số chân chế độ lười chế độ hạ nguồn IX TẬP LỆNH CỦA 89C51: AT89C51 có 255 lệnh chia thành nhóm lệnh: + Nhóm lệnh chuyển dời + Nhóm lệnh số học + Nhóm lệnh logic + Nhóm lệnh chuyển điều khiển Sau tập lệnh vi xử lý AT89C51: Các dẩn thiết lập lệnh Rn : Thanh ghi R0 đến R7 Data : bit đòa vùng liệu bên @Ri : Đònh gián tiếp qua R0 hay R1 #data : Hằng số bit #data16 : Hằng số 16 bit addr 16 : 16 bit đòa đích addr 11 : 11 bit đòa đích rel : Ofset bit có dấu bit : Bit đònh đòa trực tiếp a) Nhóm lệnh xử lý số học : ADD A,Rn (1 byte,1chu kỳ máy): (A) = (A)+(Rn) ADD A,data (2;1) : (A) = (A) + (data) ADD A,@Ri (1;1) : (A) = (A) + ((Ri)) ADD A,#data (2;1) : (A) = ( A) + #data ADDC A,Rn (1;1) : (A) = ( A) + (C) +(Rn) ADDC A,data ( 2;1) : (A) = (A) + (C) + (data) ADDC A,@Ri (1;1) : (A) = (A) + ((Ri)) + (C) ADDC A,#data ( 2;1) : (A) = (A) + (C) + #data SUBB A,Rn (1;1) : (A) = (A) - (C)- (Rn) SUBB A,data (2;1) : (A) = (A) - (C) -( data) SUBB A,@Ri (1;1) : (A) =(A) -(C) -((Ri)) SUBB A,#data (2;1) : (A) = (A) - (C) - #data INC A (1;1) : (A) = (A) +1 INC Rn (1;1) : (Rn) = (Rn) +1 INC data (2;1) : (data) = (data) +1 INC @Ri (1;1) : ((Ri)) =((Ri))+1 DEC A (1;1) : (A) =(A) – DEC Rn (1;1) : (Rn) =(Rn) -1 DEC data (2;1) : (data) =(data) –1 DEC @Ri (1;1) : ((Ri)) =((Ri)) –1 INC DPTR (1;2) : (DPTR) =(DPTR) +1 MUL AB (1;4) : (A) = byte cao (A) * (B) (B) = byte thấp (A)* (B) DIV AB (1;4) : chia (A) cho (B) ,kết quả: ( A) = thương số (B) = số dư DA A (1;1) : hiệu chỉnh thập phân ghi A b) Nhóm lệnh luận lý: ANL A,Rn (1;1) : (A) =(A) and (Rn) ANL A,data (2;1) : (A) =(A) and (data) ANL A,@Ri (1;1) : (A) = (A) and ((Ri)) ANL A,#data (2;1) : (A) = (A) and #data ANL data,A (2;1) : (data) = (data) and (A) ANL data,#data ANL C,bit ANL C, bit ORL A,Rn ORL A,data ORL A,@Ri ORL A,#data ORL data,A ORL data,#data ORL C,bit ORL C,/bit XRL A,Rn XRL A,data XRL A,@Ri XRL A,#data XRL data,A XRL data,#data SETBC SET bit CLR A CLR bit CLR C CPL A CPL C CPL bit RL A RLC A RR A RRC A (3;2) (2;2) (2;2) (1;1) : (data) =(data) and #data : (C) =(C) and (bit) : (C) =(C) and not (bit) : (A) = (A) or (Rn) (2;1) : (A) = (A) or data (1;1) : (A) = (A) or ((Ri)) (2;1) : (A) = (A) or #data (2;1) : (data) = (data) or (A) (3;2) : (data ) = (data) or # data (2;2) : (C) = (C) or bit (2;2) : (C) = (C) or not bit (1;1) : (A) =(A) xor (Rn) (2;1) : (A) = (A) xor (data) (1;1) : (A) = (A) xor ((Ri)) (2;1) : (A) = (A) xor #data (2;1) : (data) = (data) xor (A) (3;2) : (data) = (data) xor #data (1;1) : (C) =1 (2;1) : (bit) = (1;1) : (A) = (2;1) : (bit) =0 (1;1) : (C) = (1;1) : (A) = not (A) (1;1) : (C) = not (C) (2;1) : (bit) = not (bit) (1;1) : quay trái nội dung ghi A (1;1) : quay trái nội dung ghi A (1;1) : quay phải nội dung ghi A (1;1) : quay phải nội dung ghi A qua cờ nhớ SWAP A (1;1) : quay trái nội dung ghi A nibble c) Nhóm lệnh chuyển liệu : MOV A,Rn (1;1) : (A) =(Rn) MOV A,data (2;1) : (A) = (data) MOV A,@Ri (1;1) : (A) = ((Ri)) MOV A,#data (2;1) : (A) = #data MOV Rn,A (1;1) : (Rn) = (A) MOV Rn,data (2;2) : (Rn) = (data) MOV Rn,#data (2;1) : (Rn) = #data MOV data,A (2;1) :(data) = (A) MOV data,Rn (2;2) : (data) = (Rn) MOV data,data (3;2) : (data) = (data) MOV data,@Ri (2;2) : (data) = ((Ri)) MOV data,#data (3;2) : (data) = #data MOV @Ri,A (1;1) : ((Ri)) = (A) MOV @Ri,data (2;2) : ((Ri)) = (data) MOV @Ri,#data (2;1) : ((Ri)) = #data MOV DPTR,#data16 (3;2) : (DPTR) = #data16 MOV C,bit (2;1) : (C) = (bit) MOV bit,C (2;2) : (bit) = (C) MOVC A,@A+DPTR (1;2) : (A) = ((A)+(DPTR)) MOVC A,@A+PC (1;2) : (A) = ((A)+(PC)) MOVX A,@Ri (1;2) : chuyển liệu bít vào ghi A MOVX A,@DPTR (1;2) : chuyển kiệu 16 bit vào ghi A MOVX @Ri,A (1;2) : chuyển nội dung ghi A liệu bit đòa MOVX @DPTR,A (1;2) : chuyển nội dung ghi A liệu 16 bit đòa PUSH data (2;2) : (SP) =(SP) +1 ((SP)) = (data) POP data (2;2) : (data) = ((SP)) (SP) = (SP) -1 XCH A,Rn (1;1) : trao đổi liệu ghi Rn ghi A XCH A,data (2;1) : trao đổi giửa ghi A data XCH A,@Ri (1;1) : trao đổi ghi A liệu gián tiếp XCHD A,@Ri (1;1) : trao đổi nibble thấp ghi A nibble thấp byte liệu gián tiếp d) Nhóm lệnh chuyển điều khiển : ACALL addr11 (2;2) : Gọi chương trình dùng đòa tuyệt đối LCALL addr16 (3;2) : Gọi chươnhg trình dùng đòa dài RET (1;2) : Trở từ lệnh gọi chương trình RETI (1;2) :Trở từ lệnh gọi ngắt AJMP addr11 (2;2) : Nhảy tuyệt đối LJMP addr16 (3;2) : Nhảy dài SJMP rel (2;2) : Nhảy ngắn JMP @A+DPTR (1;2) : Nhảy gián tiếp từ trỏ liệu JZ rel (2;2) : Nhảy A JNZ rel (2;2) : Nhảy A không không JC rel (2;2) : Nhảy cờ nhớ đặt JNC rel (2;2) : Nhảy nếucờ nhớ không đặt JB bit,rel (3;2) : Nhảy tương đối bit trực tiếp đặt JNB bit,rel (3;2) : Nhảy bit không đặt JBC bit, rel (3;2) : Nhảy tương đối bit trực tiếp đặt xóa bit CJNE A,data,rel (3;2) : So sánh liệu trực tiếp với A nhảy không CJNE A,#data,rel (3;2) : So sánh liệu ức thời với Avà nhảy không CJNE Rn,#data,rel (3;2) : So sánh liệu tức thời với (Rn) nhảy không CJNE @Ri,#data,rel (3;2) : So sánh liệu tức thời với liệu gián tiếp nhảy không DJNZ Rn,rel (2;2) : Giảm ghi Rn nhảy không không DJNZ data,rel (3;2) : Giảm liệu trực tiếp nhảy không [...]... động phục hồi và ổn đònh 2.9 Trạng thái của một số chân trong chế độ lười và chế độ hạ nguồn IX TẬP LỆNH CỦA 89C51: AT89C51 có 255 lệnh chia thành các nhóm lệnh: + Nhóm lệnh chuyển dời + Nhóm lệnh số học + Nhóm lệnh logic + Nhóm lệnh chuyển điều khiển Sau đây là tập lệnh cơ bản của vi xử lý AT89C51: Các chỉ dẩn thiết lập lệnh Rn : Thanh ghi R0 đến R7 Data : 8 bit đòa chỉ vùng dữ liệu bên trong @Ri : Đònh... thấp của thanh ghi A và nibble thấp của byte dữ liệu gián tiếp d) Nhóm lệnh chuyển điều khiển : ACALL addr11 (2;2) : Gọi chương trình con dùng đòa chỉ tuyệt đối LCALL addr16 (3;2) : Gọi chươnhg trình con dùng đòa chỉ dài RET (1;2) : Trở về từ lệnh gọi chương trình con RETI (1;2) :Trở về từ lệnh gọi ngắt AJMP addr11 (2;2) : Nhảy tuyệt đối LJMP addr16 (3;2) : Nhảy dài SJMP rel (2;2) : Nhảy ngắn JMP @A+DPTR... tiếp qua R0 hay R1 #data : Hằng số 8 bit #data16 : Hằng số 16 bit addr 16 : 16 bit đòa chỉ đích addr 11 : 11 bit đòa chỉ đích rel : Ofset 8 bit có dấu bit : Bit được đònh đòa chỉ trực tiếp a) Nhóm lệnh xử lý số học : ADD A,Rn (1 byte,1chu kỳ máy): (A) = (A)+(Rn) ADD A,data (2;1) : (A) = (A) + (data) ADD A,@Ri (1;1) : (A) = (A) + ((Ri)) ADD A,#data (2;1) : (A) = ( A) + #data ADDC A,Rn (1;1) : (A) = ( A)... (1;4) : (A) = byte cao của (A) * (B) (B) = byte thấp của (A)* (B) DIV AB (1;4) : chia (A) cho (B) ,kết quả: ( A) = thương số (B) = số dư DA A (1;1) : hiệu chỉnh thập phân thanh ghi A b) Nhóm lệnh luận lý: ANL A,Rn (1;1) : (A) =(A) and (Rn) ANL A,data (2;1) : (A) =(A) and (data) ANL A,@Ri (1;1) : (A) = (A) and ((Ri)) ANL A,#data (2;1) : (A) = (A) and #data ANL data,A (2;1) : (data) = (data) and (A) ANL ... TẬP LỆNH CỦA 89C51: AT89C51 có 255 lệnh chia thành nhóm lệnh: + Nhóm lệnh chuyển dời + Nhóm lệnh số học + Nhóm lệnh logic + Nhóm lệnh chuyển điều khiển Sau tập lệnh vi xử lý AT89C51: Các dẩn thiết... cấp linh động cao giải pháp giá nhiều ứng dụng vi điều khiển Các đặc điểm chủ yếu AT89C52 : • Tương thích hoàn toàn với họ MCS -51 TM Intel • Bộ nhớ chương trình 8K Byte thuộc loại Flash Memory.Độ... tiên cho nguồn ngắt cách set bit ghi IP 2 .5 Bộ nhớ liệu AT89C52 có 256 byte nhớ RAM on-chip Trong đó, 128 byte có đòa với vùng ghi chức có cấu tạo vật lý riêng biệt Khi lệnh truy cập vò trí nội

Ngày đăng: 16/11/2015, 11:13

TỪ KHÓA LIÊN QUAN

w