MSP430 - G2553之串口操作

2018-07-14来源: eefocus关键字:MSP430  G2553  串口操作



#include

 

void delay1s(void) 

{

  int t = 1000;

  while (t--)

    __delay_cycles(1000);    

}

 

#define UART_TXD 0x02                                  // TXD on P1.1 (Timer0_A.OUT0)

                                              

#define UART_TBIT (1000000 / 9600)                     // 9600 Baud, SMCLK = 1MHz

                                                       // Globals for transmit UART communication

unsigned int txData;                                   // UART internal variable for TX

 

void TimerA_UART_tx(unsigned char byte);               // Function prototypes

void TimerA_UART_print(char *string);

 

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                            // Stop watchdog timer

  DCOCTL = 0x00;                                       // Set DCOCLK to 1MHz

  BCSCTL1 = CALBC1_1MHZ;

  DCOCTL = CALDCO_1MHZ;

 

  P1OUT = UART_TXD;                                    // Initialize P1.1

  P1SEL = UART_TXD;                                    // Timer function for TXD pin

  P1DIR = UART_TXD;                                    // Set TXD pin to output

                                                       // Timer_A for transmit UART operation

  TA0CCTL0 = OUT;                                      // Set TXD Idle as Mark = '1'

  TA0CCTL1 = SCS + CM1 + CAP;                          // Sync, Neg Edge, Capture

  TA0CTL = TASSEL_2 + MC_2;                            // SMCLK, start in continuous mode

 

  P2DIR |= (BIT3 | BIT4); //Set P1.0 and P1.6 to outputs

  

  _BIS_SR(GIE);                                        // Enable CPU interrupts

 

  while (1) {

    TimerA_UART_print("G2553 TimerA UART\r\n");          // Send test message 

    TimerA_UART_print("READY.\r\n");

    P2OUT ^= 0x18;

    delay1s();

  }

}

 

void TimerA_UART_tx(unsigned char byte)              // Outputs one byte using the Timer_A UART

{              

  while (TACCTL0 & CCIE);                              // Ensure last char got TX'd

 

  TA0CCR0 = TAR;                                       // Current state of TA counter

  TA0CCR0 += UART_TBIT;                                // One bit time till first bit

  txData = byte;                                       // Load transmit data, e.g. 'A'=01000001

  txData |= 0x100;                                     // Add mark stop bit, e.g. 101000001

  txData <<= 1;                                        // Add space start bit, e.g. 1010000010

  TA0CCTL0 = OUTMOD0 + CCIE;                           // Set TXD on, enable counter interrupt

}

 

void TimerA_UART_print(char *string) {                 // Prints a string using the Timer_A UART

  while (*string)

    TimerA_UART_tx(*string++);

}

 

#pragma vector = TIMER0_A0_VECTOR                      // Timer_A UART - Transmit ISR

 

__interrupt void Timer_A0_ISR(void) {

  static unsigned char txBitCnt = 10;

  TA0CCR0 += UART_TBIT;                                // Add Offset to CCRx

 

  if (txBitCnt == 0) {                                 // All bits TXed?

    TA0CCTL0 &= ~CCIE;                                 // All bits TXed, disable interrupt

    txBitCnt = 10;                                     // Re-load bit counter

  }

  else {

    if (txData & 0x01)

      TA0CCTL0 &= ~OUTMOD2;                            // TX Mark '1'

    else

      TA0CCTL0 |= OUTMOD2;                             // TX Space '0'

  }

  txData >>= 1;                                        // Shift right 1 bit (low bits TX'ed first)

  txBitCnt--;

}


关键字:MSP430  G2553  串口操作

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/2018/ic-news071440284.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430G2553 输出ACLK和SMCLK
下一篇:MSP430按键控制串口发送数据

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Nokia LCD 5110 移植(基于MSP430F5529)

头文件nokia_5110.h#ifndef __nokia_5110_h_#define __nokia_5110_h_#include <msp430.h>#define LCD_5110_DIR            P3DIR#define LCD_5110_OUT        P3OUT#define   LCD_RST    2#define   LCD_CE    3#define   
发表于 2019-05-11

SPWM波在单片机上的实现与调节(基于MSP430F5529)

);extern void SPWM_2Way_Init(void);extern void SPWM_2Way_Set_Freq(unsigned int freq);#endif /* PWM_H_ */头文件include.h/* * include.h * *  Created on: 2016-8-18 *      Author: Flyskyr */#include <msp430.h>#include"PWM.h"unsigned int spwm_i,spwm_j;unsigned int
发表于 2019-05-11

按键的长按与短按(基于MSP430F5529)

长按与短按的区别只是加上一个适当的延时然后再去判断引脚状态。定义:#define KEYDIR P2DIR#define KEYIN P2IN#define KEYIFG P2IFG#define KEYIE P2IE#define KEYIES P2IES#define KEYREN P2REN#define S1 BIT0extern unsigned char key_key;在中断中处理长按与短按:#pragma vector=PORT2_VECTOR  //声明中断向量地址__interrupt void GPIOIntHandler(void){unsigned int IntState,vextend,cv
发表于 2019-05-11

关于MSP430的ADC中断相关问题

在进行MSP430ADC相关代码操作的时候,遇到一个百思不得其解的问题,我们按照要求设置好ADC通道,ADC中断,程序始终无法进入到ADC中断中去,本人一次又一次确认通道选择是否出错,中断是否设置,但是依然无法进入中断,经过试验和搜索,终于找到了问题所在。MSP430的ADC12IE寄存器虽然是用来使能各个ADC中断的,但是在单通道转换模式下,无论你使用的是哪个ADC通道,ADC12IE对应的中断只能是0x01,对应的中断标志位为ADC12IFG0,并且只能在ADC12MEM0中读取ADC的值。下面给出一个单通道转换的实例:#include "msp430x54x.h"unsigned int adc;void
发表于 2019-05-07

基于MSP430内部10位ADC的模数转化并通过串口发送

//******************************************************************************//  MSP-FET430P140 Demo - ADC12, Using the Internal Reference////  Description: //////                MSP430F149//             ---------------// 
发表于 2019-05-07

msp430学习笔记之定时器A

下一事件发生的时间在当前中断程序中加到CCRx中,如图4,下次发生中断的时间等于在CCR0a发生中断时刻,CCR0 = CCR0a + Δt图 4 连续计数模式下中断与CCRx关系4 增减计数模式(产生两个中断标志)当计数器计数到跟TACCR0一样的之后,然后从TACCR0开始又减少,直到为零,然后又开始增。当计数跟TACCR0一样的时候产生一个中断标志CCIFG,当减到为零的时候又产生一个中断标志TAIFG。如图:图 5 增减计数模式时序图相关寄存器这里就不一一介绍了,可以翻阅数据手册2 代码实现//本平台 msp430f149#include <msp430f149.h> volatile unsigned
发表于 2019-05-07
msp430学习笔记之定时器A

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved