注册 登录
查看: 341|回复: 9

【求助】【编码器】输出全是0

[复制链接]
发表于 2014-5-24 18:13:18 | 显示全部楼层 |阅读模式
void main()
{
uint16 count1,count2;

printf("\n*****TPM 脉冲计数 测试*****\n");

tpm_pulse_init(TPM1,TPM_CLKIN0,TPM_PS_1);
tpm_pulse_init(TPM2,TPM_CLKIN1,TPM_PS_1);

while(1)
{
      int i; i++;
     tpm_pulse_clean(TPM2); tpm_pulse_clean(TPM1);
           if(i>=1000)
          {              count1 = tpm_pulse_get(TPM1);
                         count2 = tpm_pulse_get(TPM2);
                                   printf("LPTMR脉冲计数为:%d %d\n", count1, count2);
                          i=0;
           }
}
}
这样输出正常
但是放进中断就不行了
不出数,hex显示时是这样的:0000000000000000000000000000000000000000000000

回复

使用道具 举报

发表于 2014-5-24 18:44:51 | 显示全部楼层
放中断里,你是怎么写的?你检测一下函数调用顺序对不对
回复 支持 反对

使用道具 举报

发表于 2014-5-24 22:51:09 | 显示全部楼层
要是串口1  就是有BUG
回复 支持 反对

使用道具 举报

发表于 2014-5-24 23:17:50 | 显示全部楼层
叫我娄月半子 发表于 2014-5-24 22:51
要是串口1  就是有BUG

如果 printf函数改成uart1,是有bug的,在bug汇总里更新吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-25 20:16:52 | 显示全部楼层
叫我娄月半子 发表于 2014-5-24 22:51
要是串口1  就是有BUG

kl26 bug汇总里木有 uart的bug啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-25 20:28:09 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-24 23:17
如果 printf函数改成uart1,是有bug的,在bug汇总里更新吧

PIT0 延时是做什么用的啊山外哥?我把这段代码注释掉后还是1秒一秒的出数据
//pit_delay_ms(PIT0,10);

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-25 20:39:35 | 显示全部楼层
叫我娄月半子 发表于 2014-5-24 22:51
要是串口1  就是有BUG

改了pll的bug,,,,,,,还是00000000000000000000000000000的出
回复 支持 反对

使用道具 举报

发表于 2014-5-25 22:02:33 | 显示全部楼层
kongqijin 发表于 2014-5-25 20:39
改了pll的bug,,,,,,,还是00000000000000000000000000000的出

你用的是UART1还是UART0?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-25 22:14:50 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-24 23:17
如果 printf函数改成uart1,是有bug的,在bug汇总里更新吧

应该是uart1,但是编码器输出是0,
用了PIT0延时后,电机就不反应了。

回复 支持 反对

使用道具 举报

发表于 2014-5-26 16:53:02 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-24 18:44
放中断里,你是怎么写的?你检测一下函数调用顺序对不对

void PIT_IRQHandler()     ///1毫秒定时
{
    flag++;
   
   count   =  tpm_pulse_get(TPM2);
   tpm_pulse_clean(TPM2);                                  //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)
   
   if(flag==10)
  {
    flag=0;
    if(PIT_TFLG(PIT0) == 1 )        //判断是否 PIT0 进入中断
    {
        tsl1401_time_isr();
        get_blackline();
     
    }
  }
  
     PIT_Flag_Clear(PIT0);
}
我是这么写的,然后在液晶上显示,但是总是显示为0,这是哪里的问题呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

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