PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 15-03-2006, 01:34 PM   #1
chuthong1
Nhập môn đệ tử
 
Tham gia ngày: Mar 2006
Bài gửi: 7
:
Gui Ban NTC!

Trích:
Nguyên văn bởi ntc
Không biết mọi người học PIC thế nào, còn mình, mình in cái datasheet của con PIC ra và nghiền ngẫm trong vòng ... 1 tháng. Tất nhiên là phải dựa trên một số kiến thức cơ bản về điện tử.


Minh Dang dc mot so VD cua ban va thay rat re hieu
Ban lam on pot het len de minh Xem co' dc ko


Cam on Ban Nhieu
chuthong1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-03-2006, 10:53 AM   #2
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Không dấu gì bạn, mỗi bài viết như vậy thông thường mình phải viết trong vòng ... nửa tháng. . Làm sao để cho cô đọng, tập trung và dễ hiểu nhất. Chứ đâu có sẵn đâu mà post lên hết một lần được.

Mục đích của những bài viết trên không phải là hướng dẫn từ A tới Z mọi thứ liên quan đến con PIC, mà chỉ là những vấn đề cơ bản nhất, và những bạn mới làm quen có thể cảm thấy dễ dàng hơn khi bắt đầu với PIC. Còn việc phát triển và ứng dụng các vấn đề đó thì mỗi người phải tự làm thôi. .

Còn các ví dụ, bạn có thể tìm thấy rất nhiều trong diễn đàn, trong các tài liệu, các Tutorial cung cấp trên diễn đàn. Đọc cũng dễ hiểu, dễ làm. Bạn tham khảo thêm nhé.

Tất nhiên picvietnam vẫn sẽ thường xuyên cung cấp thêm các Tutorial mới. Hy vọng sẽ đáp ứng được yêu cầu của các thành viên.

__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-03-2006, 07:04 PM   #3
Dang Khoa
Nhập môn đệ tử
 
Tham gia ngày: Jan 2006
Bài gửi: 3
:
Cac ban co biet gi ve chuong trinh MikroPalcal viet cho PIC khong
Dang Khoa vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-03-2006, 10:22 PM   #4
pb1
Đệ tử 2 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 31
:
em đã nghiền hết mấy bài của bác nhh rồi, em đang chờ các bài tiếp theo của bác nhh đây. Bác nhanh nhanh viết thêm nữa đi chứ.
pb1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-03-2006, 05:57 PM   #5
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi pb1
em đã nghiền hết mấy bài của bác nhh rồi, em đang chờ các bài tiếp theo của bác nhh đây. Bác nhanh nhanh viết thêm nữa đi chứ.
Mấy tuần rày hơi nhát!
Bài tiếp chắc là cái đồng hồ điện tử.Hy vọng là tuần tới tớ sẽ cơ bản xong và post lên cho anh em chỉ giáo thêm!
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2006, 08:54 PM   #6
pb1
Đệ tử 2 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 31
:
help me about motor

em đang sử dụng PIC16f877A để điều khiển động cơ DC, yêu cầu điều khiển động cơ1) ổn định tốc độ động cơ khi địa hình thay đổi. (2) Chuyển từ RF sang RR(trái->phai) không bị giật. (3) Tùy ý thiết đặt tốc độ.

Có bác nào đã làm về vấn đề này, xin chỉ giáo giúp
pb1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2006, 09:12 AM   #7
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi pb1
em đang sử dụng PIC16f877A để điều khiển động cơ DC, yêu cầu điều khiển động cơ1) ổn định tốc độ động cơ khi địa hình thay đổi. (2) Chuyển từ RF sang RR(trái->phai) không bị giật. (3) Tùy ý thiết đặt tốc độ.

Có bác nào đã làm về vấn đề này, xin chỉ giáo giúp
Chao ban!
De moi nguoi de hinh dung va tham gia nhiet tinh vao van de cua ban,ban co the post so do nguyen li va code ban viet len.Nhu the minh tin van de se duoc giai quyet nhanh hon!

