msp430学习笔记之uart

原创 2015年07月06日 22:06:04

1 相关知识

MSP430系列,usart模块的波特率值设定是通过以下三个参数决定的:UxBR0,UxBR1,UxMCTL
波特率=BRCLK/N 
BRCLK:时钟源,可以通过寄存器设定何为时钟源; 
N:波特率产生的分频因子。N=UxBR1+UxBR0+UxMCTL,其中UxBR1+UxBR0为整数部分,UxMCTL为设定小数部分 。
  举个例子波特率=9600,时钟源=32.768kHz
N=32768/9600=3.41
很明显:UxBR1+UxBR0=13,即UxBR1=0,UxBR0=13。
首先把小数部分0.41×8=3.28,取整后为3。这个5的意思就是在UxMCTL中的8位里要有3个1,剩下来的就是怎么分配这3个1的位置了。注意一点 就是这3个1要相对分散点。
因此:UBR00 = 0x03;UBR10 = 0x00;UMCTL0 = 0x4A; 

2 代码实现

     
//本平台 msp430f149
#include<msp430f149.h>

void usart0_config(void){
	
	P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
	ME1 |= URXE0 + UTXE0;                     // Enable USART0 T/RXD
	UCTL0 |= CHAR;                            // 8-bit character
	UTCTL0 |= SSEL0;                          // UCLK = ACLK
	UBR00 = 0x03;                             // 32k/9600 - 3.41
	UBR10 = 0x00;                             //
	UMCTL0 = 0x4A;                            // Modulation
	UCTL0 &= ~SWRST;                          // Initialize USART state machine
	IE1 |= URXIE0;                            // 使能USART0的接收中断
	_EINT();								  //开总中断,整个系统中断使能
	
}


//字符发送函数
void send_char(char sendchar){
	
	while (!(IFG1 & UTXIFG0));    			//等待发送寄存器为空         
	TXBUF0 = sendchar;
}

//字符串发送函数
void send_string(char *ptr){				
	
	while(*ptr != '\0'){
		send_char(*ptr++);                  // 发送数据
	}
	send_char('\n');						//发送换行指令     
	
}

int main(){
	
	WDTCTL = WDTPW + WDTHOLD;     //默认MCLK = DCO
	usart0_config();
	
	P2DIR = 0x80;
	P2OUT = 0xff;
	while(1){
				
	}
	
	return 0;
}


//usart0 interrupt receive function
#pragma vector=UART0RX_VECTOR

__interrupt void usart0_rx (void)
{	
			
	if( RXBUF0 == 0x00 ){		   //收到0时,led灯亮,并发送 "led is on"
		
		P2OUT = 0x7f; 
		
		send_string("led is on");
	}
	
	if( RXBUF0 == 0x01 ){			//收到1时,led灯亮,并发送 "led is off"
		
		P2OUT = 0xff;
		
		send_string("led is off");
	
	
	}
	
}

 3 实验结果



每次发送0调试助手都可以收到 "led is on"并且led灯亮,发送1时led灯灭,同时调试助手显示"led is off",注意:16进制发送数据
版权声明:本文为博主原创文章,未经博主允许不得转载。

MSP430F5438学习笔记 UART ACLK 9600-8-N-1

1.初始化UART0之前需要先初始化ACLK、SMCLK和MCLK。示例代码中使用XT1,ACLK为32768,SMCLK和MCLK约为8MHZ。 2.UART的时钟可以参考ACLK或者SMCLK,本...

[MSP430] 3.UART

这一节我们将会看到如何在 MSP430 Launchpad 上使 用 UART 进行通信。我们的程序将会实现通过 UART 从 PC 读入一个字节的数据,然后发送相应的反馈字节给 PC。通信 模式为 ...

MSP430F5438学习笔记 UART SMCLK 115200-8-N-1

MSP430中 UCBR0、UCBR1和UCBRF的设置值可以通过计算,也通过通过查表获得。我个人倾向于查表法。具体可以参考以下两张图表。默认情况,ACLK为32768MHZ,而SMCLK为10485...

MSP430F149单片机实现uart数据接收中断

/***************************************************** 程序功能:MCU不停向PC机发送数据,在屏幕上显示0~127对应           ...

msp430f149单片机串口C程序

------------------------------------------------------- 通信格式:N.8.1, 115200 无校验,8个数据位,1个停止位,波特率11520...

MSP430学习笔记:UART

串通可以两种方法其现 一、USART硬件直接实现 二、通过定时器软件实现   该模块可现现: UART异步串行通讯 SPI同步串行通讯 I2C同步串行通讯      UxCTL控制...

MSP430Ware学习笔记 UART SMCLK 115200-8-N-1

1.初始化UART0之前需要先初始化ACLK、SMCLK和MCLK。示例代码中使用XT1,ACLK为32768,SMCLK和MCLK约为8MHZ。 2.UART的时钟可以参考ACLK或者SMCLK,...

MSP430(F5529)学习笔记——UCS配置详解

MSP430(F5529)相比MSP430(F149)来讲,功能更加强大。 UCS简介 MSP430F5XX/MSP430F6XX系列器件的UCS包含有五种时钟源,依次是:XT1CLK、VLOCLK、...
  • girlkoo
  • girlkoo
  • 2013年06月09日 16:43
  • 27157

MSP430F5438学习笔记 TA1溢出中断加比较匹配中断

// 时钟默认情况 // FLL时钟 FLL选择 XT1 // 辅助时钟 ACLK选择 XT1 32768Hz // 主系统时钟 MCLK选择 DCOCLKDI...

MSP430(f149)学习笔记——红外遥控发射

最近由于项目需求,研究了一下MSP430,总体感觉MSP430还是非常不错的单片机,不亏是TI的产品。项目中用MSP430实现了红外遥控功能,下面我们先来分析一下红外的发送原理。 红外发送原理 红外发...
  • girlkoo
  • girlkoo
  • 2013年05月27日 10:46
  • 9037
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:msp430学习笔记之uart
举报原因:
原因补充:

(最多只允许输入30个字)