• Webdien.com - Cầu nối dân điện


    1. [HOT] - Webdien đang tuyển các vị trí quản lý cao cấp

      ntech.com.vn

  • Trang 1 của 2 12 CuốiCuối
    Kết quả 1 đến 10 của 12
    1. #1
      Tham gia
      28-10-2009
      Địa chỉ
      Spkt Vinh and sp Vinh
      Bài viết
      20
      Cảm ơn
      24
      Được cảm ơn 79 lần, trong 9 bài

      Mặc định lập trình cổng bằng 8051

      MỞ ĐẦU:
      Hiện nay trong các ứng dụng nhỏ thì 8051 rất phổ biến.do số port có hạn nên việc mở rộng là rất cần thiết. Giao tiếp giữa 8051-8051 cũng là 1 ứng dụng mở rộng port và giao tiếp qua lại giữa các thiết bị.
      GIỚI THIỆU LỆNH:
      Ngắt của 8051
      8051 chỉ có một số lượng khá ít các nguồn ngắt (interrupt source) hoặc có thể gọi là các nguyên nhân ngắt. Mỗi ngắt có một vector ngắt riêng, đó là một địa chỉ cố định nằm trong bộ nhớ chương trình, khi ngắt xảy ra, CPU sẽ tự động nhảy đến thực hiện lệnh nằm tại địa chỉ này. Bảng tóm tắt các ngắt trong 8051 như sau:




      Liên quan đến ngắt chủ yếu có hai thanh ghi là thanh ghi IE và thanh ghi IP.



      Để cho phép một ngắt, bit tương ứng với ngắt đó và bit EA phải được đặt bằng 1. Thanh ghi IE là thanh ghi đánh địa chỉ bit, do đó có thể dùng các lệnh tác động bit để tác động riêng rẽ lên từng bit mà không làm ảnh hưởng đến giá trị các bit khác. Cờ ngắt hoạt động độc lập với việc cho phép ngắt, điều đó có nghĩa là cờ ngắt sẽ tự động đặt lên bằng 1 khi có sự kiện gây ngắt xảy ra, bất kể sự kiện đó có được cho phép ngắt hay không. Do vậy, trước khi cho phép một ngắt, ta nên xóa cờ của ngắt đó để đảm bảo sau khi cho phép, các sự kiện gây ngắt trong quá khứ không thể gây ngắt nữa. Ví dụ trước khi cho phép ngắt timer0 mà timer 0 đã chạy và tràn (dù là tràn một hay nhiều lần) thì cờ TF0 sẽ bằng 1, nếu sau đó ta cho phép ngắt timer0 thì sẽ gây ra ngắt ngay do cờ tràn đang bằng 1 (sự kiện tràn gây ngắt trong trường hợp này là tràn trong quá khứ, không phải sự kiện ta quan tâm đến). Vì vậy hãy xóa cờ TF0 trước khi cho phép ngắt tràn
      timer0. Ngoại trừ cờ của của ngắt nối tiếp (và cờ của ngắt timer2 trong 8052), các cờ ngắt khác đều tự động được xóa khi CPU thực hiện chương trình phục vụ ngắt. Lý do là ngắt cổng nối tiếp (và ngắt timer2 trong 8052) được gây ra bởi 2 nguyên nhân (có 2 cờ cho mỗi ngắt), khi xảy ra ngắt, người lập trình cần phải kiểm tra xem cờ nào được đặt bằng 1 để phân biệt nguyên nhân gây ra ngắt đó là nguyên nhân nào để xử lý thích hợp.
      Ví dụ ngắt cổng nối tiếp là ngắt được gây ra bởi 1 trong 2 nguyên nhân: vi điều khiển nhận xong hoặc truyền xong một byte dữ liệu qua cổng nối tiếp. Xảy ra sự kiện nào thì cờ ngắt tương ứng sẽ tự động được đặt lên bằng 1, nếu nhận xong thì cờ RI bằng 1, nếu truyền xong thì cờ TI bằng 1. Trong chương trình xử lý ngắt, người lập trình phải kiểm tra cờ TI hay cờ RI bằng 1 để quyết định xử lý ngắt truyền hay xử lý ngắt nhận. Sau khi kiểm tra, người lập trình phải viết lệnh xóa cờ đó vì việc này không được CPU thực hiện tự động như các cờ ngắt khác. Nói đến ngắt không thể không nói đến mức ưu tiên của ngắt. Mức ưu tiên của ngắt ở đây có thể được hiểu là sự phân bậc, quyết định xử lý ngắt nào khi hai hay nhiều ngắt xảy ra. Có 2 cơ chế phân bậc ưu tiên. Thứ nhất là cơ chế phân bậc dành cho các ngắt xảy ra đồng thời, hai ngắt A và B xảy ra cùng một thời điểm nhìn từ phía vi điều khiển. Thứ hai là cơ chế phân bậc dành cho các ngắt xảy ra xen kẽ nhau, trong khi đang xử lý ngắt A thì ngắt B xảy ra, vậy thì trong từng trường hợp, CPU sẽ xử lý ra sao? Hãy xem dưới đây.
      Với trường hợp các ngắt xảy ra đồng thời, CPU sẽ xem xét mức ưu tiên của các ngắt đó, từ đó quyết định xử lý ngắt có mức ưu tiên cao hơn trước. Mức ưu tiên trong trường hợp này là mức ưu tiên cứng (được quy định bởi nhà sản xuất, bởi cấu trúc sẵn có của 8051 và người lập trình không thể thay đổi được).



      Nhìn vào bảng trên ta thấy ngắt INT0 là ngắt có mức ưu tiên cao nhất và ngắt timer2 là ngắt có mức ưu tiên thấp nhất trong số các ngắt. Như vậy nếu ngắt ngoài 1 và ngắt timer0 cùng xảy ra một lúc, ngắt ngoài 1 sẽ được CPU xử lý trước, sau đó mới xử lý ngắt timer0. Với trường hợp xảy ra ngắt xen kẽ, khi CPU đang xử lý ngắt A mà ngắt B xảy ra, CPU sẽ giải quyết theo 2 hướng: tiếp tục xử lý ngắt A nếu mức ưu tiên của ngắt B không cao hơn mức ưu tiên của ngắt A, hoặc sẽ dừng việc xử lý ngắt A lại, chuyển sang xử lý ngắt B nếu mức ưu tiên của ngắt B cao hơn mức ưu tiên của ngắt A. Mức ưu tiên cho các ngắt trong trường hợp này không phải là mức ưu tiên cứng do nhà sản xuất quy định (tức là không căn cứ vào bảng trên) mà là do người lập trình đặt. Người lập trình có thể dùng thanh ghi IP để quy định mức ưu tiên cho các ngắt ở một trong hai mức: mức cao và mức thấp. Để đặt mức ưu tiên của một ngắt (trong trường hợp xảy ra xen kẽ) ở mức cao, ta đặt bit tương ứng với ngắt đó trong thanh ghi IP bằng 1, mức thấp ứng với giá trị bit = 0.
      Thanh ghi IP (Interrupt Priority)




      Các bit trong thanh ghi IP tương ứng với các ngắt đúng như trong thanh ghi IE (bit PX0 dành cho ngắt ngoài 0, bit PT0 dành cho ngắt timer 0…)Một điều dễ nhận ra là nếu một ngắt được đặt mức ưu tiên cao (bit tương ứng trong thanh ghi IP bằng 1) thì sẽ chẳng có ngắt nào có thể xen vào quá trình xử lý nó được nữa.
      Nói về mức ưu tiên ngắt, có thể dùng một ví dụ tổng quát sau, giả sử hai ngắt timer0 và ngắt cổng nối tiếp cùng được cho phép (các bit tương ứng và bit EA trong thanh ghi IE được đặt bằng 1), bit PT0 = 0, bit PS = 1 thì:
      - Nếu hai ngắt cùng xảy ra, ngắt timer0 sẽ thắng thế và được phục vụ trước.
      - Nếu ngắt cổng nối tiếp xảy ra trước và đang được xử lý thì ngắt timer0 nếu có xảy ra cũng không thể chen vào, làm dừng quá trình xử lý ngắt cổng nối tiếp được.
      - Nếu ngắt timer0 xảy ra trước và đang được xử lý mà ngắt cổng nối tiếp xảy ra thì CPU sẽ phải dừng việc xử lý ngắt timer0 lại, chuyển sang xử lý ngắt cổng nối tiếp, xử lý xong mới quay lại xử lý tiếp ngắt timer0.
      3.6.2. Ngắt Timer/Counter trong 8051:
      8051 có 2 timer tên là timer0 và timer1. Các timer này đều là timer 16bit, giá trị đếm max do đó bằng 216 = 65536 (đếm từ 0 đến 65535). Hai timer có nguyên lý hoạt động hoàn toàn giống nhau và độc lập. Sau khi cho phép chạy, mỗi khi có thêm một xung tại đầu vào đếm, giá trị của timer sẽ tự động được tăng lên 1 đơn vị, cứ như vậy cho đến khi giá trị tăng lên vượt quá giá trị max mà thanh ghi đếm có thể biểu diễn thì giá trị đếm lại được đưa trở về giá trị min (thông thường min = 0). Sự kiện này được hiểu là sự kiện tràn timer (overflow) và có thể gây ra ngắt nếu ngắt tràn timer được cho phép (bit ETx trong thanh ghi IE = 1).Việc cho timer chạy/dừng được thực hiện bởi các bit TR trong thanh ghi TCON (đánh địa chỉ đến từng bit).



      mặc dù vẫn có xung đưa vào. Khi dừng không đếm, giá trị của timer được giữ nguyên.
      Các bit TFx là các cờ báo tràn timer, khi sự kiện tràn timer xảy ra, cờ sẽ được tự động đặt lên bằng 1 và nếu ngắt tràn timer được cho phép, ngắt sẽ xảy ra. Khi CPU xử lý ngắt tràn timerx, cờ ngắt TFx tương ứng sẽ tự động được xóa về 0.
      Giá trị đếm 16bit của timerx được lưu trong hai thanh ghi THx (byte cao) và TLx (byte thấp). Hai thanh ghi này có thể ghi/đọc được bất kỳ lúc nào. Tuy nhiên nhà sản xuất khuyến cáo rằng nên dừng timer (cho bit TRx = 0) trước khi ghi/đọc các thanh ghi chứa giá trị đếm. Các timer có thể hoạt động theo nhiều chế độ, được quy định bởi các bit trong thanh ghi TMOD (không đánh địa chỉ đến từng bit).




      Để xác định thời gian, người ta chọn nguồn xung nhịp (clock) đưa vào đếm trong timer là xung nhịp bên trong (dành cho CPU). Nguồn xung nhịp nàythường rất đều đặn (có tần số ổn định), do đó từ số đếm của timer người ta có thể nhân với chu kỳ xung nhịp để tính ra thời gian trôi qua. Timer lúc này được gọi chính xác với cái tên “timer”, tức bộ định thời. Để đếm các sự kiện bên ngoài, người ta chọn nguồn xung nhịp đưa vào đếm trong timer là tín hiệu từ bên ngoài (đã được chuẩn hóa về dạng xung vuông 0V/5V). Các tín hiệu này sẽ được nối với các bit cổng có dồn kênh thêm các tính năng T0/T1/T2. Khi có sự kiện bên ngoài gây ra thay đổi mức xung ở đầu vào đếm, timer sẽ tự động tăng lên 1 đơn vị giống như trường hợp đếm xung nhịp bên trong. Lúc này, timer được gọi chính xác với cái tên khác: “counter”, tức bộ đếm (sự kiện).
      Nhìn vào bảng mô tả thanh ghi TMOD bên trên, ta có thể nhận thấy có 2 bộ 4 bit giống nhau (gồm GATEx, C/Tx, Mx0 và Mx1) dành cho 2 timer0 và 1. Ý nghĩa các bit là như nhau đối với mỗi timer. Bit GATEx quy định việc cho phép timer đếm (run timer). Nếu GATEx = 0, timerx sẽ đếm khi bit TRx bằng 1, dừng khi bit TRx bằng 0. Nếu GATEx = 1, timerx sẽ chỉ đếm khi bit TRx = 1 và tín hiệu tại chân INTx = 1, dừng khi một trong hai điều kiện trên không còn thỏa mãn. Thông thường người ta dùng timer với GATE = 0, chỉ dùng timer với GATE = 1 trong trường hợp muốn đo độ rộng xung vì lúc đó timer sẽ chỉ đếm thời gian khi xung đưa vào chân INTx ở mức cao. Bit C/Tx quy định nguồn clock đưa vào đếm trong timer. Nếu C/Tx = 0,
      timer sẽ được cấu hình là bộ định thời, nếu C/Tx = 1, timer sẽ được cấu hình là bộ đếm sự kiện.
      Hai bit còn lại (Mx0 và Mx1) tạo ra 4 tổ hợp các giá trị (00,01,10 và 11) ứng với 4 chế độ hoạt động khác nhau của timerx. Trong 4 chế độ đó thường chỉ dùng chế độ timer/counter 16bit (Mx1 = 0, Mx0 = 1) và chế độ Auto Reload 8bit timer/counter (Mx1 = 1, Mx0 = 0).
      Trong chế độ timer/counter 16bit, giá trị đếm (chứa trong hai thanh ghi THx và TLx) tự động được tăng lên 1 đơn vị mỗi lần nhận được thêm một xung nhịp. Khi giá trị đếm tăng vượt quá giá trị max = 65535 thì sẽ tràn về 0, cờ ngắt TFx được tự động đặt = 1. Chế độ này được dùng trong các ứng dụng đếm thời gian và đếm sự kiện. Trong chế độ Auto Reload 8bit, giá trị đếm sẽ chỉ được chứa trong thanh ghi TLx, còn giá trị của thanh ghi THx bằng một số n (từ 0 đến 255) do người lập trình đưa vào. Khi có thêm 1 xung nhịp, giá trị đếm trong TLx đương nhiên cũng tăng lên 1 đơn vị như bình thường. Tuy nhiên trong trường hợp này, giá trị đếm lớn nhất là 255 chứ không phải 65535 như trường hợp trên vì timer/counter chỉ còn 8bit. Do vậy sự kiện tràn lúc này xảy ra nhanh hơn, chỉ cần vượt quá 255 là giá trị đếm sẽ tràn. Cờ ngắt TFx vẫn được tự động đặt = 1 như trong trường hợp tràn 16bit. Điểm khác biệt là thay vì tràn về 0, giá trị THx sẽ được tự động nạp lại (Auto Reload) vào thanh ghi TLx, do đó timer/counter sau khi tràn sẽ có giá trị bằng n (giá trị chứa trong THx) và sẽ đếm từ giá trị n trở đi. Chế độ này được dùng trong việc tạo Baud rate cho truyền thông qua cổng nối tiếp. Để sử dụng timer của 8051, hãy thực hiện các bước sau:
      - Quy định chế độ hoạt động cho timer bằng cách tính toán và ghi giá trị cho
      các bit trong thanh ghi TMOD.
      - Ghi giá trị đếm khởi đầu mong muốn vào 2 thanh ghi đếm THx và TLx. Đôi khi ta không muốn timer/counter bắt đầu đếm từ 0 mà từ một giá trị nào đó để thời điểm tràn gần hơn, hoặc chẵn hơn trong tính toán sau này. Ví dụ nếu cho timer đếm từ 15535 thì sau 50000 xung nhịp (tức 50000 microgiây với thạch anh 12MHz) timer sẽ tràn, và thời gian một giây có thể dễ dàng tính ra khá chính xác = 20 lần tràn của timer (đương nhiên mỗi lần tràn lại phải nạp lại giá trị 15535).
      - Đặt mức ưu tiên ngắt và cho phép ngắt tràn timer (nếu muốn).
      - Dùng bit TRx trong thanh ghi TCON để cho timer chạy hay dừng theo ý muốn.





      CODE:
      IC PHÁT:
      $mod51
      ORG 00H

      MOV P1,#0FFH
      MOV R0,#00H
      MOV SCON,#50H
      MOV TMOD,#20H
      MOV TH1,#-13
      SETB TR1

      AGAIN:

      MOV A,R0
      MOV SBUF,A



      HERE1:
      JNB TI,HERE1
      CLR TI
      INC R0

      HERE2:
      JNB RI,HERE2
      CLR RI
      MOV A,SBUF
      MOV P1,A

      CALL DELAY
      CJNE A,#0FH,AGAIN

      DELAY: ;
      PUSH 00H
      MOV R5,#1
      MOV TMOD,#01H
      LOOP2:
      MOV TH0,HIGH(-1)
      MOV TL0,LOW(-1)
      SETB TR0
      JNB TF0,$
      CLR TR0
      CLR TF0
      DJNZ R5,LOOP2
      POP 00H
      RET

      END
      CODE IC THU:
      $mod51
      ORG 00H

      MOV P1,#0FFH

      MOV R3,#0FH
      MOV SCON,#50H;che do 1,8bit,
      MOV TMOD,#20H;che do 1,dk phan mem,8bit tu dong nap lai
      MOV TH1,#-13
      SETB TR1;dk hoat dong timer 1,0 dung, 1 chay

      HERE1:

      JNB RI,HERE1
      CLR RI
      MOV A,SBUF;thanh ghi dem
      MOV P1,A

      CALL DELAY

      MOV A,R3
      MOV SBUF,A

      HERE2:
      JNB TI,HERE2
      CLR TI
      DEC R3
      CALL DELAY
      CJNE A,#00H,HERE1
      DELAY: ;
      PUSH 00H
      MOV R6,#1
      MOV TMOD,#01H
      LOOP2:
      MOV TH0,HIGH(-1)
      MOV TL0,LOW(-1)
      SETB TR0
      JNB TF0,$
      CLR TR0
      CLR TF0
      DJNZ R6,LOOP2
      POP 00H
      RET

      END




      các pác yên tâm nó làm việc thì rất tốt.. mà học vi xử lý tốt thì có nhiều thuận lợi đấy!!

      --------------------------------------------------------------------------------
      Xem bài viết cùng chuyên mục:

      Hãy sống thực với lòng mình chúng ta sẽ thấy thoái mái hơn!!!!Hãy để những phần tốt nảy nở như hoa mùa xuân phần xấu dần mất đi

    2. The Following 3 Users Say Thank You to tran van thuong For This Useful Post:


    3. #2
      Tham gia
      25-01-2010
      Địa chỉ
      Đồng Nai
      Bài viết
      1,047
      Cảm ơn
      301
      Được cảm ơn 691 lần, trong 403 bài

      Mặc định

      Giờ mà còn xài 8051 trong thực tế hả? thời tớ học cách đây 8 năm đã ráp mạch điều khiển bằng con 8951 rồi, 8051 chỉ là trên giấy thôi.

    4. #3
      Tham gia
      26-01-2010
      Bài viết
      56
      Cảm ơn
      42
      Được cảm ơn 25 lần, trong 19 bài

      Mặc định

      Trích dẫn Gửi bởi lightingbolt Xem bài viết
      Giờ mà còn xài 8051 trong thực tế hả? thời tớ học cách đây 8 năm đã ráp mạch điều khiển bằng con 8951 rồi, 8051 chỉ là trên giấy thôi.
      Thế nhưng bọn em ở trong trường vẫn phải học họ 8051 đó thôi,cũ nhưng không có nghĩa là hết giá trị sử dụng

    5. #4
      Tham gia
      25-01-2010
      Địa chỉ
      Đồng Nai
      Bài viết
      1,047
      Cảm ơn
      301
      Được cảm ơn 691 lần, trong 403 bài

      Mặc định

      Trích dẫn Gửi bởi SươngMùMẫuSơn Xem bài viết
      Thế nhưng bọn em ở trong trường vẫn phải học họ 8051 đó thôi,cũ nhưng không có nghĩa là hết giá trị sử dụng
      Hi hi, học thì đúng là vẫn học 8051, nhưng sinh viên thời của mình làm vào thực tế thì phải dùng 8951 (không phải là đi làm đâu nha, đây chỉ nói là làm các mạch điện như điều khiển bóng LED chạy chữ hay tương tự thôi).

    6. #5
      Tham gia
      25-10-2009
      Bài viết
      44
      Cảm ơn
      7
      Được cảm ơn 31 lần, trong 11 bài

      Mặc định

      Vui nhỉ, em thấy ứng dụng của mấy cái này hay thật nhưng để học và hiểu được nó thật không dễ chút nào

    7. #6
      Tham gia
      26-01-2010
      Bài viết
      56
      Cảm ơn
      42
      Được cảm ơn 25 lần, trong 19 bài

      Mặc định

      Em đang muốn tìm hiểu về điều khiển ĐC DC dùng 8051 để băm xung(PWM) đó.Anh em nào có chương trình bằng Assembly và mạch thì post lên nhé.Em chỉ cần cái modul đơn giản thôi.Em xin cảm ơn.

    8. #7
      Tham gia
      23-04-2011
      Bài viết
      9
      Cảm ơn
      12
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Ðề: lập trình cổng bằng 8051

      Em là newbie đọc bài của bác đến phần ưu tiên ngắt mà rối như tơ,mất khá t.g để xem lại tài liệu khác. Bác xem lại phần đó xem có gi sai xót k sửa lại cho đúng nhé

    9. #8
      Tham gia
      11-06-2009
      Bài viết
      161
      Cảm ơn
      14
      Được cảm ơn 118 lần, trong 64 bài

      Mặc định Ðề: lập trình cổng bằng 8051

      Nghĩ lại đc học và bit cái món này nhiều lúc làm một số ứng dụng trang trí (chạy chữ, đồng hồ...) cũng thấy hay đấy chứ nhỉ ?!
      +++---o0o---+++
      Trích dẫn Gửi bởi SươngMùMẫuSơn Xem bài viết
      Em đang muốn tìm hiểu về điều khiển ĐC DC dùng 8051 để băm xung(PWM) đó.Anh em nào có chương trình bằng Assembly và mạch thì post lên nhé.Em chỉ cần cái modul đơn giản thôi.Em xin cảm ơn.
      Dùng Assembly đk PWM, Cũng ko khó lắm đâu bạn, bạn chỉ cần khai báo và Mov giá trị xung mong muốn trog chương trình ra là đc. Phần cứng thì giống như việc đóng ngắt 1 rơle cho động cơ, thêm 1 con Fet để triết áp nữa thôi.

      CườngKim

    10. #9
      Tham gia
      11-10-2010
      Bài viết
      2
      Cảm ơn
      0
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Ðề: lập trình cổng bằng 8051

      em đang cần một chương trình con điều biến độ rộng xung, ai có mail cho em với : vantrinh0902@yahoo.com.vn
      thank!

    11. #10
      Tham gia
      08-03-2010
      Bài viết
      27
      Cảm ơn
      4
      Được cảm ơn 2 lần, trong 2 bài

      Mặc định Ðề: lập trình cổng bằng 8051

      Trích dẫn Gửi bởi bkc Xem bài viết
      Nghĩ lại đc học và bit cái món này nhiều lúc làm một số ứng dụng trang trí (chạy chữ, đồng hồ...) cũng thấy hay đấy chứ nhỉ ?!
      +++---o0o---+++


      Dùng Assembly đk PWM, Cũng ko khó lắm đâu bạn, bạn chỉ cần khai báo và Mov giá trị xung mong muốn trog chương trình ra là đc. Phần cứng thì giống như việc đóng ngắt 1 rơle cho động cơ, thêm 1 con Fet để triết áp nữa thôi.
      Bác vẽ luôn sơ đồ cho dễ hiểu nhé!
      I CAN ...

    Trang 1 của 2 12 CuốiCuối

    Trả lời với tài khoản Facebook

    Các Chủ đề tương tự

    1. Trợ giúp - Xem giúp em 8051 qua RS232 với VDK 8051 truyền dữ liệu 64H
      Bởi abcxyz1209 trong diễn đàn Vi xử lý - Vi điều khiển
      Trả lời: 1
      Bài cuối: 27-06-2014, 16:59
    2. Tập Lệnh 8051
      Bởi duyentran trong diễn đàn Vi xử lý - Vi điều khiển
      Trả lời: 60
      Bài cuối: 07-07-2013, 16:58
    3. Thảo luận - Nên học ASM hay C khi hoc lập trình cho 8051
      Bởi kakashi_cpl trong diễn đàn Vi xử lý - Vi điều khiển
      Trả lời: 35
      Bài cuối: 17-04-2013, 10:33
    4. Trợ giúp - Mọi người xem giúp mình mạch 8051 này với .
      Bởi tunglee091 trong diễn đàn Vi xử lý - Vi điều khiển
      Trả lời: 5
      Bài cuối: 04-02-2012, 18:24
    5. Trợ giúp - Mạch đếm sản phẩm dùng 8051
      Bởi tin_nit trong diễn đàn Vi xử lý - Vi điều khiển
      Trả lời: 1
      Bài cuối: 21-11-2011, 17:54

    Tag của Chủ đề này

    Văn Võ Trạng Nguyên
    Hắc Hiệp Đại Chiến Thánh Bài 2
    Đặc Cảnh Diệt Ma
    Khử Ma Đạo Trưởng
    Cương Thi Diệt Tà
    Sự Hình Thành Của Đế Chế Mông Cổ
    NHỮNG KHOẢNH KHẮC ĐÁNG NHỚ CỦA GIẢI GOLF PHÚ MỸ HƯNG 2016