Chao!
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-03-2006, 10:41 AM   #8
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Cái Timer nhh làm tới đâu rồi. . Có gì trục trặc không.

Các ngôn ngữ lập trình cho PIC, theo mình không nên tìm hiểu nhiều ngôn ngữ quá, nhiều khi còn lộn từ ngôn ngữ này sang ngôn ngữ khác nữa. Cái này kiếm hiệp gọi là "tẩu hỏa nhập ma".

Mới tìm hiểu thì nên chọn ngôn ngữ ASM. Ngôn ngữ này tuy hơi khó viết nhưng nó giúp ta hiểu được sâu hơn bản chất cũng như cấu tạo của con PIC. Sau đó, khi đã vững phần căn bản, nếu thích có thể chuyển qua C. Đây là 2 ngôn ngữ thông dụng nhất cho PIC, càn các ngôn ngữ khác, hẳn phải có một nhược điểm nào đó nên được ít người chọn để làm công cụ lập trình.

Các ngôn ngữ cấp cao thực chất đều được xây dựng dựa trên các lệnh cơ bản của con PIC thôi. Trong quá trình sinh code của các ngôn ngữ cấp cao, như C, trước khi chuyển sang mã HEX còn có thêm một giai đoạn là chuyển sang mã Assembly của PIC. Như vậy có thể tạm hiểu là các hàm của ngôn ngữ cấp cao cho PIC được xây dựng dựa trên tập lệnh cơ bản của PIC. Các hàm này có thể giúp ta dễ viết và mang tính tổng quát cao, giống như các module chương trình được xây dựng sẵn. nhưng có nhược điểm là không linh động. Điều này một phần giải thích tại sao file biên dịch của ngôn ngữ cấp cao lớn hơn so với việc viết trực tiếp bằng ASM.

Tính tổng quát và thiếu linh động cũng sẽ gây trở ngại cho quá trình tối ưu, đồng thời khả năng kiểm soát quá trình thực thi của vi điều khiển không cao. Nếu viết bằng ASM, ta có thể kiểm soát được từng "cử chỉ" của PIC và thời gian thực thi của nó, như vậy ta có thể đáp ứng được các yêu cầu về tối ưu nhu anh Nam đã đề cập. Tuy nhiên điều đó đòi hỏi khả năng kiểm soát của người lập trình cũng cao hơn, có nghĩa là ta phải hiểu được từng ngóc ngách của con vi điều khiển PIC.

Nếu có khả năng xây dựng các module chương trình dựa trên tập lệnh của PIC (ví dụ như các module về xử lí thuật toán, các module về các khối chức năng trong PIC), ta hoàn toàn có thể xây dựng được một ngôn ngữ lập trình cho riêng mình. . Có thể vào trong luồng MPASM để tìn hiểu cách xây dựng một hàm bằng ngôn ngữ ASM của mod Mạnh.

Đây chỉ là một vài nhận xét mang tính chủ quan, mọi người góp ý thêm nhé. Anh Nam coi lại coi em hiểu như vậy có đúng không. Mong anh góp ý thêm. .
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-03-2006, 06:14 PM   #9
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Những nhận xét của ntc là chính xác.
Cho dù bạn viết bằng ngôn ngữ gì thì cuối cùng con PIC cũng phải chạy chương trình của bạn, và bản thân nó chỉ hiểu mỗi mã nhị phân nằm trong bộ nhớ chương trình của nó mà thôi. Vì lập trình bằng mã nhị phân quá khó khăn đối với con người, nên mới có nhiều ngôn ngữ lập trình được tạo ra để giúp cho việc lập trình được dễ dàng hơn. Chẳng qua vào thời điểm này không có trình biên dịch (compiler) lý tưởng nào có thể thay thế được trình hợp dịch (assembler) trong mọi trường hợp mà thôi. Và để lập trình bằng hợp ngữ một cách hiệu quả thì thông thường bạn phải có một con vi điều khiển được mô phỏng trong chính bạn, để kiểm soát chương trình bạn đang viết, một công việc quá khó khăn cho những người mới học.
Không ít người đã tự xây dựng ngôn ngữ lập trình và trình biên dịch cho riêng mình, chẳng hạn như Vladimir Soso (viết Basic compiler) hay Wouter van Ooijen (sáng tạo JAL và viết JAL compiler).

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2006, 08:56 PM   #10
pb1
Đệ tử 2 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 31
:
Bác nhh có thể giúp em một tay không?
pb1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2006, 09:26 AM   #11
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Traffic light

