?? main.c
字號(hào):
#include "msp430x22x4.h"
//此程序是USCI_A0工作在異uart模式下,采用1200波特率進(jìn)行全雙功通訊
//如果只有一塊實(shí)驗(yàn)板,可以置位USLISTEN來(lái)自發(fā)自收
// MSP430F2274 MSP430F2274
// (1) (2)
// ----------------- -----------------
// /|\| XIN|- -|XIN |/|\
// | | | | | |
// --|RST XOUT|- -|XOUT RST|--
// | | | |
// | P1.0|-->LED LED<--| |
// | p3.4UCA0TXD|------------------->|p3.5UCA0RXD |
// | p3.5UCA0RXD|------------------->|p3.4UCA0TXD |
// | DVSS|--------------------|DVSS |
__no_init char send_data[256] @ 0x0400; //數(shù)據(jù)存儲(chǔ)首地址為0x0400
int main( void )
{
WDTCTL =WDTPW+WDTHOLD; //關(guān)看門(mén)狗
BCSCTL1 =CALBC1_1MHZ; //設(shè)定DCO為1MHZ
DCOCTL =CALBC1_1MHZ;
volatile unsigned int n;
do //等待晶振穩(wěn)定
{
IFG1 &=~OFIFG;
for(n=5000;n>0;n--);
} while(OFIFG&IFG1);
P1DIR |=BIT0; //點(diǎn)亮LED
P1OUT |=BIT0;
P3SEL |=BIT4+BIT5; //p3.4為T(mén)X,P3.5為RX
P3DIR |=BIT4; //P3.4為輸出方向
//UCA0STAT |=UCLISTEN; //調(diào)試時(shí)用于自發(fā)自收
UCA0CTL1 |=UCSSEL0; //時(shí)鐘源選擇32768晶振
UCA0BR1=0; //設(shè)置波特率32768/1200=27.3
UCA0BR0=27;
UCA0MCTL |=UCBRS1; //UCBRSx=INT(0.3*8)=2
UCA0CTL1 &=~UCSWRST; //退出USCI設(shè)置
IE2 |=UCA0RXIE+UCA0TXIE; //使能收發(fā)中斷
_BIS_SR(LPM3_bits+GIE); //進(jìn)入低功耗3并使能總中斷
_NOP();
return 0;
}
#pragma vector =USCIAB0RX_VECTOR
__interrupt void rx_isr(void)
{
static char i=0;
P1OUT ^=BIT0; //如果作為接收方,每收一幀LED翻轉(zhuǎn)一次
send_data[i]=UCA0RXBUF; //將收到的數(shù)據(jù)放入0x0400開(kāi)始的RAM地址
if(i==255) //比較是否已經(jīng)收到了256個(gè)數(shù)據(jù)
{
i=0; //接收了256個(gè)后,再?gòu)?x0400開(kāi)始放數(shù)據(jù)
}
else
{
i++;
}
}
#pragma vector =USCIAB0TX_VECTOR
__interrupt void tx_isr(void)
{
static char j=0;
P1OUT ^=BIT0; //如果作為接收方,每收一幀LED翻轉(zhuǎn)一次
unsigned int x;
for(x=0;x<15000;x--); //在發(fā)送前一段延時(shí),確保對(duì)方已經(jīng)處理完上一幀數(shù)據(jù)
UCA0TXBUF=j; //將待發(fā)數(shù)據(jù)放入發(fā)送緩存寄存器中
j++;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -