Thông báo

Collapse
No announcement yet.

Thắc mắc về dsPic 30f

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Thắc mắc về dsPic 30f

    Mình muốn tạo thời gian trễ dùng timer1 trong pic 30f4011 dùng mplab c30.

    Đoạn code mình viết như sau:

    #include <p30f4011.h>

    _FOSC(CSW_FSCM_OFF & FRC_PLL4); //Clock = 32 MHz
    _FWDT(WDT_OFF);
    _FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI & PWMxH_ACT_HI);
    _FGS(CODE_PROT_OFF);

    void init_port(){
    TRISB = 0x00;
    //PORTB = 0xF0;
    }

    void init_timer1(){
    PR1 = 0xff;
    TMR1 = 0;
    T1CONbits.TCKPS = 1;
    T1CONbits.TON = 1;
    }

    int main(){
    init_port();
    init_timer1();
    while(1){

    _LATB1 = 1;
    while (!T1CONbits.TSIDL);
    T1CONbits.TSIDL = 0;

    _LATB1 = 0;
    while (!T1CONbits.TSIDL);
    T1CONbits.TSIDL = 0;
    }
    }

    Khi nạp vào pic thì không chạy được như ý: thay vì đèn ở pinb1 chớp tắt liên tục thì nó lại luôn sáng. Mình không hiểu tại sao. Mong các bạn chỉ giúp.

  • #2
    Nguyên văn bởi pqthai89 Xem bài viết
    Mình muốn tạo thời gian trễ dùng timer1 trong pic 30f4011 dùng mplab c30.

    Đoạn code mình viết như sau:

    #include <p30f4011.h>

    _FOSC(CSW_FSCM_OFF & FRC_PLL4); //Clock = 32 MHz
    _FWDT(WDT_OFF);
    _FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI & PWMxH_ACT_HI);
    _FGS(CODE_PROT_OFF);

    void init_port(){
    TRISB = 0x00;
    //PORTB = 0xF0;
    }

    void init_timer1(){
    PR1 = 0xff;
    TMR1 = 0;
    T1CONbits.TCKPS = 1;
    T1CONbits.TON = 1;
    }

    int main(){
    init_port();
    init_timer1();
    while(1){

    _LATB1 = 1;
    while (!T1CONbits.TSIDL);
    T1CONbits.TSIDL = 0;

    _LATB1 = 0;
    while (!T1CONbits.TSIDL);
    T1CONbits.TSIDL = 0;
    }
    }

    Khi nạp vào pic thì không chạy được như ý: thay vì đèn ở pinb1 chớp tắt liên tục thì nó lại luôn sáng. Mình không hiểu tại sao. Mong các bạn chỉ giúp.
    Cấu hình Timer quá sơ sài, chưa đủ. Tham khảo của mình viết :

    void timer1_init()
    {
    TMR1 = 0;
    PR1 = PR_FOR_FSAMPLE;
    T1CONbits.TGATE = 0;
    T1CONbits.TCKPS = 2;//scaler = 64
    T1CONbits.TCS = 0;//internal clock
    T1CONbits.TON = 1;

    _T1IF = 0;//xoa co ngat
    _T1IE = 1;//Cho phep ngat xay ra
    _T1IP = TIMER1_INTERRUPT_PRIORITY;
    }
    Last edited by chestnut; 21-07-2010, 13:03.
    The goal of power electronics is control the flow of energy from an electrical source to an electrical load with high efficiency, high availability, high reliability, light weight and low cost.

    Comment


    • #3
      Hi,
      Bạn cho mình hỏi sao lại như vầy: while (!T1CONbits.TSIDL); cái bit tsidl là bit cho phép timer chạy trong chế độ idle mode chứ có liên quan j đến việc tràn timer đâu nhỉ? Theo mình bạn nên thay bằng while (!_T1IF);
      |

      Comment

      Về tác giả

      Collapse

      pqthai89 Tìm hiểu thêm về pqthai89

      Bài viết mới nhất

      Collapse

      Đang tải...
      X