Chào cả nhà!

Ý định tuần này của nhh là viết chương trình cho cái digital clock với timer, led 7 đoạn, phím nhấn,...nhưng nghĩ đi nghĩ lại giang hồ luyện chiêu này bằng IC thời gian thực DS1307, DS1337,...giao tiếp I2C...mình lại dùng timer định thì nhảy tới nhảy lui thật khó coi quá !

Mục đích cũng để tìm hiểu hoạt động của các timer, do vậy mà nhh tạm gác cái digital clock này lại. Bù lại mình sẽ làm một cái mạch đèn giao thông ,dùng ngắt timer0.

PIC16F877A có 3 timer ,timer0 và timer2 là hai timer 8bit còn timer1 là timer 16bit.
nhh chỉ đề cập đến những phần có liên quan đến timer0 trong ứng dụng này.Còn lại tham khảo trong datasheet viết rất rõ.
Các thanh ghi tác động timer0 gồm INTCON và OPTION_REG. Để khởi động timer0,xóa bit T0CS về 0.Lúc này thanh ghi TMR0 sẽ tự động tăng lên một ứng với mỗi chu kỳ lệnh



Hoạt động ngắt của timer0 rất đơn giản,ngắt xảy ra khi tràn timer0 từ FFh về 00h
Khi ngắt này xảy ra cờ ngắt timer0 phất lên (bit TMR0IF được set lên 1) ,khi vào ngắt phải xóa cờ này về 0.
Bit PSA trên thanh ghi OPTION_REG chỉ định Prescaler cho timer0 hay WDT.Dùng timer0 thì xóa bit này.
Ba bit PS0,PS1,PS2 dùng chia tốc độ timer0 từ 2 đến 256 ,chia tốc độ WDT từ 2 đến 128.

Trong ứng dụng này do timer0 tràn sớm hơn 1s khi dùng thạch anh 10MHz,do vậy dùng thêm một biến đếm số lần tràn sao cho khi biến này giảm xuống 0 thì xấp xỉ 1s.

Trong 20s đầu,đèn xanh bật ON,từ giây 21 đến 30 có thêm đèn vàng ON, 20s cuối đèn đỏ ON.

Các chân từ a đến g của led 7 seg đầu nối với RC0 đến RC6, led còn lại nối RB0 đến RB6.
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2006, 02:37 PM   #12
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Trích:
Nguyên văn bởi nhh
Để khởi động timer0,xóa bit T0CS về 0.Lúc này thanh ghi TMR0 sẽ tự động tăng lên một ứng với mỗi chu kỳ lệnh
T0CS không phải dùng để khởi động Timer0 mà T0CS dùng để chọn cho Timer0 ở chế độ timer hay counter.

Chế độ timer (T0CS = 0) thì TMR0 sẽ tăng lên 1 sau mỗi chu kì lệnh (khi prescaler = 1, nếu khác 1 thì là bộ của chu kì lệnh).

Chế độ counter thì T0CS =1 khi đó TMR0 sẽ tăng lên mỗi khi có một sườn lên hoặc sườn xuống xuất hiện trên chân T0CKI (RA4) ( chân này dạng open - drain nên bình thường nếu set dạng I/O bình thường thì phải mắc thêm trở kéo lên). Và chúng ta phải chọn sườn lên hay sườn xuống qua bít T0SE.
Trích:
Trong ứng dụng này do timer0 tràn sớm hơn 1s khi dùng thạch anh 10MHz,do vậy dùng thêm một biến đếm số lần tràn sao cho khi biến này giảm xuống 0 thì xấp xỉ 1s.

Trong 20s đầu,đèn xanh bật ON,từ giây 21 đến 30 có thêm đèn vàng ON, 20s cuối đèn đỏ ON.

Các chân từ a đến g của led 7 seg đầu nối với RC0 đến RC6, led còn lại nối RB0 đến RB6.
Mình nghĩ bạn nên làm một timer0 trễ 1ms. Sau đó tuỳ ứng dụng mình sẽ sử dụng là bội của 1ms này. Tức là dùng biến static để đếm sự kiện tràn timer0.

Lưu ý: timer0 là bộ free - auto counter sau khi thiết lập ở chế độ timer thì nó sẽ đếm mãi mà không dừng. thanh ghi OPTION ở chế độ sau reset = 0xFF nên ban đầu nó ở chế độ Counter sẽ đếm xung bên ngoài.

Mình xin ví dụ một hàm ngắt với timer0 dùng HTPIC. Với thạch anh 20MHZ thì hàm ngắt timer0 1ms -> TMR0 = 6

Code:
void interrupt inter0(void){
	static unsigned char i;
	static unsigned int counter; // bien dem su kien ngat timer0
	if(T0IF & T0IE){ // neu co ngat Timer0 xay ra
                TMR0 = 6;
		T0IF = 0 ; // xoa co ngat, cong viec khong the thieu sau ham ngat
		++	counter;
		if (counter == a ) {
                        // do something
                };
		};
}
Trong hàm init chọn như sau: dùng pre cho timer0 với tỉ lệ 1:2
Code:
void init(void){
	// khoi tao cho các port

	
	// Khoi tao cho cac thanh ghi	
	OPTION  = 0x00; // dung prescaler cho timer0 voi ti le la 1:2

	// Khoi tao cho ngat Timer0
	GIE = 1; // cho phep ngat toan cuc
	T0IE = 1; // cho phep ngat timer0
	T0IF = 0; // xoa co ngat timer0
	TMR0 = 6; // khoi tao
}

thay đổi nội dung bởi: ngohaibac, 20-03-2006 lúc 02:39 PM.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2006, 11:49 AM   #13
lamhoang
Đệ tử 2 túi
 
lamhoang's Avatar
 
Tham gia ngày: Dec 2005
Bài gửi: 27
:
Smile Cho mình hỏi chút!

Vậy dùng Timer khi khởi động thì cần lưu ý đến những chú ý gì vậy (cách thức khởi động timer).
Có gì khác nhau nhiều giữa Timer0 và các timer khác ko.
Bạn có đoạn code nào về Timer ko. Mình đang làm thử một ứng dụng đơn giản là: điều khiển led nháy với thời gian thay đổi phụ thuộc vào nút bấm nhưng mình đang gặp vấn đề về Timer (chưa cụ thể về cách điều khiển về nó). Mong bạn hướng dẫn.
Mình chỉ mới làm quen với Assembly nên các đoạn mã dùng C đọc ko hiểu mấy. Theo bạn thì mình có nên chuyển sang học C hay là thuần thục Assembly rồi mới chuyển.
Mình cũng đang mới bắt đầu với PIC nên cần học nhiều.Thank!

thay đổi nội dung bởi: lamhoang, 27-03-2006 lúc 11:59 AM.
lamhoang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2006, 01:35 PM   #14
chuabietgi
Đệ tử 1 túi
 
chuabietgi's Avatar
 
