1688|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

MSP430按键控制串口发送数据 [复制链接]

#include
//MSP430G2553  - 使用USCI_A0,Up Mode, DCO SMCLK
//
//  介绍: 该程序利用USCI_A0来与计算机通信 通过接在P1.3口的按键来实现按一次发送一个数据
//  波特率9600,数据格式8N1
//
//  ACLK = 32768, SMCLK = 32768  MCLK =  DCO-16M
//
//               MSP430G2553
//            -----------------
//        /|\|              XIN|-
//         | |                 |
//         --|RST          XOUT|-
//           |                 |
//           |         P1.0/TA1|-->led
//
//  使用 MSP430 LaunchPad , MSP430G2553芯片
//CCS5.2编译通过,P1.3内部上拉一定要开启,不然会没反应
//******************************************************************************

void CLK_Init(void);
void USCIA0_Init(void);
void GPIO_Init(void);
void putchar(unsigned char tx_data);
void putstr(char *s);


unsigned char RX_DATA;
char *string1="Hello430!";
char string2[]="iamzhanhaibo!\n";    //\n是换行符


void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;        // Stop WDT
    CLK_Init();
    GPIO_Init();
    USCIA0_Init();
    //_EINT();//开总中断
    __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=PORT1_VECTOR
__interrupt void P1_3ISR(void)
{
    P1IFG &= ~BIT3;//中断标志位清零
    P1OUT ^= BIT6;//P1.6状态翻转
    IE2 &= ~UCA0RXIE;   //发送时先关闭接收中断,不接收
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready? 等待TX buffer为空
    UCA0TXBUF = 0x08;                    // TX -> RXed character  发送字符c
    IE2 |= UCA0RXIE;    //发送完了打开接收中断
}

/*#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready? 等待TX buffer为空
    UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character  发送接收到的数据
    RX_DATA=UCA0RXBUF;
    if(RX_DATA&0x01){
        P1OUT |= BIT0;
        putstr(string1);
        putstr(string2);
    }
    else
        P1OUT &= ~BIT0;
}*/

void putchar(unsigned char tx_data)    //发送字符函数
{
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready? 等待TX buffer为空
    UCA0TXBUF = tx_data;                    // TX -> RXed character  发送字符c
}

void putstr(char *s)   //发送字符串函数
{
    IE2 &= ~UCA0RXIE;   //发送时先关闭接收中断,不接收
    //如果没有发完,就继续循环发送
    while((*s)!='\0'){
        putchar(*s);
        s++;
    }
    IE2 |= UCA0RXIE;    //发送完了打开接收中断
}

void GPIO_Init(void)
{
    P1DIR = BIT0 + BIT6;    //p1.0,p1.6外接LED为输出状态
    P1OUT &= ~(BIT0 + BIT6);

    P1SEL  = BIT1 + BIT2 ;           // P1.1 = RXD, P1.2=TXD
    P1SEL2 = BIT1 + BIT2;             //第二外围模式选择

    P1REN |= BIT3; //pull up
    P1OUT |= BIT3;
    P1IE  |= BIT3;       //P1.3中断使能
    P1IES |= BIT3;       //P1.3下降沿有效
    P1IFG &= ~BIT3;      //P1.3中断标志位清零
}

void CLK_Init(void)
{
    BCSCTL3 |= LFXT1S_0;
    if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF){
        while(1);
    }
    BCSCTL1 = CALBC1_1MHZ;          // Set DCO 为1MHz
    DCOCTL = CALDCO_1MHZ;
}

void USCIA0_Init(void)
{
    UCA0CTL1 |= UCSSEL_1;      //ACLK
    UCA0BR0 = 3;                              // ACLK 32768Hz 9600   32768Hz/9600 = 3.41
    UCA0BR1 = 0;                              // 32768Hz 9600
    UCA0MCTL = UCBRS1 + UCBRS0;               // Modulation UCBRSx = 3  模式控制寄存器
    UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**  初始化释放,可以操作
    IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt  接收中断使能
}


 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表