msp430f5529串口程序程序uart

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*****用串口助手 发什么 回复什么****/



#include "msp430f5529.h"
// ACLK = REFO = 32768Hz, MCLK = SMCLK = default DCO/2 = 1048576Hz
// P3.4,5——USCI_A0 TXD/RXD;P9.4,5——USCI_A2 TXD/RXD;P10.4,5——USCI_A3 TXD/RXD;
unsigned int table[12]={1,2,3,4,5,6,7,8,9,10,11,12};
unsigned int j;
void Delay(unsigned int time)
{
unsigned int i,k;
for(i=0;i<255;i++)
for(k=0;k_NOP();
}

void send_buf(unsigned char *ptr)
{
while(*ptr !='\0') //C语言里字符串末尾自动加“\0”(ASCII码值为0)
{
while (!(UCA1IFG&UCTXIFG));
UCA1TXBUF=*ptr; //发送字符对应的ASCII码,12864指针可设置自动指向下一个显示地址
*ptr++;
Delay(50);
}
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR|=BIT0;
P1OUT|=BIT0;
P2IE |= BIT1; //设置p2.1可以中断
P2IES |= BIT1; //设置p2.1为下降沿中断
P2IFG &= ~BIT1;//设置p2.1为0 无中断请求
P2REN |= BIT1; //设置p2.1为上下拉电阻使能
P2OUT |= BIT1;
P4SEL |=BIT4+BIT5 ; // P5.6,7 = USCI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL_2; // SMCLK
UCA1BR0 = 9; // 1MHz 115200 (see User's Guide)
UCA1BR1 = 0; // 1MHz 115200
UCA1MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
}
// Echo back RXed character, confirm TX buffer is ready first,发送数据之前确定发送缓存准备好
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready? UCTXIFG(USCI Transmit Interrupt Flag)
switch(UCA1RXBUF)
{
case 0x00:{P1OUT^=BIT0;
UCA1TXBUF=UCA1RXBUF;}
break;

case 0x01:{UCA1TXBUF=table[j];
j++;
if(j==12) j=0;}

break;
} // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
// UCTXIFG=0x02,UCA1IFG&UCTXIFG,当UCA1IFG的UCTXIFG位为1时,说明UCA1TXBUF为空,
//跳出while循环循环;当UCTXIFG位为0时UCA1TXBUF不为空,停在循环。

#pragma vector=PORT2_VECTOR
__interrupt void Key_interrput()
{
if(P2IFG&BIT1)
{
Delay(50);
if(P2IFG&BIT1)

{
while((P2IN&BIT1)==0);//松手检测
P2IFG &= ~BIT1; //清除中断标志位
send_buf("2015年电子设计大赛\r\n");
}
}

}

相关文档
最新文档