Tham gia ngày: Nov 2005
Bài gửi: 17
:
Trích:
Nguyên văn bởi lamhoang
Vậy dùng Timer khi khởi động thì cần lưu ý đến những chú ý gì vậy (cách thức khởi động timer).
Có gì khác nhau nhiều giữa Timer0 và các timer khác ko.
Bạn có đoạn code nào về Timer ko. Mình đang làm thử một ứng dụng đơn giản là: điều khiển led nháy với thời gian thay đổi phụ thuộc vào nút bấm nhưng mình đang gặp vấn đề về Timer (chưa cụ thể về cách điều khiển về nó). Mong bạn hướng dẫn.
Mình chỉ mới làm quen với Assembly nên các đoạn mã dùng C đọc ko hiểu mấy. Theo bạn thì mình có nên chuyển sang học C hay là thuần thục Assembly rồi mới chuyển.
Mình cũng đang mới bắt đầu với PIC nên cần học nhiều.Thank!
Em xin có ý kiến thế này:
Mình có thể vừa dùng ngắt timer vừa dùng ngắt ngoài để điều chỉnh có được không á...

Bác nhh và mod ntc cho ý kiến đi !
chuabietgi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2006, 03:58 PM   #15
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi lamhoang
Vậy dùng Timer khi khởi động thì cần lưu ý đến những chú ý gì vậy (cách thức khởi động timer).
Có gì khác nhau nhiều giữa Timer0 và các timer khác ko.
Bạn có đoạn code nào về Timer ko. Mình đang làm thử một ứng dụng đơn giản là: điều khiển led nháy với thời gian thay đổi phụ thuộc vào nút bấm nhưng mình đang gặp vấn đề về Timer (chưa cụ thể về cách điều khiển về nó). Mong bạn hướng dẫn.
Mình chỉ mới làm quen với Assembly nên các đoạn mã dùng C đọc ko hiểu mấy. Theo bạn thì mình có nên chuyển sang học C hay là thuần thục Assembly rồi mới chuyển.
Mình cũng đang mới bắt đầu với PIC nên cần học nhiều.Thank!
Cách thức khởi động timer có khác nhau,timer0 bạn phải chỉ định Pre cho nó bằng lệnh:
Code:
BCF	OPTION_REG,PSA
và điều chỉnh tốc độ bằng việc khởi tạo cho 3 bit PS0,PS1 và PS2 của thanh ghi OPTION_REG.
Timer0 và timer2 là timer 8bit,timer1 là timer 16bit,ngoài chức năng định thì thì timer còn nhiều ứng dụng khác.
Cụ thể bạn xem thêm trong datasheet mấy cái thanh ghi ở phần Timer!

Theo ý nhh để điều chỉnh thời gian như bạn nói bằng nút bấm (ko biết bạn dùng mấy nút?), mình làm như sau :
Với 3 nút bấm chẳng hạn và thời gian ấn nút 1 sẽ delay 1s;nút 2 delay 500ms; nút 3 delay 100ms ,viết mấy cái lệnh kiểm tra xem cái nút nào on thì nhảy đến cái nhãn đó, ấn nút 1 -> nhảy vào Button_1 thì 500+400+100=1000ms=1s,rồi quay ngược về,hai nhãn còn lại cũng tương tự,
Trong phần main mình sẽ đặt những cái nhãn :

Code:
....
Button_1
           Call delay_500ms
Button_2
           Call delay_400ms
Button_2
           Call delay_100ms
.....
Mấy hàm delay này mình tin là bạn viết ok nếu không thì tham khảo tutorial 2 của Chính :
http://www.picvietnam.com/forum//sho...p?t=238&page=2

Ý tưởng là vậy,bạn thử viết và post lên (cả sơ đồ nguyên lí nhé!) để anh em nhà pic cùng phá luôn !
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263

thay đổi nội dung bởi: nhh, 27-03-2006 lúc 04:01 PM.
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
TUT về USART trong PIC16F877A mafd_47a MPASM 16 19-02-2025 05:32 AM
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 28 28-01-2025 10:45 PM
Bộ so sánh và PWM cho PIC16F877A anhquangngai Cơ bản về vi điều khiển và PIC 24 08-09-2012 09:00 AM
Pic16f877a TỪ DỄ TỚi KhÓ ntc Cơ bản về vi điều khiển và PIC 373 23-05-2009 10:24 PM
CCS C for PIC16F877A nhh Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) 405 24-04-2008 12:00 PM


Múi giờ GMT. Hiện tại là 11:48 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam