512|0

6943

帖子

19

资源

纯净的硅(中级)

msp430f5529捕获加串口源码 [复制链接]


           
  1. #include "msp430f5529.h"

  2.        
  3.  

  4.        
  5. #define uint unsigned int

  6.        
  7. #define uchar unsigned char

  8.        
  9.  

  10.        
  11. uint flag,TA_cent,PerVal;

  12.        
  13. unsigned long int val,cha;

  14.        
  15. int m[5];

  16.        
  17. void Delay10ms(unsigned int c)   //误差 0us

  18.        
  19. {

  20.        
  21.     unsigned char a, b;

  22.        
  23.  

  24.        
  25.         //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//

  26.        
  27.     for (;c>0;c--)

  28.        
  29.         {

  30.        
  31.                 for (b=38;b>0;b--)

  32.        
  33.                 {

  34.        
  35.                         for (a=130;a>0;a--);

  36.        
  37.                 }          

  38.        
  39.         }       

  40.        
  41. }

  42.        
  43. void USCI_A0_Init()                   //USCI_A0的初始化

  44.        
  45. {

  46.        
  47.         P3SEL |= BIT3+BIT4;               // P3.3和P3.4选择UART通信功能

  48.        
  49.         UCA0CTL1 |= UCSWRST;              // 复位寄存器设置

  50.        
  51.         UCA0CTL0 = 0x00;

  52.        
  53.         UCA0CTL1 |= UCSSEL_1; // 波特率发生器参考时钟设置为ACLK,ACLK=32768Hz

  54.        
  55.         UCA0BR0 = 0x03;                   // 波特率设置为9600bps

  56.        
  57.         UCA0BR1 = 0x00;

  58.        
  59.         UCA0MCTL |= UCBRS_3 + UCBRF_0;    // 调制器设置

  60.        
  61.         UCA0CTL1 &= ~UCSWRST;             // 完成USCI_A0初始化设置

  62.        
  63. }

  64.        
  65. void fasongzifu (char Cha)        //单个字符发送函数

  66.        
  67. {

  68.        
  69.  

  70.        
  71.         UCA0TXBUF = Cha;

  72.        
  73.         while (!(UCA0IFG&UCTXIFG));       //等待上一个字节发送完毕

  74.        
  75. }

  76.        
  77.  

  78.        
  79. //void yunsuan()

  80.        
  81. //{

  82.        
  83.   //int m[5];

  84.        
  85.   //m[0]=val%10000/1000;

  86.        
  87.   //m[1]=val%1000/100;

  88.        
  89. // m[2]=val%100/10;

  90.        
  91.   //m[3]=val%10;

  92.        
  93. //m[4]='.';

  94.        
  95. // USCI_A0_Putchar(m[0]+48);

  96.        
  97.   //USCI_A0_Putchar(m[4]);

  98.        
  99.   //USCI_A0_Putchar(m[1]+48);

  100.        
  101.   //USCI_A0_Putchar(m[2]+48);

  102.        
  103.   //USCI_A0_Putchar(m[3]+48);

  104.        
  105. //}

  106.        
  107.  

  108.        
  109. void main( void )

  110.        
  111. {

  112.        
  113.   // Stop watchdog timer to prevent time out reset

  114.        
  115.   WDTCTL = WDTPW + WDTHOLD;

  116.        
  117.  

  118.        
  119.   P1DIR&=~BIT2;  //捕捉P1.2口

  120.        
  121.   P1SEL |= BIT2;

  122.        
  123.   TA0CCTL1 |= CAP + CM_1 + CCIS_0 + SCS + CCIE;//捕获模式,上升和下降都捕获,选择CCI2A,同步,捕获中断开

  124.        
  125.   TA0CTL |= TASSEL_2 + MC_2 + ID_0 + TAIE + TACLR; //SMCLK=1M,连续计数模式 

  126.        
  127.  

  128.        
  129.   USCI_A0_Init();                   //USCI_A0初始化

  130.        
  131.  

  132.        
  133.   _EINT();//中断起始位

  134.        
  135. while(1);

  136.        
  137. }

  138.        
  139.  

  140.        
  141. #pragma vector=TIMER0_A1_VECTOR

  142.        
  143. __interrupt void TIMER0_A1_ISR(void) 

  144.        
  145. {

  146.        
  147.   switch(TA0IV) 

  148.        
  149.   {

  150.        
  151.     case 2:

  152.        
  153.       val = TA0CCR1 - PerVal;

  154.        
  155.       PerVal = TA0CCR1;

  156.        
  157.       flag++;

  158.        
  159.      if(flag >2)

  160.        
  161.      {

  162.        
  163.       flag =0;

  164.        
  165.       val = 1048576 / val; //1048576 :系统稳定后,DCOCLK默认为2.097152MHZ,FLL默认2分频,则MCLK和SMCLK的频率都为1.048576MHZ。(实验三会提到如何计算)

  166.        
  167.       m[0]=val%10000/1000;

  168.        
  169.       m[1]=val%1000/100;

  170.        
  171.       m[2]=val%100/10;

  172.        
  173.       m[3]=val%10;

  174.        
  175.       m[4]=' ';  

  176.        
  177.     fasongzifu(m[0]+48);

  178.        
  179.     fasongzifu(m[1]+48);

  180.        
  181.     fasongzifu(m[2]+48);  

  182.        
  183.     fasongzifu(m[3]+48);

  184.        
  185.     fasongzifu(m[4]);

  186.        
  187.     Delay10ms(10);

  188.        
  189.     

  190.        
  191.      } 

  192.        
  193.      TA1CCTL0 &= ~CCIFG;

  194.        
  195.       break;

  196.        
  197.     case 4:

  198.        
  199.       break;

  200.        
  201.     case 10: 

  202.        
  203.       TA1CCTL0 &= ~CCIFG;

  204.        
  205.       break;

  206.        
  207.   }

  208.        
  209. }



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

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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