Proteus仿真图
虚拟串口设置如下:
IAR for 430 程序如下:
#include <msp430x23x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar tmp;
void PutString(uchar *ptr)
{
while(*ptr != '\0')
{
while (!(IFG2 & UCA0TXIFG)); // TX缓存空闲?
UCA0TXBUF = *ptr++; // 发送数据
}
while (!(IFG2 & UCA0TXIFG));
UCA0TXBUF = '\n';
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P3SEL |= 0x30; //p3.4,5 = USART0 TXD/RXD
UCA0CTL1 |=UCSSEL_1; //选择时钟 SSEL0=0x40 ACLK
UCA0BR0 = 0x03;
UCA0BR1 = 0x00;
UCA0MCTL = UCBRS1+UCBRS0; //设置波特率9600
UCA0CTL1 &= ~UCSWRST;//上电默认1复位状态,设置完成后复位清除
IE2 |= UCA0RXIE+ UCA0TXIE ;// 收发使能
PutString("Hello");
while(1)
{
//LPM3;
while(!(IFG2 & UCA0TXIFG));//UCA0TXIFG=0x02 寄存器IFG2 发送寄存器为空
UCA0TXBUF=UCA0RXBUF;//发送
// UCA0TXBUF='1';
}
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void usart0_rx(void)
{
//LPM3_EXIT;//唤醒CPU 串口中断硬件自动清除
//tmp=UCA0TXBUF;
//或者 LPM3_EXIT;
}
======说明======
加上低功耗控制程序,程序编译成功,下载到Proteus后报错。原因不明。
===============================
IAR配置如下: