本文引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013784.HTM

MSP430F149有两个USART通讯端口,其性能完全一样,每个通讯口可通过RS232和RS485等芯片转换,与之相应的串行接口电路通讯。MSP430F149支持串行异步和同步通讯,每种方式都具有独立的帧格式和独立的控制寄存器。

                           
 USART异步通信

MSP430串行异步通信模式通过两个引脚:接收引脚URXD和发送引脚UTXD与外界相连。异步帧格式由一个起始位,7或8个数据位,校验位(奇/偶/无),1个地址位,和1或2个停止位。从最低位开始发送和接收。异步模式下,传送数据以字符为单位。
 
在异步模式下,USART支持两种多机模式,即线路空闲和地址位多机模式。
(1)线路空闲多机模式:
 
在这种模式下,数据块被空闲时间分隔。在字符的第一个停止位之后,收到10个以上的1则标识检测到接收线路空闲,如果采用两位停止位,则第二个停止位被认为是空闲周期的第一个标志。空闲周期后的第一个字符是地址字符。当接收到的字符是地址字符时,RXWAKE置位,并送入接收缓存。
(2)地址位多机模式
 
 
在这种模式下,字符包含一个附加的位作为地址标志。数据块的第ige字符带有一个置位的地址位,用以表明该字符是一个地址。
 
波特率的产生:
    在异步串行通信中,波特率是哼重要的指标,定义为每秒钟传送二进制数码的位数。波特率反映了异步串行通信的速度。波特率部分由时钟输入选择和分频,波特率发生器,调整器和波特率寄存器等组成。
下面是波特率发生器的框图:
 
分频因子N由送到分频计数器的时钟(BRCLK)频率和所需的波特率来决定:
  N=BRCLK/波特率
分频因子定义如下:
 N=UBR+(M7+M6+M5+M4+M3+M2+M1+M0)/8
 
中断:
USART模块有接收和发送两个独立的中断源。使用两个独立的中断向量,一个用于接收中断时间,一个用于发送中断事件。USART模块的中断控制位在特殊的功能寄存器中。
 USART0
 特殊功能寄存器 接收中断控制位  发送中断控制位 
 IFG1 接收中断标志URXIFG0  发送中断标志 UTXIFG0
 IE1 接收中断使能URXIE0  发送中断使能UTXIE0 
 ME1 接收允许URXE0  发送允许UTXE0 

MSP430F149有USART0和USART1两个通信硬件模块,因此有两套寄存器。

 
一次正确的USART模块初始化应该是这样的顺序:
(1)先在控制位SWRST=1(默认)的情况下设置串口
(2)然后设置SWRST=0;
 (3)最后如果需要中断,则设置相应的中断使能
 
例程:MCU不停向PC发送数据,在屏幕上显示0-127对应的ASCII字符。数据格式无奇偶校验,8位数据位,1个停止位,波特率115200.
 
#include "io430.h"
#define uchar unsigned char
#define uint unsigned int
void InitSys()
{
   uint iq0;
 
//使用XT2振荡器
   BCSCTL1&=~XT2OFF;      //打开XT2振荡器
   do
   {
  IFG1 &= ~OFIFG; // 清除振荡器失效标志
  for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
  }
  while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
 
  BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2,四分频
 
}
void delay(void);
void PutString(uchar *ptr);
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  InitSys();
  uchar value=0;
  //以下是串口设置
  P3SEL|=0XC0;                 //P3.6,7选为USART0收发端
  P3DIR|=0x40;                 //P3.6为输出
  ME2|=UTXE1+URXE1;           // 使能USART0的接收和发送
  UCTL1|=CHAR;                //8-bit
  UTCTL1|=SSEL1;              //UCLK=SMCLK
  UBR01=0x45;                 //设置波特率32/2400=13.65
  UBR11=0x00;
  UMCTL1=0x049;
  UCTL1&=~SWRST;              //初始USART0状态机
  
  while(1)
  {
   while(!(IFG2&UTXIFG1));     //USART1发送缓冲器是否准备好
   TXBUF1=value++;
   value&=0x7f;                //保证value的数值小于128
   while(!(IFG2&UTXIFG1));
   TXBUF1='\n';                //发送换行符
   delay();
   }
}
 
