打印
[技术问题解答]

定时器和AD 问题

[复制链接]
1370|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小帅哥哥|  楼主 | 2015-7-24 20:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小帅哥哥 于 2015-7-26 10:30 编辑

我用定时器输出比较,做了一个5s的延时。想让AD延迟5秒转换,5秒的时候,我关闭了定时器,可是AD转换不了啊,我把定时器打开,AD转换又能用了  这是为什么啊 #include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define ATD_CLOCK 2000000
#define BUS_CLOCK 8000000
#define OSC_CLOCK 16000000
#define baud 9600

#define led1 PORTAB_PB0
#define led2 PORTB_PB1
#define led1_dir DDRAB
#define led2_dir DDRB
#define on 0

unsigned int num = 0;
unsigned char  AD0_DATA,AD1_DATA;


void gpio_init(void)
{
        PORTB = 0XFF;
        led1_dir = 0xff;
        led2_dir = 0xff;
}

void ECT_INIT(void)
{
        TIOS_IOS0 = 1;        //定时器0用作输出比较
        TSCR1_TEN = 1;        //定时器使能
        TSCR1_TFFCA = 1;        //快速清除标志位
        TCTL2 = 0X00;        //定时器与输出引脚断开
        TIE = 1;        //开定时器0中断
     T标志寄存器1 = 0XFF;
        T标志寄存器2 = 0XFF;        //清除中断标志
        TSCR2 = 0X03;


}


void SCI_INIT(void)
{
        SCI0BD = BUS_CLOCK/16/baud;
        SCI0CR1 = 0X00;
        SCI0CR2 = 0X08;        //串口使能,发送使能
}


void AD_INIT(void)
{
        ATD0CTL1_SRES = 0 ;        //8位精度选择
        ATD0CTL2 = 0X42;        //启动AD 快速清除,转换完成中断
        ATD0CTL3 = 0X90;        //每次转换两个通道,右对齐模式
        ATD0CTL4 = BUS_CLOCK / ATD_CLOCK / 2 - 1;        //AD时钟频率2M
}

void AD_START(void)
{
    ATD0CTL5 = 0X30;          //转换AD00和AD01   单次转换 转换完成,产生中断
}

void sci_send(void)
{
    while(!SCI0SR1_TC);
        SCI0DRL = AD0_DATA;
}



#pragma CODE_SEG __NEAR_SEG NON_BANKED

interrupt void ECT_interrupt(void)
{
        num++;
        TC0 = TCNT + 1000;        //周期1ms
}


interrupt void AD_interrupt(void)
{
        AD0_DATA = ATD0DR0L;                  //"L"表示第八位,,不表示左右对其  “H”表示高八位,
        AD1_DATA = ATD0DR1L;
        sci_send();
}

#pragma CODE_SEG DEFAULT

void main(void) {
  /* put your own code here */
        SCI_INIT();
        ECT_INIT();
        AD_INIT();                                                                                                                                                                     
        gpio_init();
       
        EnableInterrupts;


  for(;;) {
  if(num ==5000)
  {
        TSCR1_TEN = 0;        //延时五秒,关闭定时器
    AD_START();                //开始AD采集     这里关了定时器之后,AD采集不了,开了定时器又可以采集
    led1 = on;
        led2 = on;
  }


//   _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}


相关帖子

沙发
lovecat2015| | 2015-7-25 16:33 | 只看该作者
能把你的AD初始化的程序贴出来吗?

使用特权

评论回复
板凳
cowboy2014| | 2015-7-25 16:59 | 只看该作者
你这是在例程上面修改的吧,好好看下程序是如何设置的吧

使用特权

评论回复
地板
小帅哥哥|  楼主 | 2015-7-26 10:31 | 只看该作者
lovecat2015 发表于 2015-7-25 16:33
能把你的AD初始化的程序贴出来吗?

贴了,帮我看看

使用特权

评论回复
5
小帅哥哥|  楼主 | 2015-7-26 10:32 | 只看该作者
cowboy2014 发表于 2015-7-25 16:59
你这是在例程上面修改的吧,好好看下程序是如何设置的吧

我自己重新写的,你帮我看看

使用特权

评论回复
6
Luis德华| | 2015-7-27 08:26 | 只看该作者
关闭定时器那是不是把所有的中断都给关了?

使用特权

评论回复
7
史迪威将军| | 2015-7-27 09:16 | 只看该作者
是不是把总中断给管了呢

使用特权

评论回复
8
FSL_TICS_ZJJ| | 2015-7-27 09:31 | 只看该作者

如果你关闭定时器,那么你下面的灯能点亮吗?
还是ADC启动单次转换就没有转换?
你这边的ADC转换应该是软件触发的吧?
如果不加定时器,直接单次转换是否能够转换?

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2015-7-27 10:38 | 只看该作者
楼主,你现在用的芯片全称是什么?

使用特权

评论回复
10
小帅哥哥|  楼主 | 2015-7-27 12:53 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-27 09:31
如果你关闭定时器,那么你下面的灯能点亮吗?
还是ADC启动单次转换就没有转换?
你这边的ADC转换应该是软 ...

下面的灯能点亮,不加定时器,单次转换时可以的,就是关了定时器之后,不能转换,但是下面的灯是可以点亮的

使用特权

评论回复
11
小帅哥哥|  楼主 | 2015-7-27 12:54 | 只看该作者
史迪威将军 发表于 2015-7-27 09:16
是不是把总中断给管了呢

没有啊 我只是关定时器啊,对位操作的啊 只是改了定时器使能位啊

使用特权

评论回复
12
小帅哥哥|  楼主 | 2015-7-27 12:54 | 只看该作者
Luis德华 发表于 2015-7-27 08:26
关闭定时器那是不是把所有的中断都给关了?

没有啊,我对位操作的啊 我只是把定时器使能位给关了

使用特权

评论回复
13
FSL_TICS_ZJJ| | 2015-7-27 12:59 | 只看该作者
小帅哥哥 发表于 2015-7-27 12:53
下面的灯能点亮,不加定时器,单次转换时可以的,就是关了定时器之后,不能转换,但是下面的灯是可以点亮 ...

那你debug,单步看看,是不是AD中断没进去?
你debug看下,关闭定时器,和不关闭定时器,对AD的寄存器影响是什么?
看看是不是全局中断被关掉了。

使用特权

评论回复
14
eyesee2008| | 2015-7-27 15:34 | 只看该作者
配置那里估计没配置好

使用特权

评论回复
15
qinweixing| | 2015-7-27 15:43 | 只看该作者
debug

使用特权

评论回复
16
小狗爱吃骨头| | 2015-7-27 17:49 | 只看该作者
楼主标黄的部分是开关中断吗

使用特权

评论回复
17
Luis德华| | 2015-7-30 08:03 | 只看该作者
小帅哥哥 发表于 2015-7-27 12:54
没有啊,我对位操作的啊 我只是把定时器使能位给关了

那楼主您单步调试一下,看看问题出现在什么地方

使用特权

评论回复
18
史迪威将军| | 2015-7-30 08:08 | 只看该作者
小帅哥哥 发表于 2015-7-27 12:54
没有啊 我只是关定时器啊,对位操作的啊 只是改了定时器使能位啊

这个就有点麻烦了,按理说这两个互相不影响啊
楼主看看这两个在寄存器上有没有冲突

使用特权

评论回复
19
小帅哥哥|  楼主 | 2015-8-6 09:39 | 只看该作者
小狗爱吃骨头 发表于 2015-7-27 17:49
楼主标黄的部分是开关中断吗

标黄的部分是开关定时器 不是开关中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

71

帖子

0

粉丝