Đang tải...

Vi điều khiển Hướng dẫn thực hành lập trình với IC vi điều khiển AT89C51

Thảo luận trong 'Điện - Điện tử' bắt đầu bởi born-@, 30/1/13.

Thành viên đang xem bài viết (Users: 0, Guests: 0)

  1. born-@
    Offline

    Trai Nghèo Xứ Quảng
    Expand Collapse

    Tham gia ngày:
    16/10/12
    Số km:
    1,302
    Được đổ xăng:
    315
    Mã lực:
    316
    Giới tính:
    Nam
    Xăng dự trữ:
    3,971 lít xăng
    #1 born-@, 30/1/13
    Last edited by a moderator: 30/1/13

    Từ khi con người chế tạo ra được các loại ic lập trình, làm việc với các câu lệnh, thì ngành điện tử đã chuyển qua một thời kỳ mới với rất nhiều ứng dụng hấp dẫn, hay lạ. Từ các ic lập trình chúng ta bắt đầu làm quen với khái niệm "phần xác" và "phần hồn", hay còn được gọi là phần cứng và phần mềm.
    Phần xác là gì? Là các linh kiện tạo ra mạch điện, tạo ra thiết bị. Nó giống như bắp thịt, đầu mình và tay chân của chúng ta, phần xác thường như là các vật thể hữu hình có khối lượng và vô tri vô giác.
    Phần hồn là gì? Là các câu lệnh vô hình, mà chúng ta đã soạn ra và cho nạp vào bộ nhớ của các ic lập trình, dùng các câu lệnh này chúng ta có thể điều khiển các dạng hoạt động của phần xác. Chúng ta thấy cũng chỉ trên một bộ nhớ mà khi chúng ta cho thay đổi các câu lệnh mới, với các câu lệnh mới này thì phần xác lại có thể tạo ra các đáp ứng mới, các động tính mới.
    Đó chính là cấu trúc của các mạch điện thời đại, của các loại thiết bị đời mới, trong đó làm việc với các loại ic lập trình. Từ hiểu biết trên chúng ta sẽ thấy công việc của người thiết kế điện tử ngày nay sẽ gồm các bước như sau:

    Bước 1: Tạo ra các vật thể giống như công việc tạo ra một cái xác có đủ đâu mình và tứ chi. Với các cái xác không hồn thì vô tri vô giác, không làm được trò trống gì cả.
    Bước 2: Viết các chương trình nguồn để điều khiển các bộ phận của phần xác. Như chương trình điều khiển sự đi đứng, chương trình điều khiển tay chân, đầu mình...
    Bước 3: Dịch các chương trình nguồn vốn là các câu lệnh thành các dòng mã lệnh và cho nạp các dòng mã lệnh vào nằm trong bộ nhớ của thiết bị.
    Bước 4: Cho vận hành thử các thiết bị để xem xét các hoạt động của nó có đúng với ý muốn của người thiết kế không? Nếu chưa vừa ý thì cho hiệu chỉnh lại, thường công việc là viết lại các chương trình nguồn.

    Ngày nay người ta chế tạo ra biết bao thứ thiết bị thông minh, kết hợp tài tình giữa phần xác và phần hồn, nó hoàn toàn có thể làm được nhiều việc giống như một sinh vật sống. Trong nghề nghiệp, chúng ta không muốn mình bị "lạc hậu", thụt lùi, vậy phải tìm hiểu loại ic lập trình này thôi. Nhưng khởi đầu phải từ bước nhập môn, vậy làm quen với ic lập trình AT89C51 vậy.

    Giới thiệu bo thực hành với ic lập trình AT89C51
    1. Tìm hiểu hoạt động của ic lập trình AT89C51.

    [​IMG]
    Hình trên cho thấy ic lập trình đơn phiến AT89C51 có 40 chân, công dụng của các chân như sau:
    ☆ Chân cuối của hàng dưới, chân 20, cho nối masse, chân cuối của hàng trên, chân 40, cho nối nguồn 5V
    ☆ Chân 9 là chân reset, khi chân này ở mức áp cao, IC sẽ ở trạng thái reset.
    ☆ Chân 18, 19 dùng gắn thạch anh để định tần cho xung nhịp, với thạch anh 12MHz, chu kỳ lệnh sẽ là 1us.
    ☆ Chân 31 dùng khai báo IC sẽ làm việc với bộ nhớ nào, khi treo chân này lên mức áp cao, IC sẽ chỉ làm việc với bộ nhớ trong.
    ☆ IC AT89C51 có 4 cảng dạng 8-bit dùng xuất nhập bit. Các cảng được đặt tên là p0, p1, p2 và p3.
    ☞ Cảng p0 gồm các chân: 39, 38, 37, 36, 35, 34, 33, 32.
    ☞ Cảng p1 gồm các chân: 1, 2, 3, 4, 5, 6, 7, 8.
    ☞ Cảng p2 gồm các chân: 21, 22, 23, 24, 25, 26, 27 ,28.
    ☞ Cảng p3 gồm các chân: 10, 11, 12, 13, 14, 15, 16, 17.

    Ghi nhớ: Để tiện dụng trên các chân của các cảng đều đã cho đặt tên riêng, do vậy chúng ta có thể xử dụng các tên này trong các câu lệnh mà không cần phải nhớ số chân của IC. Cũng chú ý có một số chân đa nhiệm, nghĩa là chân đó có thể làm nhiều nhiệm vụ. Nhất là các chân của cảng p3. Người ta thường dùng 2 cảng p0 và p2 để truy cập địa chỉ 16-bit của các bộ nhớ ngoài, với khả năng truy cập địa chỉ 16-bit, nó có thể làm việc với các bộ nhớ có 65536 thanh nhớ.
    Khi dùng ic lập trình đơn phiến AT89C51, Bạn chú ý đến 4 điều sau đây:
    [​IMG]
    ①. Vấn đề cấp nguồn, IC AT89C51 làm việc với mức nguồn 5V, nguồn nuôi cần có độ ổn định tốt. Do vậy Bạn nên dùng ic ổn áp 7805 để có nguồn 5V cấp cho IC này.
    ②. Ở mạch reset, Bạn dùng tụ khoảng 10μF và điện trở có trị 10KΩ để tạo ra mức áp cao ngay khi mạch được cấp điện, với mức áp cao xuất hiện trên chân số 9, IC sẽ vào trạng thái reset, nó trả các thanh ghi trong IC về trạng thái reset và quay lại chạy dòng lệnh từ thanh 0000h trong bộ nhớ ROM.
    ③. Muốn ic lập trình hoạt động Bạn phải gắn thạch anh trên chân 18, 19 dùng để định tần cho mạch dao động tạo xung nhịp. Thạch anh thường dùng trong thực nghiệm là 12MHz, vậy chu kỳ thực hiện lệnh sẽ là 1μs.
    ④. Nếu chỉ làm thực nghiệm với các câu lệnh có trong bộ nhớ ROM bên trong, nghĩa là không dùng bộ nhớ ngoài, Bạn cho treo chân 31 lên mức áp cao.
    Khi đã thoả mãn 4 điều kiện trên, bây giờ Bạn đã có thể dùng các câu lệnh nạp vào bộ nhớ ROM và dùng ic AT89C51 để làm các công việc mà Bạn muốn.

    2. Mạch điện ứng dụng cơ bản của ic lập trình AT89C51.
    Trên bo thực hành đa dụng, Bạn thấy chung quanh ic lập trình đơn phiến AT89C51 có dùng đến các ic 74245 làm tầng khuếch đại dùng điều khiển việc xuất nhập của các bit ra vào trên các cảng của IC.
    [​IMG]
    Trước hết chúng ta hãy tìm hiểu công dụng của các ic 74HC245.
    [​IMG]
    Hình trên cho thấy, ic logic 74HC245 có 8 tầng khuếch đại song hướng. IC làm việc với chân cuối của hàng dưới, chân 10, cho nối masse và chân cuối của hàng trên, chân 20, cho nối nguồn 5V. Các tầng khuếch đại với A0 - B0, A1- B1, A2 - B2, A3 - B3, A4 - B4, A5 - B5, A6 - B6, A7 - B7. Chân 19 /OE dùng kích mở hoạt động của ic khi nó ở mức volt thấp, hay cho nối masse, khi chân này treo ở mức áp cao, các ngả xuất nhập sẽ cho ở trạng thái thứ ba, nghĩa là trạng thái có trở kháng vô cùng lớn, xem như hở mạch. Chân số 1 chọn hướng đi cho tín hiệu. Khi chân DIR ở mức áp cao, thì tín hiệu vào bên A ra bên B và khi chân DIR ở mức áp thấp thì tín hiệu vào bên B và ra bên A. Tóm lại, người ta dùng ic 74HC245 để khuếch đại tăng cường cho các cảng của ic lập trình AT89C51.
    Vậy, có thể thấy, trong sơ đồ mạch điện trên, khi 4 khóa điện trong S đều để hở thì các chân DIR đều cho ở mức áp cao, lúc này tín hiệu vào bên A và ra bên B, hay có thể nói nó dùng cho mode xuất bit trên 4 cảng của AT89C51. Nếu muốn nhập bit vào các cảng của ic AT89C51 chúng ta phải đặt chân DIR xuống mức áp thấp. Trong mạch người ta còn dùng các điện trở thanh để treo áp các chân lên mức áp cao.
    Vậy sơ đồ mạch điện này cho thấy phần mạch trung tâm dùng chạy ic lập trình đơn phiến AT89C51, Bạn có thể dùng bó dây nối 8 đường cho kết nối các cổng p0, p1, p2 và p3 đến các bộ phận chịu tác động điều khiển khác cũng trang bị trên bo để làm thực hành với bo mạch đa dụng này.

    3. Cấu trúc của các chương trình nguồn.

    Bạn cho gắn 8 Led với các chân cathode nối masse và các chân anode nối vào cảng p1. Sơ đồ mạch điện như hình sau:
    [​IMG]
    Bây giờ Bạn hãy viết một chương trình nguồn để 8 Led nầy lần lượt sáng lên từng Led và khi 8 Led đã sáng hết thì cho tắt hết 8 Led và rồi bắt đầu lại.
    Phân tích cách viết chương trình nguồn trên:
    [​IMG]
    [​IMG]
    [​IMG]
    Các câu lệnh setb p1.x tiếp theo sẽ lần lượt làm cho các Led trên các chân p1.1, p1.2, p1.3. p1.4. p1.5, p1.6, p1.7 sáng lên. Chúng ta thấy như hình minh họa sau:
    [​IMG]
    [​IMG]

    Phân tích đoạn chương trình dùng làm chậm:
    [​IMG]
    Sau cùng dùng giả lệnh end để báo cho dừng biên dịch tại dòng này. Như vậy những dòng lệnh tiếp theo bên dưới giả lệnh end đều sẽ bỏ qua.
    Sau đây là chương trình nguồn, cũng làm các công việc giống như trên, được viết theo ngôn ngữ lập trình C.
    Góp ý của người soạn: Nếu Bạn là dân thợ điện tử, và mới làm quen với ic lập trình AT89C51, Bạn nên học viết chương trình nguồn với Assembler, các câu lệnh trong Assembler gắn với phần mạch nhiều hơn nên dễ hiểu hơn. Trong bài viết này, các bài tập tôi sẽ chỉ dùng câu lệnh viết với Assembler và cố gắng gắn các câu lệnh này với phần mạch điện để Bạn mau tiếp thu hơn. Phần dùng ngôn ngữ lập trình C, chúng ta sẽ nói đến trong các bài viết khác.

    4. Tìm hiểu trình biên dịch MIDE-51
    Sau khi cài xong trình MIDE-5, trên desktop máy tính của Bạn sẽ thấy có tiêu hình như hình sau: Muốn mở trình MIDE-5, Bạn nháy chuột 2 nhịp nhanh trên tiêu hình này.
    [​IMG]
    Giao diện của trình MIDE-51 hiện ra như hình sau:
    [​IMG]
    Bạn cho mở các file có họ .asm hay cắt các câu lệnh của assembler dán vào vùng biên soạn này để sửa đổi rồi cho biên dịch ra các dòng mã lệnh:
    [​IMG]
    Một thí dụ: Tôi cắt rồi dán các câu lệnh trên vào vùng soạn thảo của MIDE-51, sau khi đặt cho nó một cái tên "8 led p1.asm", save lại và nhấn phím F9 để cho dịch các câu lệnh ra dòng mã lệnh. Kết quả có file "8 led p1.hex" như sau:
    [​IMG]
    Nội dung trong file "8 led p1.hex" là các dòng lệnh được ghi lại với mã thập lục phân.
    Bây giờ Bạn chỉ dùng một hộp nạp mà Bạn có, cho nạp các dòng mã lệnh vào ic lập trình AT89C51. Đến đây là xong chuyện, Bạn đã "cấy phần hồn" vào bộ nhớ của IC. Nếu gắn IC vào mạch thực nghiệm, nó sẽ làm đúng các công việc mà Bạn muốn nó làm, tuyệt đổi không bao giờ biết "kêu ca" nếu nguồn điện cấp cho mạch vẫn còn đủ.

    5. Hộp nạp.
    Hiện nay trên thị trường có rất nhiều bo nạp ROM dùng cho các loại ic lập trình, ở đây tôi giới thiệu một bo nạp "cổ điển", Bạn có thể mua kit về tự ráp, hay mua bo đã ráp sẵn cũng có. Bo không đắc tiền, dưới 100.000 đồng, nhưng số ic lập trình mà bo chịu nạp cũng ít thôi. Nếu chỉ dùng nạp cho nhóm các ic AT89Cxxxx thì có bo này cũng đủ dùng.
    [​IMG]
    Nguyên lý vận hành của bo nạp này như sau:
    Phân tích mạch nguồn nuôi:
    Với IC ổn áp 7805, mức áp ngả ra trên chân Output sẽ là 5V, ở đây Bạn dùng tụ lọc nhỏ C4 (10m F) để dập hiện tượng daođộng tự kích bên trong IC. Nhìn vào hình, Bạn thấy IC ổn áp 7805 dùng vỏ TO220, ởđây chú ý cách bố trí các chân IN, GND và chân OUTPUT (loại IC này chân giữa luôn cho nối masse). Bạn nhớ với các IC viđiều khiển, mức áp nguồn nuôi phải rất ổnđịnh, sự bất ổn định trênđường nguồn sẽ làm cho IC hoạtđộng không ổn định.
    Chúng ta biết các IC CPU thường làm việc ở mức nguồn chuẩn +5V, nó cần đường nguồn có độ ổn định rất cao. Trong mạch này, người ta dùng cầu nắn dòng với 4 diode (khoảng 1A) và tụ lọc C8 (470m F) để tạo ra đường nguồn khoảng 15V (với mức nguồn AC ở ngả vào là 12V). Tụ nhỏ C9 (0.1m F) dùng lọc bỏ nhiễu tần cao nhiễm trên đường nguồn. Dùng Led đỏ và điện trở hạn dòng 1.2K để chỉ thị. Từ đường nguồn DC lấy trên tụ C8, qua IC 7805, chúng ta sẽ lấy ra được mức áp +5V có độ ổn định cao. Mức nguồn này sẽ cấp cho chân 40 của các IC vi điều khiển U1 (89C51 Master), U2 (89C51 Slave) và chân 16 của IC MAX232.
    Trong mạch còn dùng IC ổn áp có chân định áp ngả ra (Adjustment) LM317, ở IC LM317 Bạn có thể dùng 2điện trở cho lấy tín hiệu hồi tiếp ở ngả ra trả về chân Adj, sự thayđổi của cácđiện trở này sẽ làm thayđổi mức áp DC ở ngả ra. Ởđây, khi Q1 bão hòa, mức áp trên chân Adj xác lập theo cácđiện trở 270 và 2.2K//1.2K, lúc nàyđiện áp ra sẽ cho ở mức áp 5V. Mức áp này cấp cho chân số 31 của U2 (AT89C51, Slave). Chân 31 là chân _EA/Vpp (External Access), khi nó bịđặt ở mức áp cao (5V), IC viđiều khiển U2 (AT89C51) sẽ không truy cập các chương trình nằm ở bộ nhớ bên ngoài, nghĩa là nó sẽ chỉ chạy các chương trìnhđãcó trong bộ nhớ EEPROM bên trong AT89C51.Chúng ta còn biết, nhà thiết kế còn sử dụng chân 31 (Vpp), khi đưa chân này lên mức áp 12V,đểcho xóa các chương trìnhđãcó trong bộ nhớ EEPROM, trước khi cho nạp các chương trình mã lệnh mới vào bộ nhớ EEPROM trong IC lập trình AT89C51.Đểcho nạp các chương trình mã lệnh lấy vào trên các cảng nhập xuất P0, P1, P2, Bạn hãy cho chân 31 lên mức áp VPP = 12V.Đểlàmđiều này, mức áp ra trên chân số 13 của U1 (AT89C51, Master) sẽ chuyển xuống mức thấp (mức “0”), nó sẽ làm ngưng dẫn Q1, như vậyđiện trở 1.2K trên chân C của Q1đãđuợc cho cắt masse, nó làm tăngđiện trở nối masse của chân Adj của ic ổn áp LM317,điều này sẽ khiến cho mức áp ra trên chân Out của LM317 tăng lên 12V,điều này sẽ cho xóa các dữ liệuđãcó trong bộ nhớ EEPROM và cho ghi vào các dòng lệnh mới.
    Ghi chú: Nếu nguồn nuôi DC thấp hay vì lý do nào đó, chân 31 của U2 (89C51, Slave) không lênđủcao (12V), lúcđóviệc càiđặt sẽ không thành công, Bạn sẽ thấy xuất hiện chữ Failed (thay vì là chữ Complete) trên cửa sổ của các phần mềm càiđặt (của EZ4.EXE)đặt LED chỉ thị màu xanh,điện trở hạn dòng 470 và diode Zener có Vz=5.6V. Vậy khi bình thuờng mức áp ở chân 31 là 5V, Led chỉ thị màu xanh sẽ không phát sáng. Khi vào mode ghi nó lên 12V, LED này sẽ phát sángđểbáo cho Bạn biết trạng thái mức áp trên chân số 31.

    Để kiểm tra mạch nguồn, Bạn cấp điện cho mạch, đo áp trên ngả ra của IC ổn áp 7805, mức áp sẽ là 5V, lấy một bóng đen tim làm tải, nếu khi có cho mang tải nặng mà mức áp không giảm xuống, là mạch nguồn 5V tốt.

    Đo volt trên ngả ra của IC ổn áp LM317, cho chân B của Q1 nối masse, nếu mức áp trên chân Out của LM317 tăng lên mức 12V là tốt (Khi kiểm tra nguồn, Bạn không cần gắn các ic AT89C51 U1, U2 vào bo).

    Tóm lại, khi dùng bo nạp này, trước hết Bạn phải có phần mềm EZ4.EXE. Cho bo nạp kết nối với máy tính qua cổng COM, kích mở phần mềm này, chọn đúng tên ic cần nạp, nếu trình EZ4 nhận thấy bo nạp, Bạn hãy nhấn nút cho nạp, file mã lệnh có họ là .hex mà Bạn đã chọn sẽ qua ic AT89C51 Master cho nạp vào bộ nhớ EEPROM của ic lập trình AT89C51 mà Bạn đã cắm trên bộ chân Slave của bo nạp.
    Giới thiệu bo hộp nạp TOP853:
    Đây là hộp nạp đã được giới thiệu trên trang web phuclanshop.com, Bạn vào trang nầy để xem cách hướng dẫn sử dụng.
    [​IMG]

    6. Hướng dẫn làm thực hành trên bo thực hành đa dụng dùng IC AT89C51.
    Hình chụp cho thấy toàn phần một bo thực hành, dùng với ic lập trình AT89C51. Chúng ta biết ic lập trình như AT89C51... có thể làm được rất nhiều công việc, nó tùy thuộc vào các mạch điện kết nối trên các cảng và cũng tùy thuộc vào chương trình nguồn mà Bạn đã soạn ra và cho nạp vào bộ nhớ EEPROM. Do vậy ngày nay trên thị trường đã có rất nhiều bo mạch mà trên đó người ta đã tạo ra rất nhiều kiểu mạch thực dụng để Bạn có thể làm thực hành với ic lập trình một cách tiện lợi, vậy nếu thấy thích Bạn có thể tìm mua về tự học lập trình với các kiểu mạch điện đã được trang bị trên bo mạch này. Ở bài này tôi giới thiệu một bo mạch thực hành ráp ở nội địa có giá bán thấp để Bạn tìm hiểu, ngoài ra còn rất nhiều bo mạch thực hành ngoại nhìn rất "bắt mắt" nhưng giá bán cao, dĩ nhiên rồi, theo tôi nếu chỉ dùng để làm thực hành cho các bài học lập trình Bạn tìm các bo thực hành ráp ở chợ Nhật Tảo P7-Q10 cũng được rồi, thậm chí Bạn tự ráp các phần mạch điện thực hành riêng rẽ dùng cho từng bài tập thực hành cũng được.
    [​IMG]
    Các bài thực hành có thể làm trên board này gồm có:
    ❶. Làm thực hành với 32 Led trên 4 cảng p0, p1, p2, p3
    [​IMG]
    Sơ đồ mạch điện trên cho thấy, trên bo thực hành đa dụng có 32 Led, chia ra làm 4 nhóm. Bạn dùng bó nối loại 8 dây, cho nối các Led này vào các cảng của ic lập trình AT89C51, rồi tự nghĩ ra các kiểu nhấp nháy của các Led, sau đó mở trình MIDE-51, thử tự dùng các câu lệnh Assembler để viết các chương trình nguồn và rồi cho biên dịch ra thành các dòng mã lệnh, dùng hộp nạp cho nạp các dòng mã lệnh này vào bộ nhớ EEPROM của ic lập trình, sau đó gắn ic AT89C51 và bo mạch thực hành và cấp điện cho chạy thử, xem diễn biến trên các Led có đúng với ý muốn của Bạn không? Nếu không đúng thì hãy tập trung suy nghĩ để tìm ra lý do, cứ làm đi làm lại những công việc này, Bạn sẽ tích lũy được nhiều kinh nghiệm trong việc lập trình, đó là bước khởi đầu rất tốt để tự học cách dùng loại IC lập trình.
    Cho một thí dụ: Tôi muốn lập trình, tức viết các câu lệnh, để có kiểu chớp của các Led như hình sau:
    [​IMG]
    Trước hết Bạn hãy chọn định các kiểu nhấp nháy tùy thích, sau đó tìm cách dùng các câu lệnh, viết ra chương trình nguồn để ic lập trình AT89C51 tự động làm ra được điều Bạn muốn. Để làm được kiểu nháy như trên Bạn có thể viết chương trình nguồn như sau:
    Trong nhiều bài viết trước đây, chúng tôi cũng đã trình bày về cách dùng Assembler để viết các chương trình nguồn cho các ic lập trình. Bạn có thể tìm đọc lại. Để hiểu rõ hơn các câu lệnh dùng cho ic lập trình AT89C51. Bạn có thể vào đọc bài viết này.
    [​IMG]

    ❷. Làm thực hành với 8 đèn số dùng Led mã 7 đoạn.
    Hình vẽ sau cho thấy trên bo thực hành có 8 đèn số dùng Led mã 7 đoạn để cho hiển thị các số thập phân. Trong phần thực hành này, chúng tôi sẽ trình bày cách viết chương trình đồng hồ chỉ thời gian dùng 6 đèn số của bảng đèn này.
    [​IMG]

    ❸. Làm thực hành với bảng Led ma trận 8x8.
    Đây là sơ đồ mạch điện ứng với phần thực hành dùng đèn Led ma trận 8x8 để cho hiện hình và chạy chữ, để Bạn hiểu rõ cách dùng loại đèn Led ma trận, chúng tôi viết thêm một bài phụ, Bạn hãy vào xem.
    [​IMG]

    Nguồn: phuclanshop​



     

    Bài viết khác:

    Đã được đổ xăng bởi Petrolimex-vn.
  2. truonghoat
    Offline

    Tài xế O-H
    Expand Collapse

    Tham gia ngày:
    15/4/09
    Số km:
    209
    Được đổ xăng:
    9
    Mã lực:
    36
    Giới tính:
    Nam
    Xăng dự trữ:
    17 lít xăng
    Bác viết tiếp đi ạ, một vài ví dụ nữa cho bẹn em học với
     
  3. fangiacdi
    Offline

    Tài xế O-H
    Expand Collapse

    Tham gia ngày:
    29/7/11
    Số km:
    124
    Được đổ xăng:
    34
    Mã lực:
    51
    Xăng dự trữ:
    272 lít xăng
    #3 fangiacdi, 23/9/13
    Last edited by a moderator: 23/9/13
    Ðề: Hướng dẫn thực hành lập trình với IC vi điều khiển AT89C51

    Cách tính trễ lòng vòng vậy sẽ là bao nhiêu s bác...bác giải thích giúp anh em.Theo như em hiểu thì trễ có khoẳng gần xấp xỉ 0.3s........
     

Chia sẻ trang này