// MSP430F149(發(fā)送) MSP430F149
// ----------------- -----------------
// | |- /|| |
// | | | | |
// | |- --| |
// | | /| | |
// | |--- | |
// | | | |
// | | | |
// | | | |
// | | | |
// | | | |
// | UTXD/P3.6|--------->|P3.7 |
// | | 9600 8N1 | |
// | |<---------| |
發(fā)送端的程序
/*****************************************************
程序功能:MCU每50ms向接收端發(fā)送一個(gè)字符(從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; //開(kāi)啟設(shè)置
U1TCTL = SSEL1; //選擇 SMCLK=8M 波特率=9600
/* 8M / 9600 = 833 833 = 0x0341 0.000 * 8= 0*/
U1BR0 = 0x41;
U1BR1 = 0x03;
U1MCTL =0x00; //00000000
U1CTL |= CHAR; //長(zhǎng)度8位
U1CTL &= ~SWRST;
}
/********************主函數(shù)**********************/
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;
//啟用定時(shí)器A的增計(jì)數(shù)模式,實(shí)現(xiàn)每50ms發(fā)送一個(gè)字符的數(shù)據(jù)
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++;
}
接收端的程序
/******************************************************
程序功能:接收來(lái)自發(fā)送端的字符,然后用8個(gè)LED燈顯示出來(lái)
8個(gè)LED從高到低,組成8位二進(jìn)制數(shù).
如果你P2.0到P2.7未接LED燈,就測(cè)量它們的高低電平吧
-------------------------------------------------------
通信格式:N.8.1, 9600
無(wú)校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位,波特率9600
*******************************************************/
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
/********************主函數(shù)********************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門(mén)狗
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);
}
/*******************************************
函數(shù)名稱(chēng):UART1_RXISR
功 能:UART1的接收中斷服務(wù)函數(shù)
參 數(shù):無(wú)
返回值 :無(wú)
********************************************/
#pragma vector = UART1RX_VECTOR
__interrupt void UART1_RXISR(void)
{
P2OUT = RXBUF1;
}