学习msp430g2553遇到的问题
最近在学msp430g2553的串口通信,找了个程序是发什么就接收什么的。然后我想改成发送一个字符接受另一个字符却怎么也实现不了,哪位大神能帮忙改一下#include"m...
最近在学msp430g2553的串口通信,找了个程序是发什么就接收什么的。然后我想改成发送一个字符接受另一个字符却怎么也实现不了,哪位大神能帮忙改一下
#include "msp430g2553.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
UCA0CTL1 |= UCSWRST; // USCI_A0 进入软件复位状态
UCA0CTL1 |= UCSSEL_2; //时钟源选择 SMCLK
BCSCTL1 = CALBC1_1MHZ; //设置 DCO 频率为 1MHz
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1DIR |= BIT0;
UCA0BR0 = 0x68; //时钟源 1MHz 时波特率为9600
UCA0BR1 = 0x00; //时钟源 1MHz 时波特率为9600
UCA0MCTL = UCBRS0; //小数分频器
UCA0CTL1 &= ~UCSWRST; //初始化 USCI_A0 状态机
IE2 |= UCA0RXIE; //使能 USCI_A0 接收中断
_EINT(); //开总中断
while(1)
{
}
}
#pragma vector = USCIAB0RX_VECTOR //接收中断
__interrupt void USCI0RX_ISR(void)
{
while ( !(IFG2&UCA0TXIFG) ); //确保发送缓冲区准备好
P1OUT ^= BIT0; //接收指示灯状态改变
UCA0TXBUF = UCA0RXBUF; //发送接收到的数据
} 展开
#include "msp430g2553.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
UCA0CTL1 |= UCSWRST; // USCI_A0 进入软件复位状态
UCA0CTL1 |= UCSSEL_2; //时钟源选择 SMCLK
BCSCTL1 = CALBC1_1MHZ; //设置 DCO 频率为 1MHz
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1DIR |= BIT0;
UCA0BR0 = 0x68; //时钟源 1MHz 时波特率为9600
UCA0BR1 = 0x00; //时钟源 1MHz 时波特率为9600
UCA0MCTL = UCBRS0; //小数分频器
UCA0CTL1 &= ~UCSWRST; //初始化 USCI_A0 状态机
IE2 |= UCA0RXIE; //使能 USCI_A0 接收中断
_EINT(); //开总中断
while(1)
{
}
}
#pragma vector = USCIAB0RX_VECTOR //接收中断
__interrupt void USCI0RX_ISR(void)
{
while ( !(IFG2&UCA0TXIFG) ); //确保发送缓冲区准备好
P1OUT ^= BIT0; //接收指示灯状态改变
UCA0TXBUF = UCA0RXBUF; //发送接收到的数据
} 展开
1个回答
展开全部
#include "msp430g2553.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1DIR |= 0x01;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
// Enter LPM0, interrupts enabled
__bis_SR_register(GIE); // Enter LPM0, interrupts enabled
while(1)
{
}
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{ //接收中断
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF=UCA0RXBUF;
}
是CCS的吧,这是我做的,可以的
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1DIR |= 0x01;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
// Enter LPM0, interrupts enabled
__bis_SR_register(GIE); // Enter LPM0, interrupts enabled
while(1)
{
}
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{ //接收中断
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF=UCA0RXBUF;
}
是CCS的吧,这是我做的,可以的
追问
这个我有,我要的是,我发一个指令,收到的是类似于另一个adc采集的数据的程序
追答
就是说 你要的是发一个指令 然后灯亮吗
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询