Chào tất cả các bạn.
Mình mới bắt đầu sử dụng PIC vào thiết kế thực. Nhưng ngay bước test đầu tiên đã bị trục trặc mà không rõ nguyên nhân. Mình đã thử trên Proteus rất nhiều mạch và chạy ok hết. Vì vậy nếu ai đã từng bị thế này thì cho mình biết cách khắc phục nhé.
Chương trình chỉ đơn giản là xuất tín hiệu ra chân PIC để test mạch thôi:
Phần cứng: hai chân RD1 và RD2 nối với 2 LED ngoài xuống mass (qua R=1K) để test tín hiệu xuất ra.
Mạch nạp dùng Burn - E
Code: (Dùng MPLAB IDE):
#INCLUDE <P16F887.INC>
__CONFIG_CP_OFF
__CONFIG_WDT_OFF
__CONFIG_PWRTE_ON
__CONFIG_XT_OSC
D0 EQU 0X50
D1 EQU 0X51
D2 EQU 0X52
ORG .0
BANKSEL TRISD
MOVLW .0
MOVWF TRISD
BANKSEL PORTD
CLRF PORTD
BANKSEL TRISA
MOVLW 0XFF
MOVWF TRISA
BANKSEL PORTA
CLRF PORTA
BANKSEL PORTD
LAP
BSF PORTD,1
BCF PORTD,2
CALL DELAY_50
BCF PORTD,1
BSF PORTD,2
CALL DELAY_35
GOTO LAP
DELAY_50
MOVLW .50
MOVWF D0
LAP_50
CALL DELAY_10
DECFSZ D0,F
GOTO LAP_50
RETURN
DELAY_35
MOVLW .30
MOVWF D0
LAP_35
CALL DELAY_10
DECFSZ D0,F
GOTO LAP_35
RETURN
DELAY_10
MOVLW .33
MOVWF D1
LAP_10
MOVLW .101
MOVWF D2
DECFSZ D2,F
GOTO $-1
DECFSZ D1,F
GOTO LAP_10
RETURN
END
Mọi thứ đều ok, proteus ok. Nhưng khi nạp vào mạch thì lại không chạy.
Ah, mình thay đổi CONFIG dùng thạch anh ngoài hay dao động nội đều không chạy. Nhưng khi lấy tay ốp che mạch thì lại chạy bình thường bất kể việc CONFIG dao động kiểu gì, kể cả việc tháo thạch anh ra mà nó vẫn chạy theo đúng chương trình. Mình nghĩ có thể do nhiễu nhưng đã dùng các laọi tụ lọc nguồn 104, 100uF ngay chân nguồn... mà vẫn không được.... Kiểu này không biết có kết duyên được với PIC nữa không, Hix. Mình chưa bao giờ gặp tình huống này. Trước đây dù thử với dòng 89C51 trên board test thì cũng không bị như thế này.
Mình mới bắt đầu sử dụng PIC vào thiết kế thực. Nhưng ngay bước test đầu tiên đã bị trục trặc mà không rõ nguyên nhân. Mình đã thử trên Proteus rất nhiều mạch và chạy ok hết. Vì vậy nếu ai đã từng bị thế này thì cho mình biết cách khắc phục nhé.
Chương trình chỉ đơn giản là xuất tín hiệu ra chân PIC để test mạch thôi:
Phần cứng: hai chân RD1 và RD2 nối với 2 LED ngoài xuống mass (qua R=1K) để test tín hiệu xuất ra.
Mạch nạp dùng Burn - E
Code: (Dùng MPLAB IDE):
#INCLUDE <P16F887.INC>
__CONFIG_CP_OFF
__CONFIG_WDT_OFF
__CONFIG_PWRTE_ON
__CONFIG_XT_OSC
D0 EQU 0X50
D1 EQU 0X51
D2 EQU 0X52
ORG .0
BANKSEL TRISD
MOVLW .0
MOVWF TRISD
BANKSEL PORTD
CLRF PORTD
BANKSEL TRISA
MOVLW 0XFF
MOVWF TRISA
BANKSEL PORTA
CLRF PORTA
BANKSEL PORTD
LAP
BSF PORTD,1
BCF PORTD,2
CALL DELAY_50
BCF PORTD,1
BSF PORTD,2
CALL DELAY_35
GOTO LAP
DELAY_50
MOVLW .50
MOVWF D0
LAP_50
CALL DELAY_10
DECFSZ D0,F
GOTO LAP_50
RETURN
DELAY_35
MOVLW .30
MOVWF D0
LAP_35
CALL DELAY_10
DECFSZ D0,F
GOTO LAP_35
RETURN
DELAY_10
MOVLW .33
MOVWF D1
LAP_10
MOVLW .101
MOVWF D2
DECFSZ D2,F
GOTO $-1
DECFSZ D1,F
GOTO LAP_10
RETURN
END
Mọi thứ đều ok, proteus ok. Nhưng khi nạp vào mạch thì lại không chạy.
Ah, mình thay đổi CONFIG dùng thạch anh ngoài hay dao động nội đều không chạy. Nhưng khi lấy tay ốp che mạch thì lại chạy bình thường bất kể việc CONFIG dao động kiểu gì, kể cả việc tháo thạch anh ra mà nó vẫn chạy theo đúng chương trình. Mình nghĩ có thể do nhiễu nhưng đã dùng các laọi tụ lọc nguồn 104, 100uF ngay chân nguồn... mà vẫn không được.... Kiểu này không biết có kết duyên được với PIC nữa không, Hix. Mình chưa bao giờ gặp tình huống này. Trước đây dù thử với dòng 89C51 trên board test thì cũng không bị như thế này.