📄 main.c
字号:
#include "msp430x22x4.h"
//此程序是USCI_A0工作在异uart模式下,采用1200波特率进行全双功通讯
//如果只有一块实验板,可以置位USLISTEN来自发自收
// 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; //数据存储首地址为0x0400
int main( void )
{
WDTCTL =WDTPW+WDTHOLD; //关看门狗
BCSCTL1 =CALBC1_1MHZ; //设定DCO为1MHZ
DCOCTL =CALBC1_1MHZ;
volatile unsigned int n;
do //等待晶振稳定
{
IFG1 &=~OFIFG;
for(n=5000;n>0;n--);
} while(OFIFG&IFG1);
P1DIR |=BIT0; //点亮LED
P1OUT |=BIT0;
P3SEL |=BIT4+BIT5; //p3.4为TX,P3.5为RX
P3DIR |=BIT4; //P3.4为输出方向
//UCA0STAT |=UCLISTEN; //调试时用于自发自收
UCA0CTL1 |=UCSSEL0; //时钟源选择32768晶振
UCA0BR1=0; //设置波特率32768/1200=27.3
UCA0BR0=27;
UCA0MCTL |=UCBRS1; //UCBRSx=INT(0.3*8)=2
UCA0CTL1 &=~UCSWRST; //退出USCI设置
IE2 |=UCA0RXIE+UCA0TXIE; //使能收发中断
_BIS_SR(LPM3_bits+GIE); //进入低功耗3并使能总中断
_NOP();
return 0;
}
#pragma vector =USCIAB0RX_VECTOR
__interrupt void rx_isr(void)
{
static char i=0;
P1OUT ^=BIT0; //如果作为接收方,每收一帧LED翻转一次
send_data[i]=UCA0RXBUF; //将收到的数据放入0x0400开始的RAM地址
if(i==255) //比较是否已经收到了256个数据
{
i=0; //接收了256个后,再从0x0400开始放数据
}
else
{
i++;
}
}
#pragma vector =USCIAB0TX_VECTOR
__interrupt void tx_isr(void)
{
static char j=0;
P1OUT ^=BIT0; //如果作为接收方,每收一帧LED翻转一次
unsigned int x;
for(x=0;x<15000;x--); //在发送前一段延时,确保对方已经处理完上一帧数据
UCA0TXBUF=j; //将待发数据放入发送缓存寄存器中
j++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -