在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430G2553測試程序(串口程序,定時(shí)器模式)

            MSP430G2553測試程序(串口程序,定時(shí)器模式)

            作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
            //

            //
            //MSP430G2xx3
            //-----------------
            ///||XIN|-
            //| ||
            //--|RSTXOUT|-
            //||
            //|CCI0B/TXD/P1.1|-------->
            //|| 9600 8N1
            //|CCI0A/RXD/P1.2|<--------
            // Built withIAR Embedded Workbench Version: 5.40

            本文引用地址:http://www.biyoush.com/article/201611/322874.htm

            //串口調(diào)試助手,下載地址:http://www.sudt.com/download/AccessPort137.zip
            //******************************************************************************

            #include "msp430g2553.h"

            //------------------------------------------------------------------------------
            // Hardware-related definitions
            //------------------------------------------------------------------------------
            #define UART_TXD0x02// TXD on P1.1 (Timer0_A.OUT0)
            #define UART_RXD0x04// RXD on P1.2 (Timer0_A.CCI1A)

            //------------------------------------------------------------------------------
            // Conditions for 9600 Baud SW UART, SMCLK = 1MHz,設(shè)置波特率,僅僅修改下面一下數(shù)據(jù)即可,如9600,2400
            //9600,2400工作穩(wěn)定。波特率不宜太高。
            //------------------------------------------------------------------------------
            #define UART_TBIT_DIV_2(1000000 / (9600 * 2))
            #define UART_TBIT(1000000 / 9600)

            //------------------------------------------------------------------------------
            // Global variables used for full-duplex UART communication
            //------------------------------------------------------------------------------
            unsigned int txData;// UART internal variable for TX
            unsigned char rxBuffer;// Received UART character

            //------------------------------------------------------------------------------
            // Function prototypes
            //------------------------------------------------------------------------------
            void TimerA_UART_init(void);
            void TimerA_UART_tx(unsigned char byte);
            void TimerA_UART_print(char *string);

            //------------------------------------------------------------------------------
            // main()
            //------------------------------------------------------------------------------
            void main(void)
            {
            WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer

            DCOCTL = 0x00;// Set DCOCLK to 1MHz
            BCSCTL1 = CALBC1_1MHZ;
            DCOCTL = CALDCO_1MHZ;

            P1OUT = 0x00;// Initialize all GPIO
            P1SEL = UART_TXD + UART_RXD;// Timer function for TXD/RXD pins
            P1DIR = 0xFF & ~UART_RXD;// Set all pins but RXD to output
            P2OUT = 0x00;
            P2SEL = 0x00;
            P2DIR = 0xFF;

            __enable_interrupt();

            TimerA_UART_init();// Start Timer_A UART
            TimerA_UART_print("G2553 TimerA UART");
            TimerA_UART_print("READY.Echo Input,and Monitor.");

            for (;;)
            {
            // Wait for incoming character
            __bis_SR_register(LPM0_bits);

            // Update board outputs according to received byte,根據(jù)接收到的數(shù)據(jù)點(diǎn)亮發(fā)光管
            //建議16進(jìn)制,例如01H P1.0亮 11H P1.0 1.6亮
            if (rxBuffer & 0x01) P1OUT |= 0x01; else P1OUT &= ~0x01;// P1.0
            if (rxBuffer & 0x02) P1OUT |= 0x08; else P1OUT &= ~0x08;// P1.3
            if (rxBuffer & 0x04) P1OUT |= 0x10; else P1OUT &= ~0x10;// P1.4
            if (rxBuffer & 0x08) P1OUT |= 0x20; else P1OUT &= ~0x20;// P1.5
            if (rxBuffer & 0x10) P1OUT |= 0x40; else P1OUT &= ~0x40;// P1.6
            if (rxBuffer & 0x20) P1OUT |= 0x80; else P1OUT &= ~0x80;// P1.7
            if (rxBuffer & 0x40) P2OUT |= 0x40; else P2OUT &= ~0x40;// P2.6
            if (rxBuffer & 0x80) P2OUT |= 0x80; else P2OUT &= ~0x80;// P2.7
            // Echo received character,回傳發(fā)送的數(shù)據(jù)
            TimerA_UART_tx(rxBuffer);//
            }
            }
            //------------------------------------------------------------------------------
            // Function configures Timer_A for full-duplex UART operation
            //------------------------------------------------------------------------------
            void TimerA_UART_init(void)
            {
            TACCTL0 = OUT;// Set TXD Idle as Mark = 1
            TACCTL1 = SCS + CM1 + CAP + CCIE;// Sync, Neg Edge, Capture, Int
            TACTL = TASSEL_2 + MC_2;// SMCLK, start in continuous mode
            }
            //------------------------------------------------------------------------------
            // Outputs one byte using the Timer_A UART
            //------------------------------------------------------------------------------
            void TimerA_UART_tx(unsigned char byte)
            {
            while (TACCTL0 & CCIE);// Ensure last char got TXd
            TACCR0 = TAR;// Current state of TA counter
            TACCR0 += UART_TBIT;// One bit time till first bit
            TACCTL0 = OUTMOD0 + CCIE;// Set TXD on EQU0, Int
            txData = byte;// Load global variable,要發(fā)送的數(shù)據(jù)
            txData |= 0x100;// Add mark stop bit to TXData
            txData <<= 1;// Add space start bit
            }

            //------------------------------------------------------------------------------
            // Prints a string over using the Timer_A UART
            //------------------------------------------------------------------------------
            void TimerA_UART_print(char *string)
            {
            while (*string) {
            TimerA_UART_tx(*string++);
            }
            }
            //------------------------------------------------------------------------------
            // Timer_A UART - Transmit Interrupt Handler
            //------------------------------------------------------------------------------
            #pragma vector = TIMER0_A0_VECTOR
            __interrupt void Timer_A0_ISR(void)
            {
            static unsigned char txBitCnt = 10;

            TACCR0 += UART_TBIT;// Add Offset to CCRx
            if (txBitCnt == 0) {// All bits TXed?
            TACCTL0 &= ~CCIE;// All bits TXed, disable interrupt
            txBitCnt = 10;// Re-load bit counter
            }
            else {
            if (txData & 0x01) {
            TACCTL0 &= ~OUTMOD2;// TX Mark 1
            }
            else {
            TACCTL0 |= OUTMOD2;// TX Space 0
            }
            txData >>= 1;
            txBitCnt--;
            }
            }
            //------------------------------------------------------------------------------
            // Timer_A UART - Receive Interrupt Handler
            //------------------------------------------------------------------------------
            #pragma vector = TIMER0_A1_VECTOR
            __interrupt void Timer_A1_ISR(void)
            {
            static unsigned char rxBitCnt = 8;
            static unsigned char rxData = 0;

            switch (__even_in_range(TA0IV, TA0IV_TAIFG)) { // Use calculated branching
            case TA0IV_TACCR1:// TACCR1 CCIFG - UART RX
            TACCR1 += UART_TBIT;// Add Offset to CCRx
            if (TACCTL1 & CAP) {// Capture mode = start bit edge
            TACCTL1 &= ~CAP;// Switch capture to compare mode
            TACCR1 += UART_TBIT_DIV_2;// Point CCRx to middle of D0
            }
            else {
            rxData >>= 1;
            if (TACCTL1 & SCCI) {// Get bit waiting in receive latch
            rxData |= 0x80;
            }
            rxBitCnt--;
            if (rxBitCnt == 0) {// All bits RXed?
            rxBuffer = rxData;// Store in global variable
            rxBitCnt = 8;// Re-load bit counter
            TACCTL1 |= CAP;// Switch compare to capture mode
            __bic_SR_register_on_exit(LPM0_bits);// Clear LPM0 bits from 0(SR)
            }
            }
            break;
            }
            }



            評論


            技術(shù)專區(qū)

            關(guān)閉