Trích:
Nguyên văn bởi lybao_huy
mục đích của đoạn code này là làm nhấp nháy đèn led .
#include <p18cxxx.h>
#pragma config WDT = OFF
#pragma config FOSC = HS
#pragma config CPUDIV = OSC1_PLL2
#pragma config PWRT = ON
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config MCLRE = ON
#pragma config LVP = OFF
void main (void)
{
TRISA=0;
OSCCONbits.SCS0=0; OSCCONbits.SCS1=0;//chọn bộ dao động chính
while(1){
PORTAbits.AN0=1;
delay();//hàm delay tôi không nêu ra ở đây,thời gian delay là 1s;
PORTAbits.AN0=0;
delay();//hàm delay tôi không nêu ra ở đây,thời gian delay là 1s;
}
với cách viết như trên thì nó chạy rất tốt. nhưng khi thay đổi:
OSCCONbits.SCS0=1; OSCCONbits.SCS1=0;//chọn bộ dao động timer1 làm xung hệ thống.
thì nó cũng có thời gian delay như trên(mặc dù tôi không có đặt bất cứ thạch anh vào timer1),tôi tưởng nó bị nhiễu từ bộ dao động chính, nên cho 2 pin của timer1 xuống đất,nhưng kết quả vẫn vậy,tôi không hiểu. có ai giải thích dùm hộ.
|
Ở đây có 2 vấn đề:
- Trong các bit cấu hình ko thấy bạn cho phép clock switching.
- Nếu bạn chịu khó đọc mục oscillator, phần clock switching sẽ thấy:
"The system clock will continue to operate from
the old clock until the new clock is ready."
Timer1 bạn ko lắp thạch anh, tức là ko hoạt động, PIC sẽ ko chuyển sang nguồn dao động timer 1.
Trích:
Tôi còn có một thắc mắc nữa là:
cũng là đoạn code trên nhưng:
OSCCONbits.SCS0=0; OSCCONbits.SCS1=0;//chọn bộ dao động chính
while(1){
PORTAbits.AN0=~LATAbits.LATA0;//toggle pin A0
delay();
}
đoạn code này cũng chạy tốt.nhưng
while(1){
PORTAbits.AN0=~PORTAbits.AN0;//toggle pin A0
delay();
}
lại không chạy, mặc dù pin A0 nối ra đèn led thông qua một điện trở và không có tụ .
|
- Bạn ko disable tính năng analog trên chân RA0, nhưng vẫn thấy LED sáng, có lẽ bạn đang chạy ở chế độ debug?
Nếu bạn chuyển sang chế độ release thì không có đoạn code nào phía trên làm LED sáng cả!