Thông báo

Collapse
No announcement yet.

Nhờ xem giúp code cho 12f629

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

  • Nhờ xem giúp code cho 12f629

    Chào các bạn !

    Mình tự viết đoạn code cho Pic 12f629 để giải mã tín hiệu hồng ngoại của nút power remote. Code đã nhận đúng tín hiệu và đã chạy, nhưng có 1 lỗi mình ko thể khắc phục được như sau :

    Nhấn nút power lần 1 RA0 = 1 ( đúng như code đã viết )
    Nhấn nút power lần 2 RA1 = 1 ( đúng như code đã viết )
    Nhấn nút power lần 3 RA0 = 0, RA1 = 0 ( đúng như code đã viết )

    Nhưng đến đây thì ko thể điều khiển được nữa. Mình phải nhấn nút reset pic mới có thể điều khiển được.

    Các bạn xem giúp mình đoạn code có sai chỗ nào ko vậy. Code này mình viết đã chạy tốt trên pic 16f84a, mình đã chuyển code sang 12f629 thì bị lỗi như vậy. Mong các bạn giúp đỡ ! Dưới đây là code của mình.

    #include <12f629.h>
    #include <def_12f629.h>

    #fuses XT,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR

    #use delay(clock=4000000)

    unsigned char i,cmd;
    int8 a;
    void nhanma();

    void main()
    {
    Trisa0 = 0;
    Trisa1 = 0;
    Trisa2 = 1;
    RA0 = 0;
    RA1 = 0;
    RA2 = 1;
    a=0;
    while(1)
    {
    if(!input(pin_A2)) {nhanma();}
    }
    }

    void nhanma()
    {
    cmd=0;
    for(i=0;i<3;++i)
    {
    delay_us(750);
    if(input(pin_A2)) return; // thoat khoi vong lap
    }
    while(!input(pin_A2));
    for(i=0;i<7;++i)
    {
    cmd>>=1; // dich sang fai 1 bit
    while(input(pin_A2));
    delay_us(750);
    if(!input(pin_A2))
    {
    cmd|=0x80; // cmd = cmd|0x80 phep OR tung bit cmd voi 0x80(=10000000)
    while(!input(pin_A2));
    }
    }
    cmd>>=1; // dich sang fai 1 bit
    if(cmd==21) // 0x15 or 0010101 ( phim power )
    {
    a++;
    if(a==1) {RA0 = 1;RA1 = 0;} // nhan Power lan 1 RA0 = 1
    if(a==2) {RA0 = 0;RA1 = 1;} // nhan Power lan 2 RA1 = 1
    if(a==3) {RA0 = 0;RA1 = 0;} //
    }
    delay_ms(250);
    }

  • #2
    Nguyên văn bởi hieu98dt Xem bài viết
    Chào các bạn !

    Mình tự viết đoạn code cho Pic 12f629 để giải mã tín hiệu hồng ngoại của nút power remote. Code đã nhận đúng tín hiệu và đã chạy, nhưng có 1 lỗi mình ko thể khắc phục được như sau :

    Nhấn nút power lần 1 RA0 = 1 ( đúng như code đã viết )
    Nhấn nút power lần 2 RA1 = 1 ( đúng như code đã viết )
    Nhấn nút power lần 3 RA0 = 0, RA1 = 0 ( đúng như code đã viết )

    Nhưng đến đây thì ko thể điều khiển được nữa. Mình phải nhấn nút reset pic mới có thể điều khiển được.

    Các bạn xem giúp mình đoạn code có sai chỗ nào ko vậy. Code này mình viết đã chạy tốt trên pic 16f84a, mình đã chuyển code sang 12f629 thì bị lỗi như vậy. Mong các bạn giúp đỡ ! Dưới đây là code của mình.

    #include <12f629.h>
    #include <def_12f629.h>

    #fuses XT,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR

    #use delay(clock=4000000)

    unsigned char i,cmd;
    int8 a;
    void nhanma();

    void main()
    {
    Trisa0 = 0;
    Trisa1 = 0;
    Trisa2 = 1;
    RA0 = 0;
    RA1 = 0;
    RA2 = 1;
    a=0;
    while(1)
    {
    if(!input(pin_A2)) {nhanma();}
    }
    }

    void nhanma()
    {
    cmd=0;
    for(i=0;i<3;++i)
    {
    delay_us(750);
    if(input(pin_A2)) return; // thoat khoi vong lap
    }
    while(!input(pin_A2));
    for(i=0;i<7;++i)
    {
    cmd>>=1; // dich sang fai 1 bit
    while(input(pin_A2));
    delay_us(750);
    if(!input(pin_A2))
    {
    cmd|=0x80; // cmd = cmd|0x80 phep OR tung bit cmd voi 0x80(=10000000)
    while(!input(pin_A2));
    }
    }
    cmd>>=1; // dich sang fai 1 bit
    if(cmd==21) // 0x15 or 0010101 ( phim power )
    {
    a++;
    if(a==1) {RA0 = 1;RA1 = 0;} // nhan Power lan 1 RA0 = 1
    if(a==2) {RA0 = 0;RA1 = 1;} // nhan Power lan 2 RA1 = 1
    if(a==3) {RA0 = 0;RA1 = 0;} //
    }
    delay_ms(250);
    }
    Code:
    if(cmd==21) // 0x15 or 0010101 ( phim power )
    { 
    a++; 
    if(a==1) {RA0 = 1;RA1 = 0;} // nhan Power lan 1 RA0 = 1
    if(a==2) {RA0 = 0;RA1 = 1;} // nhan Power lan 2 RA1 = 1
    if(a==3) {RA0 = 0;RA1 = 0;a=0;} // 
    }
    |

    Comment


    • #3
      2 cái "if" dưới đặt là "else if".

      Comment


      • #4
        Cám ơn các bạn nhiều. Đúng người trong cuộc mù mắt, cứ nghĩ rằng code mình viết đúng rồi nên kiểm tra những cái cao siêu cứ tưởng config sai gì đó. đúng là thiếu a=0, code bên 16f84a thì đúng là có a = 0. Chân thành cám ơn !

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X