大家好
我想通过 UART 从 CCS 终端接收数据。 我将波特率固定为9600。 并初始化 LED、以便在终端的数据匹配时闪烁。 但是当我通过终端写入数据时、LED 指示灯不亮、终端上有一些垃圾正在打印。所以、有人能帮我获得正确的输出。 我在这里共享代码。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 正是 C///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
#include
#include
#include
#include
unsigned char addr[30]="";
void pin_setup()
{
P1DIR = 0x02;
P1OUT =~0x02;
}
void clk_setp()
{
CSCTL0_H = CSKKEY_H;
CSCTL1 = DCOFSEL_6;//8MHz |DCOFSEL_0 -1MHz
CSCTL2 = SELA_VLOCLK | SELESS__DCOCLK | SELM_DCOCLK;//设置 SMCLK = MCLK = DCO
CSCTL3 = DIVA_1|DIVS_1|DIVM_1;
CSCTL0_H = 0;
}
空 UART_CONFIG ()
{
P2SEL0 &=~(BIT0 | BIT1);
P2SEL1 |=(BIT0 | BIT1);// USCI_A0 UART 操作
PM5CTL0 &=~LOCKLPM5;
UCA0CTLW0=UCSWRST;
UCA0CTLW0 |=UCSSEL_SMCLK;
UCA0BRW = 52;
UCA0MCTLW |= UCOS16 | UCBRF_1 | 0x49;
UCA0CTLW0 &=~UCSWRST;//初始化 eUSCI
UCA0IE |= UCRXIE;//启用 USCI_A0 RX 中断
}
空 UART_Receive ()
{
PIN_setup();
_bis_SR_register (LPM0_bits|GIE);
sprintf (addr、"%s\r\n、RXData);
if (addr="y")
{
P1OUT=0x02;
}
}
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
clk_setp ();
UART_CONFIG();
while (1)
{
UART_Receive ();
}
返回0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// UART.H ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
#include
volatile int rx_index=0;
volatile unsigned int rx_key=0;
volatile int Tx_index=0;
volatile unsigned int Tx_key=0;
int size=0;
unsigned char TXData[15]="";
unsigned char RXData[5]="";
#pragma vector = EUSCI_A0_Vector
_interrupt void USCI_A0_ISR (void)
{
switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:中断;
USCI_UART_UCRXIFG 案例:
RX_KEY = 0;
RXData[RX_index]=UCA0RXBUF;
if (((RXData[RX_index]='\x0d'/*'\r'*/)||(RXData[RX_index]='\n')||(RXData[RX_index]=='\r'))
{
_BIC_SR_REGISTER_ON_EXIT (CPUOFF|GIE);
UCA0IE &=~UCRXIE;
RX_index=0;
RX_KEY = 0;
中断;
}
RX_index++;
中断;
USCI_UART_UCTXIFG 案例:
if (Tx_key=1)
{
if (Tx_index>size)
{
_BIC_SR_REGISTER_ON_EXIT (CPUOFF|GIE);
UCA0IE &=~UCTXIE;
UCA0IE &=~UCTXCPTIE;
TX_KEY = 0;
中断;
}
UCA0TXBUF = TXData[Tx_index];
TX_index++;
TX_KEY = 0;
}
中断;
案例 USCI_UART_UCSTTIFG:中断;
USCI_UART_UCTXCPTIFG 案例:
TX_KEY = 1;
UCA0IFG|=UCTXIFG;
中断;
默认值:break;
}
}