31-12-2008, 01:07 AM | #16 |
Trưởng lão PIC bang
|
Timer 0 trong PIC16F877(A) là một timer 8-bit, việc bạn thiết lập số đếm 16-bit cho nó không làm thay đổi thực tế này. Trình dịch mà bạn đang dùng sẽ chỉ dùng 8 bit thấp của giá trị mà bạn đã mô tả để đặt vào thanh ghi đếm của Timer 0. Do đó, có thể dự đoán rằng Timer 0 không chạy đúng ý đồ ban đầu của bạn.
Trong vòng lặp chính, bạn không bao giờ xuất logic '0' ra D2. Bạn đang thực hiện luận văn mà lại chờ cho đến khi chỉ còn 5 ngày là đến hạn nộp mới đặt câu hỏi ở diễn đàn thì chính bạn mới là người đáng trách, không nên trách các thành viên của diễn đàn. Diễn đàn hoạt động trên tinh thần tự nguyện, cùng giúp nhau tiến bộ, và không thành viên nào có nghĩa vụ phải đảm bảo rằng ai đó làm kịp bài tập, đồ án, hoặc luận văn để nộp, đặc biệt với những trường hợp chỉ còn vài ngày là hết hạn nộp. 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 |
31-12-2008, 11:10 AM | #17 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 11
: |
xin lỗi các bạn và đặc biệt là anh namqn. mình sơ ý wa. cám ơn anh đã giúp em.
em post lên diễn đàn cái code cũ mà kô để ý.xin chân thành xin lỗi về sai sót này . Code:
#include <16f877.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) // ngat ngoai #int_EXT void EXT_isr() { set_timer0(7); //4ms tran } //ngat timer0 #int_timer0 void timer0_isr() { set_timer1(40534); output_high(pin_D0); delay_us(10); output_low(pin_D0); } // ngat timer1 #int_timer1 void timer1_isr() { output_high(pin_D1); delay_us(10); output_low(pin_D1); } // chuong trinh chinh void main() { enable_interrupts(INT_EXT); ext_int_edge(L_TO_H); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); enable_interrupts(int_timer0); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); enable_interrupts(int_timer1); enable_interrupts(global); while(true) { output_high(pin_d2); delay_ms(10); output_low(pin_d2); delay_ms(10); } } mong anh giup em lần này nữa.thân chào anh thay đổi nội dung bởi: namqn, 31-12-2008 lúc 05:06 PM. |
31-12-2008, 05:16 PM | #18 |
Trưởng lão PIC bang
|
Với Timer 0, bạn đang định thời bằng 16*(256 - 7) = 3984 chu kỳ máy, tức là 0,7968 ms với tần số xung clock là 20 MHz. Timer 0 là timer chạy tự do, không thể tắt (bạn sẽ không tìm thấy bit nào trong các thanh ghi liên quan đến Timer 0 để tắt nó). Do đó, những gì bạn quan sát được với Timer 0 là hợp lý.
Bạn làm thế nào để biết chân D1 có thay đổi trạng thái hay không? Bạn không quan sát được sự thay đổi của chân D1 bằng những biện pháp hiện thời không có nghĩa là chân D1 không thay đổi trạng thái. 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 |
31-12-2008, 05:42 PM | #19 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 11
: |
em xin lỗi,nhưng anh có thể chỉ cho em cách làm như thế nào để xuất xung được như ý không. nếu timer0 kô thể tắt thì phải làm như thế nào (chuyển qua dùng timer2 chăng)
ko trách gì em đã clear cờ ngắt của timer0 cũng kô dc.(timer0 là timer chạy tự do -em cám ơn anh về thông tin này lắm lắm) còn chân d1 em quan sát bằng osillicope nhưng ko thấy xung nào cả.em nghĩ lả do timer0 ngắt thì timer1 mới hoạt động nhưng có lẽ do timer1 chưa kip ngắt timer0 đã sét lại giá trị cho timer1 rùi. chân thành cám ơn anh và mong anh giúp.chúc anh vui |
31-12-2008, 06:01 PM | #20 | |
Trưởng lão PIC bang
|
Trích:
Bạn nên mô tả bài toán gốc, vì bạn chưa có được giải thuật đúng. 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 |
|
31-12-2008, 06:37 PM | #21 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 11
: |
cám ơn anh namqn
bài toán em cần là:" khi có ngắt ngoài(ngắt cạnh lên) thì khởi tạo timer0 5ms, khi timer0 ngắt thì khởi tạo time1 10ms đồng thởi xuất ra D0 một xung có độ rộng là 10us. khi timer1 ngắt thì xuất ra D1 một xung cũng có độ rộng là 10us còn chương trình chính thì để đọc adc" em đã viết và nạp cho pic hàng ngàn lần rùi nhưng vẫn ko dc(em dùng pic 18f4520 chứ kô phải 16f877).em mới làm quen pic được khoảng 1 tháng. một lần nữa cám ơn anh. chào anh |
31-12-2008, 06:52 PM | #22 | |
Trưởng lão PIC bang
|
Trích:
Với PIC18F4520 thì bạn có thể dùng Timer 0 như một timer 8-bit hay 16-bit, và cũng có thể bật/tắt nó theo ý muốn. Bạn đã lãng phí thời gian của chính mình và của người khác khi post code cho PIC16F877, trong khi thực sự lại sử dụng PIC18F4520. Cần chú ý là PIC18 có 2 mức ưu tiên ngắt, và việc thiết lập ngắt trong PIC18 liên quan đến nhiều thanh ghi hơn so với PIC16. Nếu bài toán của bạn có thể mô tả như trên thì bạn có thể thực hiện với 1 timer chứ không nhất thiết phải dùng đến 2 timer. 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 |
|
31-12-2008, 07:18 PM | #23 | |
Đệ tử 2 túi
Tham gia ngày: Apr 2008
Bài gửi: 26
: |
Trích:
enable_interrupts(int_timer0); " thì timer0ddax chạy rôif,khong fải tới lúc bạn set_timer0 nó mới chạy đâu.Tương tự đối với timer1.Hơn nưa Thời gian bạn delay quá ngắn,sao bạn biết timer1 ko chạy |
|
31-12-2008, 09:09 PM | #24 |
Đệ tử 6 túi
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: BK TP HCM
Bài gửi: 136
: |
mình nghĩ là enable_interrupts(global); ngắt toàn cục thì tất cả các ngắt mới xảy ra chứ,phải vậy kô,
|
01-01-2009, 02:26 AM | #25 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 11
: |
mình cám ơn các bạn đã giúp đỡ mình
bởi vì protues 6 kô có pic18f4520 nên kô mô phỏng dc. nên em đành phải chuyển wa mô phỏng bằng pic16f877. xin lỗi các bạn nhé. anh namqn có thể nói rõ hơn cho em về " Với PIC18F4520 thì bạn có thể dùng Timer 0 như một timer 8-bit hay 16-bit, và cũng có thể bật/tắt nó theo ý muốn" anh có thể bật mí cho em thêm một tí về điều đó dc ko. em cũng clear_interrupt(int_timer0) hoặc disable_interrupts(int_timer0) rồi nhưng vẫn kô đc. bây giờ thời gian của em gấp quá rồi. mong anh giúp đỡ em thân chào anh thay đổi nội dung bởi: nms48, 01-01-2009 lúc 02:36 AM. |
01-01-2009, 02:33 AM | #26 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 11
: |
|
01-01-2009, 04:38 AM | #27 | |
Trưởng lão PIC bang
|
Trích:
Tôi không dùng CCS C nên không thể viết code cho bạn copy and paste được, bạn phải tự tìm hiểu xem thiết lập Timer 0 của PIC18F4520 trong CCS C ra sao. Như tôi đã nói ở trên, bạn chờ đến khi chỉ còn vài ngày mới bắt đầu hỏi thì chính là bạn đã tự hại mình thôi. Hy vọng có bạn nào đó có thể viết giúp cho bạn đoạn code đó. 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 |
|
01-01-2009, 11:42 AM | #28 |
Đệ tử 1 túi
Tham gia ngày: Dec 2008
Bài gửi: 11
: |
cám ơn anh đã giúp em trong thời gian qua..
các bạn có thể giúp mình bật/tắt timer0 được không? mong reply sớm .thân chào các bạn |
|
|