Trích:
Nguyên văn bởi Jerry
1. Thiếu phần định nghĩa các chân cổng là digital I/O
Code:
BSF STATUS, RP0 ; Select Bank 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
BCF STATUS, RP0 ; Select Bank 0
|
Phần khai báo này mình chưa xài bao giờ, hôm nay mới biết, thế nhưng thử vào rồi vẫn ko chạy được (mình đã viết thành chương trình riêng cho ngắt timer1)
Trích:
Nguyên văn bởi Jerry
2. Sao lại dùng lệnh này khi khởi tạo chương trình? “BSF PIR1,TMR1IF”???? Đây là cờ báo tràn Timer1, được tự động đặt là 1 bằng phần cứng để báo tràn Timer1.
|
Cái này gọi là ép ngắt, thay vì ở lần đầu tiên nó phải chạy đến giá trị đặt trong 2 thanh ghi timer1 thì ở đây nó được ép ngắt nhảy vào ngắt luôn ở vòng đầu tiên. Nhưng theo lời bạn, mình đã bỏ dòng lệnh này. Kết quả vẫn vậy.
Trích:
Nguyên văn bởi Jerry
3. Trong chương trình chưa thấy phần định nghĩa hướng dữ liệu (vào/ra) cho PORTC và PORTB, vậy mà lại out dữ liệu ra:
Code:
MOVLW B'00000011'
MOVWF PORTC
MOVLW B'11111111'
MOVWF PORTB
Như vậy mà sáng được LED thì quá lạ. Bạn xem lại nhé. Xem xong tui sẽ phân tích tiếp cho bạn thấy một số vấn đề nữa.
|
Mình quên khai báo hướng dữ liệu cho PORTC, còn PORTB thì khai báo rồi. Chương trình này mình xuất led thử nghiệm ra portB nên kết quả không ảnh hưởng gì.
Bạn giúp mình những vấn đề khác đi. Thực sự mình đang rất rối, mọi chuyện đang như đám rừng. bó tay.
Do thời gian học về PIC của mình ngắn quá nên có nhiều chổ chưa hiểu đúng bản chất vấn đề. Rất mong các đọc qua đoạn code của mình, xem thử có lỗi sai nào trầm trọng về kiến thức thì cho mình biết để mình giải quyết vấn đề timer1 này.