Thông báo

Collapse
No announcement yet.

Phan_IT Xin giới thiệu các chương trình ví dụ về dòng vi điều khiển MSP430 của Texas

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

  • Phan_IT Xin giới thiệu các chương trình ví dụ về dòng vi điều khiển MSP430 của Texas

    Tôi xin giới thiệu các ví dụ cơ bản để làm quen với dòng vi điều khiển MSP430, đây là dòng vi điều khiển 16bit. Các ví dụ gồm:
    - Sơ đồ nguyên lý.
    - Hình ảnh bố trí thí nghiệm.
    - Source code bằng ASM hoặc C (tùy chọn cho các bạn thích lập trình ASM MSP430 hay lập trình C MSP430).

    - Chip trong các ví dụ dùng MSP430G2231, MSPG2211 (đây là các chip chân cắm - tiện lợi để thí nghiệm).
    - Compiler dùng CCSC của Texas (free).
    - Mạch nạp dùng LaunchPad của Texas.
    Chi tiết thêmcos thể tham khảo tại Phan Information Technology
    Chúc các bạn thành công !
    0912666017

  • #2
    MSP430G2231 điều khiển 1 led đơn.

    Code ASM

    .cdecls C,LIST, "msp430g2231.h"

    ;------------------------------------------------------------------------------
    .text ; Progam Start
    ;------------------------------------------------------------------------------
    RESET mov.w #0280h,SP ; Initialize stackpointer
    StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
    SetupP1 bis.b #001h,&P1DIR ; P1.0 output
    ;
    Mainloop xor.b #001h,&P1OUT ; Toggle P1.0
    Wait mov.w #050000,R15 ; Delay to R15
    L1 dec.w R15 ; Decrement R15
    jnz L1 ; Delay over?
    jmp Mainloop ; Again
    ;
    ;------------------------------------------------------------------------------
    ; Interrupt Vectors
    ;------------------------------------------------------------------------------
    .sect ".reset" ; MSP430 RESET Vector
    .short RESET ;
    .end


    Code C:
    #include <msp430g2231.h>

    void main(void)
    {
    WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
    P1DIR |= 0x01; // Set P1.0 to output direction

    for (
    {
    volatile unsigned int i;

    P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR

    i = 50000; // Delay
    do (i--);
    while (i != 0);
    }
    }
    Attached Files
    0912666017

    Comment


    • #3
      MSP430 giao tiếp với 8 led đơn

      Code ASM:
      .cdecls C,LIST, "msp430g2231.h"

      ;------------------------------------------------------------------------------
      .text ; Progam Start
      ;------------------------------------------------------------------------------
      RESET mov.w #0280h,SP ; Initialize stackpointer
      StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
      SetupP1 mov.b #0FFh,&P1DIR ; P1 output
      ;
      mov.b #001h,R14 ; set value for R14
      Mainloop mov.b R14,&P1OUT ; R14 to P1
      call #Delay ; delay
      rla R14 ; shift left R14
      cmp #000h,R14 ; cmp R14 with 0
      jne Mainloop ; if R14 != 0
      mov.b #001h,R14 ; if R14=0 then R14 = 1
      jmp Mainloop ; Again
      ;------------------------------------------------------------------------------
      Delay
      mov.w #050000,R15 ; set val to R15
      Loop1 dec.w R15 ; Decrement R15
      jnz Loop1 ; jmp to Loop1 if !=0
      ret
      ;------------------------------------------------------------------------------
      ; Interrupt Vectors
      ;------------------------------------------------------------------------------
      .sect ".reset" ; MSP430 RESET Vector
      .short RESET ;
      .end


      Code C:
      #include <msp430g2231.h>

      void Delay(unsigned int nLoop);

      void main(void)
      {
      unsigned int j;
      unsigned char nB;

      WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
      P1DIR |= 0xFF; // Set P1.0 to output direction

      nB = 0x01;
      while(1)
      {
      for(j=0;j<8;j++)
      {
      P1OUT = nB;
      Delay(50000);
      if(nB==0x80)
      nB = 0x01;
      else
      nB = nB << 1;
      } //for
      } //while
      }
      //************************************************** ****************************
      void Delay(unsigned int nLoop)
      {
      while(nLoop--);
      }
      //************************************************** ****************************
      Attached Files
      0912666017

      Comment


      • #4
        MSP430G2211 giao tiếp với led 7 thanh, hiện thị các số từ 0 đến 9, ví dụ này để tiến tới mục đích điều khiển 2 hoặc nhiều hơn số led 7 thanh.

        Code C:
        #include <msp430g2231.h>
        void Delay(unsigned int nLoop);
        unsigned char To7Seg(unsigned char nVal,unsigned char nPt);
        void main(void)
        {
        unsigned int j;
        WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
        P1DIR |= 0xFF; // Set P1 to output direction
        while(1)
        {
        for(j=0;j<11;j++)
        {
        P1OUT = To7Seg(j,1);
        Delay(50000);
        } //for
        } //while
        }
        //************************************************** ****************************
        void Delay(unsigned int nLoop)
        {
        while(nLoop--);
        }
        //************************************************** ****************************
        unsigned char To7Seg(unsigned char nVal,unsigned char nPt)
        {
        unsigned char nRet;

        switch(nVal)
        {
        case 0:
        nRet = 192;
        break;
        case 1:
        nRet = 249;
        break;
        case 2:
        nRet = 164;
        break;
        case 3:
        nRet = 176;
        break;
        case 4:
        nRet = 153;
        break;
        case 5:
        nRet = 146;
        break;
        case 6:
        nRet = 130;
        break;
        case 7:
        nRet = 248;
        break;
        case 8:
        nRet = 128;
        break;
        case 9:
        nRet = 144;
        break;
        case 10:
        nRet = 255;
        break;
        } //switch

        if(nPt)
        nRet = nRet & 127;

        return(nRet);
        }
        Attached Files
        0912666017

        Comment


        • #5
          MSP430 với Timer A
          ví dụ này điều khiển 1 led đơn nhấp nháy theo lệnh được cài trong chương trình sử lý ngắt của Timer A.

          Code ASM:
          .cdecls C,LIST, "msp430g2231.h"
          ;------------------------------------------------------------------------------
          .text ; Program Start
          ;------------------------------------------------------------------------------
          RESET mov.w #0280h,SP ; Initialize stackpointer
          StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
          SetupP1 bis.b #001h,&P1DIR ; P1.0 output
          SetupC0 mov.w #CCIE,&CCTL0 ; CCR0 interrupt enabled
          mov.w #50000,&CCR0 ;
          SetupTA mov.w #TASSEL_2+MC_1,&TACTL ; SMCLK, upmode
          ;
          Mainloop bis.w #CPUOFF+GIE,SR ; CPU off, interrupts enabled
          nop ; Required for debugger
          ;
          ;-------------------------------------------------------------------------------
          TA0_ISR; Toggle P1.0
          ;-------------------------------------------------------------------------------
          xor.b #001h,&P1OUT ; Toggle P1.0
          reti ;
          ;
          ;------------------------------------------------------------------------------
          ; Interrupt Vectors
          ;------------------------------------------------------------------------------
          .sect ".reset" ; MSP430 RESET Vector
          .short RESET ;
          .sect ".int09" ; Timer_A0 Vector
          .short TA0_ISR ;
          .end



          Code C:
          #include <msp430g2231.h>

          void main(void)
          {
          WDTCTL = WDTPW + WDTHOLD; // Stop WDT
          P1DIR |= 0x01; // P1.0 output
          CCTL0 = CCIE; // CCR0 interrupt enabled
          CCR0 = 50000;
          TACTL = TASSEL_2 + MC_1; // SMCLK, upmode

          _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
          }

          // Timer A0 interrupt service routine
          #pragma vector=TIMERA0_VECTOR
          __interrupt void Timer_A (void)
          {
          P1OUT ^= 0x01; // Toggle P1.0
          }
          Attached Files
          0912666017

          Comment


          • #6
            MSP430G2211 giao tiếp với 2 led 7 thanh. ví dụ này kết hợp 2 ví dụ giao tiép với 1 led 7 thanh và Timer A

            Code C:
            #include <msp430g2231.h>

            unsigned char To7Seg(unsigned char nVal,unsigned char nPt);
            void Delay(unsigned int nLoop);

            unsigned char mDigit[2];
            unsigned char mDigNo;

            void main(void)
            {
            unsigned char i;

            WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
            P2SEL = 0x00; // IO function is select
            P2DIR = 0xC0; // Port 2 output
            P2OUT = 0xC0;

            P1DIR |= 0xFF; // Port 1 output

            CCTL0 = CCIE; // CCR0 interrupt enabled
            CCR0 = 10000; // cycles to overload
            TACTL = TASSEL_2 + MC_1; // SMCLK, upmode

            _BIS_SR(GIE); // w/ interrupt

            mDigNo = 0;

            while(1)
            {
            for(i=0;i<100;i++)
            {
            mDigit[1] = To7Seg(i/10,0);
            mDigit[0] = To7Seg(i%10,0);
            Delay(50000);
            } //for
            }
            }
            //************************************************** ****************************
            // Timer A0 interrupt service routine
            #pragma vector=TIMERA0_VECTOR
            __interrupt void Timer_A (void)
            {
            switch(mDigNo)
            {
            case 0:
            P2OUT = ~0x80;
            break;
            case 1:
            P2OUT = ~0x40;
            break;
            }
            P1OUT = mDigit[mDigNo];

            mDigNo++;
            if(mDigNo >1)
            mDigNo = 0;
            }

            //************************************************** ****************************
            unsigned char To7Seg(unsigned char nVal,unsigned char nPt)
            {
            unsigned char nRet;

            switch(nVal)
            {
            case 0:
            nRet = 192;
            break;
            case 1:
            nRet = 249;
            break;
            case 2:
            nRet = 164;
            break;
            case 3:
            nRet = 176;
            break;
            case 4:
            nRet = 153;
            break;
            case 5:
            nRet = 146;
            break;
            case 6:
            nRet = 130;
            break;
            case 7:
            nRet = 248;
            break;
            case 8:
            nRet = 128;
            break;
            case 9:
            nRet = 144;
            break;
            case 10:
            nRet = 255;
            break;
            } //switch

            if(nPt)
            nRet = nRet & 127;

            return(nRet);
            }
            //************************************************** ****************************
            void Delay(unsigned int nLoop)
            {
            while(nLoop--);
            }
            //************************************************** ****************************
            Attached Files
            0912666017

            Comment


            • #7
              rất bổ ich!thanks!
              |

              Comment


              • #8
                Các bác có ai hướng dẫn cho em sử dụng CCS để lập trình không? Em mày mò mãi mà không biết làm thế nào để lập trình được, em có mua một mạch nạp MSP-FET430UIF của TI, ngoài ra có một file txt mà không biết flash thế nào được?
                Press "Thank - Button"

                Comment


                • #9
                  Trong trang web của tôi (Phan Information Technology) có hướng dẫn cách sử dụng CCS để lập trình C và ASM, ngoài ra có cả hướng dẫn sử dụng CCS điều khiển mạch nạp và debug LaunchPad.
                  0912666017

                  Comment


                  • #10
                    Cám ơn bác, em sẽ nghiên cứu ạ
                    Press "Thank - Button"

                    Comment


                    • #11
                      iẹnn tại trường em cũng có nhiùe bạn làm về MSP, nhưng em cũng chưa hiểu điểm mạnh của nó, có giống như các dòng vi điều khiển khác không ạ? mong các bác chỉ giáo ^^
                      Be quan. Plz contact through email:

                      Comment


                      • #12
                        Điểm mạnh của MSP430 là ultra low power, tiêu thụ năng lượng rất ít so với các dòng low power khác nhờ bộ DCO tạo thời gian wake up rất nhanh (cỡ us) và ổn định.
                        Tất nhiên là điều đó chỉ thể hiện khi trong code cho MCU ngủ liên tục, chỉ thức khi làm việc

                        Comment


                        • #13
                          Mình code tạo 2 xung PWM ra chân P1.2 và P1.3, dựa vào code mẫu của TI cho msp430. Mình biên dịch và đã mô phỏng thành công trên protues nhưng không hiểu sao thử trên mạch thực tế thì chỉ có mỗi chân P1.2 có xung, chân 1.3 ko hề có xung. Mình thử với các code mẫu khác và cả code trên mạng nhưng kết quả vẫn như vậy. Có cao thủ nào biết tình trạng này không?
                          Đây là code:
                          Code:
                          #include  <msp430g2553.h>
                          void main(void)
                          {
                            WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
                            P1DIR |= 0x0C;                            // P1.2 and P1.3 output
                            P1SEL |= 0x0C;                            // P1.2 and P1.3 TA1/2 otions
                            CCR0 = 655;                               // PWM Period/2
                            CCTL1 = OUTMOD_6;                         // CCR1 toggle/set
                            CCR1 = 32;                                // CCR1 PWM duty cycle
                            CCTL2 = OUTMOD_6;                         // CCR2 toggle/set
                            CCR2 = 49;                                // CCR2 PWM duty cycle
                            TACTL = TASSEL_1 + MC_1;                  // ACLK, up mode
                          
                            _BIS_SR(LPM0_bits);                       // Enter LPM0
                          }

                          Comment


                          • #14
                            Hi,
                            Bác phan_it rất nhiệt tình tuy nhiên cách post bài của bác thì sẽ làm cho nhiều người bị rối loạn, hoang mang và không thể hiện được điểm mạnh của họ VDK MSP430. Theo tui bác nên đi từ Datasheet của nó, sau khi đọc Datasheet của họ VDK này tui chắc rằng không ít người bỏ 89, bỏ PIC để chạy qua MSP430 vì cái độc đáo của họ chíp này.
                            Để lúc nào rãnh rãnh tui cũng làm vài bài góp cùng bác cho vui.
                            Thân ái.
                            Đường đến những ngày vinh quang không còn xa
                            Con đường chúng ta... chúng ta đã chọn.

                            Comment


                            • #15
                              AE cho mình xin phần mền ccs của con này đi. minh seach mà ko thấy.
                              Thanks

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X