Thông báo

Collapse
No announcement yet.

sửa lỗi code msp430g2553

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

  • sửa lỗi code msp430g2553

    em có viết code Đề bài là cho P1.0 sáng, P1.6 tắt. Nhấn 6 lần nút P1.3 thì đổi trạng thái 2 led.
    code ko báo lỗi nhưng thử trên kid launchpad ko chạy đúng. Anh chị sửa lỗi giùm em với ạ!

    #include "msp430g2553.h"

    int main( void )
    {
    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;

    P1SEL &=~ (BIT0 +BIT3+ BIT6);
    P1SEL2 &=~ (BIT0 +BIT3+ BIT6);

    P1DIR |= (BIT0 + BIT6);
    P1OUT |= BIT0;
    P1OUT &=~ BIT6;

    P1DIR &=~ BIT3;
    P1REN |= BIT3;
    P1OUT |= BIT3;

    int n = 0;
    while(1)
    {
    if((P1IN & BIT3) == BIT3)
    n=n+1;
    while(n==5)
    {
    P1OUT ^= BIT0 + BIT6;
    n = 0;
    }
    }
    }

  • #2
    Bạn thêm 2 dòng này vào sau dòng WDTCTL = WDTPW + WDTHOLD;

    BCSCTL1 = CALBC1_1MHZ; // Set range
    DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation

    Comment


    • #3
      mình đã thêm rồi nhưng ko được bạn.

      Comment


      • #4
        mình không có kit để kiểm tra. Bạn có thể sử dụng tính năng debug xem sao.
        Thêm nữa: code của bạn không có phần chống nảy phím thì khó mà thực hiện chính xác được. Vì mỗi lần ta nhấn phím nó sẽ nhảy nhiều lần lắm chứ không phải 1 lần.

        Comment


        • #5
          mình mới làm quen với họ này nên đang tập code thử thôi, bạn có thể viết lại đoạn code hoàn chỉnh cho mình tham khảo được ko?
          Và làm thế nào để chống nhảy phím vậy bạn? thank bạn!!

          Comment


          • #6
            #include "msp430g2553.h"

            void main( void )
            {

            WDTCTL = WDTPW + WDTHOLD;
            P1DIR |= (BIT0 + BIT6); //chon chan 1.0 và 1.6 la ngõ ra
            P1DIR &=~BIT3; //chon chan 1.3 la ngo vao
            P1REN |= BIT3; //keo tro noi 47k len nguon

            int n = 0;
            while(1)
            {
            if((P1IN & BIT3) == 0)//kiem tra co an nut tai chân 1.3
            {
            n++;
            if(n==5)
            {
            P1OUT|=BIT6;//led 1.6 sang, led 1.0 tat.
            P1OUT&=~BIT0;
            __delay_cycles(2000000);// chở 2s
            n=0;
            }
            else
            {
            P1OUT|=BIT0;//led 1.0 sang led 1.6 tat
            P1OUT&=~BIT6;
            }
            }
            }
            }

            Comment


            • #7
              hichic, mình đã test thử nhưng vẫn không chạy được, compile thì không báo lỗi,

              Comment


              • #8
                chào bạn!
                có vài vấn đề thế này!

                chân 1.3 của con 2553 không có trở kéo lên nên không thể sử dụng chức năng ngõ vào bình thường được.
                mình đã dùng lệnh kéo trở nội lên là P1REN mà nó cũng không lên mức 1.

                thủ thuật nhỏ là bạn set chân 1.2 lên 1, rồi lấy cái zoom ở chân RXT nối hai chân 1.2 và 1.3 với nhau. sau đó nạp code sau vô là chạy.

                không thể set số lần ấn để sáng tắt led được vì bị nhiễu và lúc ân phím chương trình có thể đang chạy 1 nữa nên ấn phím vô dụng. lúc ăn lúc không.

                nói chung nên kéo trở 47k lên mức 1 tại chân 1.3 và nên dùng "Ngắt ngoài" sẽ tốt hơn là set ngõ vào.


                ///////////////// chú ý code này phải nối 2 chân 1.2 và 1.3 với nhau //////////////////
                #include <msp430.h>

                void main(void)
                {
                WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
                P1DIR=0xf7; //chon chan 1.3 la IN, cac chan con lai la OUT
                while(1)
                {
                P1OUT=0x04; //set chan 1.2 len muc 1
                P1OUT&=~BIT0; //tat led chan 1.0
                P1OUT|=BIT6; //bat led chan 1.6
                if((P1IN&BIT3)==0)
                {
                P1OUT|=BIT0;
                P1OUT&=~BIT6;
                __delay_cycles(50000);
                }
                }

                }

                Comment


                • #9
                  mà quên hỏi bạn maihoa1612 bạn up chủ đề này lên lâu rồi, bây giờ có còn nghiên cứu gì về nó không vậy?

                  Comment


                  • #10
                    umk, mình vẫn đang học thêm về dòng chip này nên vẫn đang tìm hiểu về nó đây, làm bài tập ví dụ để mày mò thêm thôi bạn,hi
                    Bạn có thời gian rảnh có thể hướng dẫn mình học thêm về dòng này ko? thank bạn nhiều!

                    Comment


                    • #11
                      Code như vậy không chạy là phải rồi,chú ý là tất cả các chân của MSP430 đều kéo trở lên được.Cài P1SEL |=BIT3 chỉ là cho phép có kéo trở lên hay không thôi,phải cài thêm P1OUT |= BIT3 để báo là kéo trở nên nguồn,nếu em cài là PxOUT &=~BIT3 thì sẽ kéo trở xuống đất,mặc định khi khởi tạo thì PxOUT =0x00 nên nút của em sẽ là kéo trở xuống đất,nhấn vào không có tác dụng gì.Ngoài ra chương trình như vậy chỉ nhấn 1 lần thì vòng while quét qua liên tục sẽ hiểu là đang nhấn rất nhiều lần -> Sai thuật toán.Để viết đúng thì phải xét nút được bấm hay chưa dựa vào việc bắt xườn xung của nút như từ trạng thái 1 ->0 chẳng hạn

                      Comment


                      • #12
                        Nguyên văn bởi maihoa1612 Xem bài viết
                        em có viết code Đề bài là cho P1.0 sáng, P1.6 tắt. Nhấn 6 lần nút P1.3 thì đổi trạng thái 2 led.
                        code ko báo lỗi nhưng thử trên kid launchpad ko chạy đúng. Anh chị sửa lỗi giùm em với ạ!

                        #include "msp430g2553.h"

                        int main( void )
                        {
                        // Stop watchdog timer to prevent time out reset
                        WDTCTL = WDTPW + WDTHOLD;

                        P1SEL &=~ (BIT0 +BIT3+ BIT6);
                        P1SEL2 &=~ (BIT0 +BIT3+ BIT6);

                        P1DIR |= (BIT0 + BIT6);
                        P1OUT |= BIT0;
                        P1OUT &=~ BIT6;

                        P1DIR &=~ BIT3;
                        P1REN |= BIT3;
                        P1OUT |= BIT3;

                        int n = 0;
                        while(1)
                        {
                        if((P1IN & BIT3) == BIT3)
                        n=n+1;
                        while(n==5)
                        {
                        P1OUT ^= BIT0 + BIT6;
                        n = 0;
                        }
                        }
                        }
                        bạn sửa lại như này nhé:

                        #include "msp430g2553.h"
                        int n;
                        void main( void )
                        {

                        WDTCTL = WDTPW + WDTHOLD;
                        BCSCTL1 = CALBC1_1MHZ;
                        DCOCTL = CALDCO_1MHZ;

                        P1SEL = 0;
                        P1SEL2 = 0; //P1 la GPIO

                        P1DIR |= (BIT0 + BIT6); // P1.0 va P1.6 la output
                        P1DIR &=~BIT3; //xoa P1.3
                        P1REN |= BIT3; //cho phep tro trong
                        P1OUT|=BIT3; //keo tro len duong nguon
                        P1OUT&=~BIT0; //P1.6 tat, P1.0 sang
                        P1OUT|=BIT6;
                        n = 0;
                        while(1)
                        {
                        if(!(P1IN & BIT3)) //kiem tra P1.3 co dc nhan hay ko
                        {__delay_cycles(200000); // chong rung phim
                        while(!(P1IN & BIT3)) // nut nhan con giu thi ko lam gi het
                        {

                        }
                        n=n+1;
                        while(n==6)
                        {
                        P1OUT ^= BIT0 + BIT6;
                        n = 0;
                        }
                        }
                        }

                        }

                        Comment


                        • #13
                          Nguyên văn bởi maihoa1612 Xem bài viết
                          umk, mình vẫn đang học thêm về dòng chip này nên vẫn đang tìm hiểu về nó đây, làm bài tập ví dụ để mày mò thêm thôi bạn,hi
                          Bạn có thời gian rảnh có thể hướng dẫn mình học thêm về dòng này ko? thank bạn nhiều!
                          Mình cũng đang học về nó thôi, không biết nhiều đâu!

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X