在线情况
楼主
  • 头像
  • 级别
    • 积分7
    • 经验1030
    • 文章36
    • 注册2009-09-13
    关于指令和晶振的关系
    最近做msp430F123的slope比较器的实验,利用阻容充电的方式,比较器一端接固定电压,一端接阻容振荡电路,程序如下:
    void ReadAI(void)
    {
     
      CACTL1 = CAON;                 //使能比较器
      CACTL2 = P2CA0+P2CA1+CAF;      //接通CA0,CA1,输出滤波器,CAOUT
     
      CAPD = 0x1C;
      P2DIR = 0x04;            //P2.0,1 output
      P1OUT|=BIT0;
      t=0;  
      while(!(CAOUT & CACTL2) & t<65535)
      {
        t++;
      }

      P1OUT=0;
     for(i=65535;i>0;i--);
      CACTL1 = 0x00;               //Disable Comp_A
    }
    原理是:P1OUT|=BIT0时充电开始,当达到比较器另一端的固定电压,CAOUT输出,t++停止。
    但是有一件事很迷惑,就是刚开始使用的ACLK(Xin和Xout接)32768Hz的晶振,测得t得5000多,但是晶振换为3M后测得的t的值也是5000多,按道理说t值应该大很多才是啊。。。请问这是什么原因,还是我哪里出错了,希望大家指点。
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    当T++时是CPU在执行一个加法动作,首先要知道这个加法指令所占用多少个MCLK时钟。那么这个MCLK则时钟寄存器选择。
    使用不同MCLK时钟源的前提就是选择MCLK是否正确。在充电时间不变的情况下只有时钟源不同,才会影响到CPU执行加法的次数。
    此帖受到1次评价, 累计:积分-2
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
      • 积分7
      • 经验1030
      • 文章36
      • 注册2009-09-13
      谢谢DC的回答,你的意思是说T++只与MCLK时钟有关吗?我是不是该把MCLK的时钟源选为3M的时候为SELM的值=2,32768的时候为SELM的值=3,这样就可以了吗?
      微控网感谢您的参与
      在线情况
      4
      • 头像
      • 级别
        • 积分7
        • 经验1030
        • 文章36
        • 注册2009-09-13
        DC同志,我在程序里把BSCTL2寄存器里的SELM的值=3了,也就是MCLK选择了低速晶体振荡器,但是这个t的值还是没怎么变化啊。。。这是什么原因呢?帮帮忙了,很困惑。
        微控网感谢您的参与
        在线情况
        5
        • 头像
        • 级别
          • 积分7
          • 经验1030
          • 文章36
          • 注册2009-09-13
          [QUOTE][B]下面引用由[U]DC[/U]发表的内容:[/B]

          当T++时是CPU在执行一个加法动作,首先要知道这个加法指令所占用多少个MCLK时钟。那么这个MCLK则时钟寄存器选择。
          使用不同MCLK时钟源的前提就是选择MCLK是否正确。在充电时间不变的情况下...[/QUOTE]
          DC收到请回话!
          微控网感谢您的参与
          Powered by LeadBBS 9.2 .
          Page created in 0.8281 seconds with 5 queries.