View Full Version : đặt thời gian hẹn giờ 1,2..9 giờ hepl!!!!
kiemkhach10
15-05-2010, 08:44 AM
chào các bác ,các bạn.
em có một vấn đề muốn nhờ mọi người giúp đỡ.
em đang làm 1 chiếc đồng hồ hẹn giờ sáng cho 2 led.
pầhn cứng: 1 led 7 seg(7 thanh)
1 led xanh, 1 led do.
1 nút bấm.
khi em điều khiển led 7seg hiển thị số 1 thì led xanh sáng và led đỏ tắt , sau 1 giờ, thì led xanh tắt và led đỏ sáng...cứ như vậy tùy vào thời gian mình đặt.
nhưng khi em hẹn 1, 2...9 giờ. thì nút bấm ko điều khiển được nữa do thời gian trễ quá nhiều.
các bác giúp em nhé, làm sao mà vẫn đặt được giờ và vẫn điều khiển được nút bấm,
em dung hàm delay() nên thời gian trễ trong vong while() lớn quá, do vậy ko quét được phím tứ thì. có phương án nào giải quyết các bạn cứ nêu ra nhé
cám ơn các bác nhìu!!
bien_van_khat
15-05-2010, 10:16 AM
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.
kiemkhach10
15-05-2010, 11:11 AM
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!
bien_van_khat
15-05-2010, 11:47 AM
Được, ko có xung đột gì cả.
kiemkhach10
17-05-2010, 10:53 PM
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!
bien_van_khat
18-05-2010, 09:16 AM
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.
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.
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.
kiemkhach10
18-05-2010, 11:37 AM
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!
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.