Em chỉ là dân amteur thôi,nhưng em đã gặp phải vấn đề "xx" như anh.Sau khi học xong các lệnh I/O em cũng viết thử chương trình nhấp các kiểu của chữ Happy New Year,nhưng khi gắn lên test board thì nó im lìm đến bực mình.
Cuối cùng,em đã cẩn thận kiểm tra lại từng phần (code thì chắc chắn OK) như sau:
+ thay test board và cắm lại cẩn thận (nhớ đè chip chặt xuống test board)
+ khi nạp chương trình đảm bảo đã load được chương trình xuống Chip (khi đó em nạp bằng winpic 800 nhưng ấn hoài mũi tên màu xanh,nhưng chính xác thì phải nhấn mũi tên màu đỏ mới đúng>củ chuối<)
+cần có thêm 2 con tụ giấy 33p tại chân 13,14 của mạch dao động .
+kiểm tra lại nguồn và mass (pic16f877a cần 2 chân nguồn 11,32 ; và 2 chân đất 12,31) thì mới hđộng được.
Sau khi kiểm tra và lắp lại như trên,em đã tìm ra lỗi của mạch là như vây.Cuối cùng,nó cũng chạy (mừng đến phát khóc (#+#))
Àh,ngoài ra phần khai báo cấu hình anh nên làm gộp lại một lệnh cho gọn (em hiểu chắc là anh đang kiểm tra từng option )
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
với cái này nữa,anh chưa khai báo con trỏ để quy định sử dụng không gian bộ nhớ Ram
#device *=16 adc=8 // anh thử cái này thử nha!
Àh,anh nên chép file định nghĩa def_16f877A.hvào chung thư mục với file chương trình C(chương trình do mình viết),thường thì do ta tạo ta để dễ quản lí,khi dịch thì tự động CCS nó sẽ lấy ra và chỉ cần viets lại như sau:
#include <def_877a.h> // FILE DINH NGHIA CAC THANH GHI VA CAC BIT
Hơn nữa,anh thử bỏ đoạn code setup chức năng ADC,timer,ngắt..: (cái này theo em thôi,nếu có gì sai mong các anh thứ lỗi,em còn yếu lắm):
//setup_adc_ports(NO_ANALOGS);setup_adc(ADC_OFF);
//setup_psp(PSP_DISABLED);
//setup_spi(FALSE);
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
//setup_timer_1(T1_DISABLED);
//setup_timer_2(T2_DISABLED,0,1);
//setup_comparator(NC_NC_NC_NC);
//setup_vref(FALSE);
Em chỉ góp ý cho Anh như vậy thôi,em cũng ko biết mình có nói gì bậy bạ ko ? (nếu có thì cho em nhận trước >hhe<)
Thân,chúc anh thành công !!!
|