注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
敏而好学的菜鸟的个人空间 https://home.eeworld.com.cn/space-uid-542667.html [收藏] [复制] [分享] [RSS]
日志

定时器模块底层控制原理三态门求高手

已有 381 次阅读2014-4-19 17:48

  1. #include "msp430x14x.h"
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  5.                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  6. uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  7. uchar n=0,i=0;
  8. void main( void )
  9. {
  10.   uint a;
  11.   // Stop watchdog timer to prevent time out reset
  12.   WDTCTL = WDTPW + WDTHOLD;

  13.   //IE1|=WDTIE;
  14.   //WDTCTL=WDT_ADLY_1_9;
  15.   P4DIR=0xff;
  16.   P6DIR|=0x18;
  17.   P4OUT=0x00;

  18. /*
  19.   BCSCTL1&=~XT2OFF;    //设置XT2CLK有效
  20.   do
  21.   {
  22.     IFG1&=~OFIFG;       //清除失效标志
  23.     for(a=0xff;a>0;a--);//稳定时间
  24.   }
  25.   while((IFG1&OFIFG)!=0); //如果失效标志仍存在则继续循环清除 */
  26.   BCSCTL2|=SELS;   // 选择XT2CLK为SMCLK的时钟源
  27.   
  28.   
  29.   CCTL0=CCIE;   //CCR0中断允许
  30.   CCR0=20000;
  31.   TACTL=TASSEL_2+TACLR+MC_1;//定时器A时钟源为SMCLK,计数器清零,增计数模式
  32.   _EINT();
  33. }
  34. #pragma vector=TIMERA0_VECTOR
  35. __interrupt void timer_A(void)
  36. {
  37.   P6OUT=0x08;
  38.   P4OUT=0x00;
  39.   P4OUT=wei[i++];
  40.   P6OUT=0x10;
  41.   P4OUT=num[n++];
  42.   P6OUT=0x00;
  43.   if(i==8)i=0;
  44.   if(n==8)n=0;
  45. }
复制代码




上面的代码运行正常!有疑问的地方是:
比如上面的程序中选择子系统时钟源SMCLK为XT2,使用之前要打开XT2,XT2才进入工作状态
代码如下:
BCSCTL1&=~XT2OFF;    //设置XT2CLK有效
  do
  {
    IFG1&=~OFIFG;       //清除失效标志
    for(a=0xff;a>0;a--);//稳定时间
  }
  while((IFG1&OFIFG)!=0); //如果失效标志仍存在则继续循环清除 */

我在程序中屏蔽掉了这一段;但是程序依旧如开始一样运行良好
也就是说没打开XT2 ,子系统时钟会默认选择DCO 800KHZ 运行程序
按照这个时钟源频率 数码管刷新现象会变得很明显(即目视能看清数码管是一个一个动态刷新的,已验证),
可是数码管的刷新还是和原来没屏蔽这段的现象一样,如果屏蔽下面的一句代码
  BCSCTL2|=SELS;   // 选择XT2CLK为SMCLK的时钟源
就会出现目视能看清数码管是一个一个动态刷新的现象

查了下资料 为了方便下面是时钟模块的截图
C:\Documents and Settings\Administrator\桌面
即控制XT2是否输出的是一个三态门 只有在三态门的使能端EN = 1(相当于XT2OFF = 0) 时输出才随输入变化,
即当XT2OFF = 1时(相当于EN = 0)为第三种状态高阻态(既不是高电平也不是低电平)
可是上面的程序中明明屏蔽掉了打开XT2部分的代码,只是SMCLK选择了XT2做为时钟源 可是实验测试证明SMCLK工作的时钟源
不是默认的时钟源DCO而是XT2。
这是为什么呢???

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章