搜索
bottom↓
回复: 2

MSP430F449寄存器UMCTL0是干嘛用的?

[复制链接]

出0入0汤圆

发表于 2014-12-4 18:27:23 | 显示全部楼层 |阅读模式
如图!在串口初始化程序里面用到了,但查了不少资料都没有详细的介绍。
注释掉了也不影响串口的使用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-12-5 09:56:47 | 显示全部楼层
本帖最后由 c316348771 于 2014-12-5 09:57 编辑

昨晚自己看资料,这个寄存器是波特率调整用的,在文档中表示为:UxMCTL,但计算公式看得有点懵!求高手指点,附上PDF文件,在第509页

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-12-8 11:18:41 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<math.h>

  3. //函数声明
  4. void SetBaudRateRegisters(long clk,int baud);

  5. /************************宏定义***********************/
  6. #define UxBR1    a[0]
  7. #define    UxBR0    a[1]
  8. #define    UxMCTL    a[2]

  9. unsigned char a[3];                     //数组模拟寄存器
  10. void main()
  11. {
  12.     long clk;                           //时钟
  13.     long baud;                           //波特率
  14.     printf("\t---波特率计算软件!---\n");
  15.     printf("\n请输入时钟频率(Hz):");
  16.     scanf("%ld",&clk);                    
  17.     printf("\n请输入波特率:");
  18.     scanf("%ld",&baud);
  19.     getchar();                          //读取多余回车符

  20.     SetBaudRateRegisters(clk,baud);     //设置寄存器值

  21.     //显示寄存器值
  22.     printf("\nUxBR1:0x%x\tUxBR0:0x%x\tUxMCTL:0x%x\n",UxBR1,UxBR0,UxMCTL);
  23.    
  24.     getchar();
  25. }

  26. /****************************************************************************
  27. * 名    称:SetBaudRateRegisters
  28. * 功    能:根据时钟 波特率设置对应寄存器
  29. * 入口参数:
  30. *           clk:        所选时钟频率(如:32768)
  31.             baud        波特率      (300~115200)
  32. * 出口参数:无
  33. * 范    例: SetBaudRateRegisters(32768,9600) //用时钟频率32768产生9600的波特率
  34. ****************************************************************************/
  35. void SetBaudRateRegisters(long clk,long baud)
  36. {
  37.     int n = clk / baud;     //整数波特率
  38.     char mSum = 0;            //Σmi
  39.     int txEr0;              //对应位为0时错误率
  40.     int txEr1;              //对应位为1时错误率
  41.     char i = 0;             //循环计数

  42.     UxBR1 = n >> 8;         //高8位
  43.     UxBR0 = n & 0xff;       //低8位
  44.     UxMCTL = 0;
  45.    
  46.     //循环 比较错误率大小 设置UxMCTL
  47.     for(;i < 8;i++)
  48.     {
  49.         txEr0 = 100 * baud * ((i + 1) * n + mSum) / clk - 100 * (i + 1);
  50.         txEr1 = 100 * baud * ((i + 1) * n + mSum + 1) / clk - 100 * (i + 1);
  51.         if(abs(txEr1) < abs(txEr0))
  52.         {
  53.             mSum++;
  54.             UxMCTL |= (1<<i);
  55.         }
  56.     }
  57. }
复制代码


问题已解决!附上代码,亲测可用
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 09:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表