// MSP430F149(发送) MSP430F149
// ----------------- -----------------
// | |- /|| |
// | | | | |
// | |- --| |
// | | /| | |
// | |--- | |
// | | | |
// | | | |
// | | | |
// | | | |
// | | | |
// | UTXD/P3.6|--------->|P3.7 |
// | | 9600 8N1 | |
// | |<---------| |
发送端的程序
/*****************************************************
程序功能:MCU每50ms向接收端发送一个字符(从0到255递增)
------------------------------------------------------
通信格式:N.8.1, 9600
------------------------------------------------------
******************************************************/
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned int message=0;
void Delays(void);
void PutString(uchar *ptr);
///////////////////////////////////////////
void initsys(void)
{
BCSCTL1 &= ~XT2OFF;
uchar i;
do
{
IFG1 &= ~OFIFG;
for(i=0xee;i>0;i--)
{
;
}
}
while((IFG1&OFIFG)!=0);
BCSCTL2 |= SELM_2 + SELS;
}
void set()
{
U1CTL |= SWRST; //开启设置
U1TCTL = SSEL1; //选择 SMCLK=8M 波特率=9600
/* 8M / 9600 = 833 833 = 0x0341 0.000 * 8= 0*/
U1BR0 = 0x41;
U1BR1 = 0x03;
U1MCTL =0x00; //00000000
U1CTL |= CHAR; //长度8位
U1CTL &= ~SWRST;
}
/********************主函数**********************/
void main(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
initsys();
P3DIR |= BIT6;
P3SEL |= 0x30 + BIT6 + BIT7;
set();
ME2 |= UTXE1 ; //+ URXE0
//IE1 |= URXIE0;
//启用定时器A的增计数模式,实现每50ms发送一个字符的数据
TACTL = TASSEL0 + TACLR;
CCTL0 = CCIE;
CCR0 = 32768/20;
P2DIR |= 0x02;
TACTL |= MC0;
_EINT();
//////////////////////////////////////////////////////
for(;;){
_BIS_SR(CPUOFF);
_NOP();
}
}
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
P2OUT ^= 0x02;
while (!(IFG2 & UTXIFG1));
TXBUF1 = message++;
}
接收端的程序
/******************************************************
程序功能:接收来自发送端的字符,然后用8个LED灯显示出来
8个LED从高到低,组成8位二进制数.
如果你P2.0到P2.7未接LED灯,就测量它们的高低电平吧
-------------------------------------------------------
通信格式:N.8.1, 9600
无校验,8个数据位,1个停止位,波特率9600
*******************************************************/
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
/********************主函数********************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P2DIR = 0xff;
P2OUT = 0x00;
P3SEL |= 0x30 + BIT6 + BIT7 ;
ME2 |= UTXE1 + URXE1;
U1CTL |= CHAR;
U1TCTL |= SSEL0;
U1BR0 = 0x03;
U1BR1 = 0x00;
U1MCTL = 0x4A;
U1CTL &= ~SWRST;
IE2 |= URXIE1;
_EINT();
while(1);
}
/*******************************************
函数名称:UART1_RXISR
功 能:UART1的接收中断服务函数
参 数:无
返回值 :无
********************************************/
#pragma vector = UART1RX_VECTOR
__interrupt void UART1_RXISR(void)
{
P2OUT = RXBUF1;
}