#include "msp430x54x.h"
void main(void)
{ WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P5SEL |=BIT6+BIT7; //USCI_A1 TXD/RXD
P5DIR |=BIT5+BIT6;
P5OUT &=~BIT5;
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL_1; // CLK = ACLK
UCA1BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCA1BR1 = 0x00; //
UCA1MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE+UCTXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3, interrupts enabled
__no_operation(); // For debugger
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
UCA1TXBUF = UCA1RXBUF; // TX -> RXed character
P5OUT |=BIT5;
while (!(UCA1IFG&UCTXIFG));
P5OUT &=~BIT5;
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
这是用TI的一个例程改的程序,只是将232改为485而已,但MCU总是停在低功耗状态无法进入中断或者停在红 {MOD}语句处,一步一步调试时只能进行一次中断,但串口助手无数据显示,已经检查过引脚,没有问题的,不知道哪里出错了,请高手指教
此帖出自
小平头技术问答
单片机能够发送数据吗?PC机能够接收到吗?如果能够那么说明硬件没有问题。
如果不能,那么是没有数据发送出来,还是有数据发送出来PC没有接收到呢?
建议楼主先用示波器确认一下数据的时序信号。
这句话有矛盾啊,如果停留在红 {MOD}语句处说明退出低功耗模式进入中断响应了。建议检查你外部电路,另外是不是存在电平的问题,430是3.3V的,PC端是5V的
有的时候会停留在低功耗状态,有的时候又停在红 {MOD}语句处,我专门写了一个MCU给PC发送数据的程序,试了一下,没问题。又写了一个PC给MCU发送数据的程序,但这次不行,也就是说MCU能发不能收
PS:PC给MCU发送数据
基本设置同上面
while(1)
{ r[n]=UCA1RXBUF;
n++;
if(n>=100)
{n=0;}
}
接收区显示乱码,而且接收的数量要比发送的数量多很多,这是怎么回事呀?
换成
while(1)
{while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
UCA1TXBUF = UCA1RXBUF; // TX -> RXed character
P5OUT |=BIT5;
while (!(UCA1IFG&UCTXIFG));
P5OUT &=~BIT5;
}
接收区无显示,接收数量远远超过发送数量,而且停止发送和断开程序后,接收数量仍在增加
[ 本帖最后由 zzbaizhi 于 2012-3-9 09:03 编辑 ]一周热门 更多>