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-05-2010, 10:16 AM   #1
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Bạn dùng hàm delay thì CPU sẽ dừng mãi trong hàm delay nên ko thể phục vụ công việc quét phím.

Để giải quyết bạn cần cách tính thời gian khác sử dụng timer. VD: Cấu hình timer1 tràn sau 50ms, cứ mỗi lần timer1 tràn bạn tăng biến cnt lên 1, như vậy khi cnt = 3600 x 20 tức là đã trải qua 1 giờ.

Trong thời gian chờ timer1 tràn, bạn vẫn kiểm tra phím bấm liên tục.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-05-2010, 11:11 AM   #2
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi bien_van_khat View Post
Bạn dùng hàm delay thì CPU sẽ dừng mãi trong hàm delay nên ko thể phục vụ công việc quét phím.

Để giải quyết bạn cần cách tính thời gian khác sử dụng timer. VD: Cấu hình timer1 tràn sau 50ms, cứ mỗi lần timer1 tràn bạn tăng biến cnt lên 1, như vậy khi cnt = 3600 x 20 tức là đã trải qua 1 giờ.

Trong thời gian chờ timer1 tràn, bạn vẫn kiểm tra phím bấm liên tục.
anh cho em hỏi thêm 1 câu nữa.em dùng timer0.bây giờ dùng thêm timer1 có được ko?
giả sử 1 chương trình mà dùng liền 1 lúc 3 timer (timer0,timer1,timer2) như vậy có ổn ko?khi ngắt thì các timer có bị xung đột ko?
cám ơn anh!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-05-2010, 10:53 PM   #3
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi bien_van_khat View Post
Bạn dùng hàm delay thì CPU sẽ dừng mãi trong hàm delay nên ko thể phục vụ công việc quét phím.

Để giải quyết bạn cần cách tính thời gian khác sử dụng timer. VD: Cấu hình timer1 tràn sau 50ms, cứ mỗi lần timer1 tràn bạn tăng biến cnt lên 1, như vậy khi cnt = 3600 x 20 tức là đã trải qua 1 giờ.

Trong thời gian chờ timer1 tràn, bạn vẫn kiểm tra phím bấm liên tục.
các bác cho em hỏi thêm.
giả sử ta có 1 nút bấm để điều chỉnh số giờ đặt.
nếu đặt 1h thì cnt = 3600x20,sau đó xảy ra ngắt và ta xoá cnt=0.
nếu ta đặt 2h thì cnt = 3600x2x20, nhưng khi đến 1h thì nó đã xảy ra ngắt và xoá cnt =0 rùi.
vậy ko thể đặt được 1h,2h..9h.vì cứ 1h nó lại ngắt và cnt=0,đếm lạ từ đầu.
thứ 2 các bác xem hộ em khởi tạo cái time1 có đúng ko?mà sao em ko thấy nó hoạt động.
GIE=1;
PIE1=1;
TMR1IE=1;
TMR1IF=1;
TMR1CS=0;
T1SYNC = 1;
T1OSCEN = 1;
T1CKPS1=1;
T1CKPS0=1;
TMR1ON=1;
muốn nạp giá trị vào thanh ghi 16 bit TMR1H,TMR1L như thế nào hả các bác.
giả sử em muốn nạp giá trị 3035 vào thanh ghi 16 bít đó, thì phải ghi như thế nào?
cám ơn các bác nhiều!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-05-2010, 09:16 AM   #4
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi kiemkhach10 View Post
các bác cho em hỏi thêm.
giả sử ta có 1 nút bấm để điều chỉnh số giờ đặt.
nếu đặt 1h thì cnt = 3600x20,sau đó xảy ra ngắt và ta xoá cnt=0.
nếu ta đặt 2h thì cnt = 3600x2x20, nhưng khi đến 1h thì nó đã xảy ra ngắt và xoá cnt =0 rùi.
vậy ko thể đặt được 1h,2h..9h.vì cứ 1h nó lại ngắt và cnt=0,đếm lạ từ đầu.
Ngắt xảy ra khi timer tràn, mỗi lần tràn bạn tăng cnt lên, chứ ko có cách nào tạo ra "ngắt" khi biến cnt = giá trị bạn mong muốn.

Trích:
thứ 2 các bác xem hộ em khởi tạo cái time1 có đúng ko?mà sao em ko thấy nó hoạt động.
GIE=1;
PIE1=1;
TMR1IE=1;
TMR1IF=1;
TMR1CS=0;
T1SYNC = 1;
T1OSCEN = 1;
T1CKPS1=1;
T1CKPS0=1;
TMR1ON=1;
Bạn xem lai datasheet để hiểu ý nghĩa các bit.

Trích:
muốn nạp giá trị vào thanh ghi 16 bit TMR1H,TMR1L như thế nào hả các bác.
giả sử em muốn nạp giá trị 3035 vào thanh ghi 16 bít đó, thì phải ghi như thế nào?
cám ơn các bác nhiều!
Bạn tách giá trị thành 2 số 8 bit rồi ghi vào từng thanh ghi.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-05-2010, 11:37 AM   #5
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi bien_van_khat View Post
Ngắt xảy ra khi timer tràn, mỗi lần tràn bạn tăng cnt lên, chứ ko có cách nào tạo ra "ngắt" khi biến cnt = giá trị bạn mong muốn.


Bạn xem lai datasheet để hiểu ý nghĩa các bit.



Bạn tách giá trị thành 2 số 8 bit rồi ghi vào từng thanh ghi.
vâng thì mỗi lần tràn thì biến cnt tăng lên 1, nhưng khi bằng giá trị em mong muốn thì mình phải xóa cnt=0.đi chứ. bác có thể viết cụ thể 1 đoạn mẫu về đặt thời gian 1h và 2h dùng timer1 cho em tham khảo được ko?
cám ơn các bác nhiều!
kiemkhach10 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


Múi giờ GMT. Hiện tại là 03:02 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