![]() |
|
Tài trợ cho PIC Vietnam |
Những câu hỏi thường gặp Những lỗi cơ bản thường gặp khi làm việc với PIC hoặc những vấn đề cơ bản nhất thường được hỏi trong những năm qua |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
![]() Nhờ mọi người xem chương trình này mình viết tại sao ko chạy được. Mình sử dụng timer0 để tạo thời gian delay bật tắt các led gắn vào portb của pic 16f877a, nhưng ko hiểu sao ko chạy được.
Chương trình như sau: Code:
#include <16f877a.h> #fuses nowdt,noprotect,put,xt #use delay(clock=4000000) #use fast_io(b) #byte portb=0x06 #int_timer0 void ngat_tm0(void) { portb=0xff; } void main() { set_tris_b(0); enable_interrupts(global); enable_interrupts(int_timer0); set_timer0(250); setup_timer_0(rtcc_internal|rtcc_div_8); while(1) { portb=0x00; } } thay đổi nội dung bởi: namqn, 12-10-2008 lúc 07:02 PM. |
![]() |
![]() |
![]() |
#2 |
Trưởng lão PIC bang
|
PIC đang thực hiện đúng những gì bạn viết. Khi có ngắt Timer0, nó xuất 0xFF ra port B. Khi trở về từ ngắt, lệnh xuất 0x00 ra port B được thực hiện.
Thời gian PIC xử lý ngắt Timer0 rất ngắn, do đó bạn sẽ rất khó phát hiện giá trị 0xFF được xuất ra port B (dựa vào độ sáng của các LED nối vào port B). 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 |
![]() |
![]() |
![]() |
#3 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
![]() Trích:
Code:
#include <16f877a.h> #fuses nowdt,noprotect,put,xt #use delay(clock=4000000) #use fast_io(b) #byte portb=0x06 int8 count=0; #int_timer0 void ngat_tm0(void) { count++; if(count==5) { count=0; portb=0xff; } } void main() { set_tris_b(0); enable_interrupts(global); enable_interrupts(int_timer0); set_timer0(250); setup_timer_0(rtcc_internal|rtcc_div_256); while(1) { portb=0x00; } } thay đổi nội dung bởi: namqn, 12-10-2008 lúc 09:49 PM. |
|
![]() |
![]() |
![]() |
#4 |
Trưởng lão PIC bang
|
Chương trình của bạn vẫn chạy đúng theo những gì bạn viết. Nó vẫn bật các LED ở port B sau một khoảng thời gian chờ, nhưng thời gian LED được bật rất ngắn (vì khi trở về từ ngắt thì lệnh portB = 0x00 ở vòng lặp while (1) của bạn lại xóa port B).
Bạn chưa hiểu được cách thức chương trình của bạn đang chạy. Bạn thử sửa như sau nhé: - Bỏ lệnh portb = 0x00 ở vòng lặp while (1) - Trong chương trình xử lý ngắt, thay lệnh portb = 0xFF thành portb = portb ^ 0xFF; 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 |
![]() |
![]() |
![]() |
#5 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
![]() Trích:
|
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
Cám ơn anh namqn đã trả lời. Em sẽ xem lại chương trình.
|
![]() |
![]() |
![]() |
|
|