void PutString(uchar *ptr)           //向PC机发送字符串
{
 while(*ptr !='\0' )                  //不为字符串结束符
 {
  while(!(IFG2&UTXIFG1));
  TXBUF1=*ptr++;                     //发送数据
 }
}
 
 
void delay(void)
{
  uchar i=20;
  uint j;
  while(i--)
  {
   j=2000;
   while(j--);
  }
 
 
i
例2:PC机想MSP430发送一个数据,+1在发回PC机
 
#include "io430.h"
#define uint unsigned int
void delay();
void InitSys()
{
   uint iq0;
 
//使用XT2振荡器
   BCSCTL1&=~XT2OFF;      //打开XT2振荡器
   do
   {
  IFG1 &= ~OFIFG; // 清除振荡器失效标志
  for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
  }
  while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
  BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT
}
 
void main( void )
 
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  InitSys();
 
 //串口设置
  P3SEL|=BIT6+BIT7;      //P3.6,7=USART0 TXD,RXD
  P3DIR|=BIT6;
  ME2 |=URXE1+UTXE1; // 使能发送和接收
  UCTL1|=CHAR;       //8位
  U1TCTL=SSEL1;      //UCLK=SMCLK
  U1BR0 = 0x45;                             // 波特率115200
  U1BR1 = 0x00;                             //
  UMCTL1 = 0x49;                            // Modulation
  UCTL1&=~SWRST;     //usart模块初始化 
  IE2 |=URXIE1;      //社能接收中断
  for(;;)
 {   
   __bis_SR_register(LPM0_bits+GIE);
   while(!(IFG2&UTXIFG1));           //USART1发送缓冲器是否准备好
   TXBUF1=RXBUF1+1;                 //发送数据
   delay();  
 }
}
 
#pragma vector=UART1RX_VECTOR
__interrupt void usart0_rx(void)
{
 LPM0_EXIT;
}
 
void delay(void)
{
 unsigned i=50000;
 while(i!=0)
 {i--;}
}

msp430学习笔记-USART的更多相关文章

  1. msp430学习笔记-msp430g2553

    C语言例程:http://wenku.baidu.com/link?url=49JzNSvt3m0fRuf8SWTEM8yEw1yzqr4lBR-QbX8FddcmjTVYnDhuR97wB60HNf ...

  2. STM32学习笔记——USART串口

    转载自:http://www.cnblogs.com/microxiami/p/3752715.html 一.USART简介 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异 ...

  3. MSP430学习笔记:UART

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

  4. STM32学习笔记——USART串口(向原子哥和火哥学习)

    一.USART简介 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的波特率选择. S ...

  5. STM32F103X datasheet学习笔记---USART

    1.前言 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择. 它支持同步 ...

  6. msp430学习笔记-实现开方log等计算及FFT算法(待续)

    MSP430 FFT算法实现 http://bbs.21ic.com/icview-391532-1-1.html http://blog.sina.com.cn/s/blog_6cd2030b010 ...

  7. msp430学习笔记-ADC12

    本文引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013748.HTM MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,它具有高速度,通用性等特 ...

  8. msp430学习笔记-时钟及延时函数

    引用:http://blog.chinaunix.net/uid-24343357-id-3271380.html MCLK默认时钟源是DCOCLK,SMCLK默认时钟源也是DCOCLK,DCOCLK ...

  9. msp430学习笔记-IO及低功耗

    引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013511.HTM MSP430F149有6个8位的IO口,其中P1,P2口占两个中断向量,共可以接16个中断源.还 ...

随机推荐

  1. 2017-2018-2 20165228 实验二《Java面向对象程序设计》实验报告

    2017-2018-2 20165228 实验二<Java面向对象程序设计>实验报告 相关知识点 三种代码 伪代码:注释,与具体编程语言无关 产品代码:由伪代码翻译而来的具体编程语言语法相 ...

  2. MySQL的查询语句

    一.基本查询语句 1.1从单个表中查询列 语法:select 查询的列1,查询的列2  from 表名  where 条件 group by 分组条件  order by 排序条件  having  ...

  3. HanLP 配置与使用

    https://github.com/hankcs/HanLP 下载 hanlp-1.6.0.jar和 hanlp.properties 放在主目录下 修改 hanlp.properties 参考官网 ...

  4. 九度OJ1111题-单词替换

    题目1111:单词替换 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6752 解决:1891 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组 ...

  5. cetos7最小化安装设置网络启动和更新yum源

    1. 使用静态 IP 地址配置网络 你第一件要做的事情就是为你的 CentOS 服务器配置静态 IP 地址.路由以及 DNS.我们会使用 ip 命令代替 ifconfig 命令.当然,ifconfig ...

  6. Unity 3D光源-Spot Light聚光灯用法详解、模拟手电筒、台灯等线性教程

    Unity4大光源之聚光灯 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  7. 【转】【计算机视觉】opencv靶标相机姿态解算2 根据四个特征点估计相机姿态 及 实时位姿估计与三维重建相机姿态

    https://blog.csdn.net/kyjl888/article/details/71305149

  8. ZOJ4060 Flippy Sequence(思维题)

    题目链接:传送门 题目大意: 两个长度为n的二进制串s,t,每次操作可以将s串的一段区间取反.求操作exactly twice后使得s=t的方法数. 思路: 连续的尽可能长的 si ≠ ti 的区间简 ...

  9. HPU组队赛J:Ball King(线段树)

    时间限制 1 Second  内存限制 512 Mb 题目描述 HPU601球王争霸赛即将举行,ACMER纷纷参加. 现在有n个人报名参赛,每个人都有一个实力值 ai,实力值较大者获胜. 为保证比赛公 ...

  10. Linux定时任务计划

    Linux定时任务计划 在使用Linux系统时,我们有时会需要让系统在某个时间去执行特定的任务,这时就需要去了解Linux提供的定时任务功能 种类 Linux的定时任务分为两种:单一型和循环型 单一型 ...