智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2234|回复: 2
打印 上一主题 下一主题

求救!!!!飞思卡尔xs128 关于红外解码

[复制链接]

15

主题

119

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2957
QQ
威望
469
贡献
2294
兑换币
2
注册时间
2010-11-14
在线时间
97 小时
跳转到指定楼层
1#
发表于 2011-8-17 19:28:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求救啊 !!!!!我测试了一下红外解码  就是一般的遥控器那种,,,但是我在线仿真的时候 竟然惊奇的发现  有几个按键 他们的引导码竟然是不一样的  然我很是无语啊。,。。。感觉像是自己哪里做错了  所以希望大家能够帮下忙  或者提示下  计时模块 感觉 会有错误 我在这 谢谢大家了
#include <hidef.h>      
#include "derivative.h"     
#include "main_asm.h"
unsigned char jianma[]={0x07,0x0b,0x0f,0x13,0x17,0x1b,0x1f,0x23,0x27};
unsigned decode[4];
unsigned int initial_time,stop_time,low_time,high_time;
void SET_PLL(void)
{
        CLKSEL=0x00;//Bus Clock=OSCCLK/2=8MHz           
        PLLCTL_PLLON=1; //允许锁相环电路           
        SYNR=0x00|0x02;
        REFDV=0x80|0x01;//以上两步为设置PLLCLK,使PLLCLK=48MHz,
        //POSTDIV=0x00;
        asm NOP;
        asm NOP;
        asm NOP;
        while(0==(CRGFLG&0x08))
                        ;//等待CRGFLG_LOCK=1,即等待锁相环频率稳定。
        CLKSEL=0x80;//Bus Clock=PLLCLK/2=24MHz;      
}   
void Ect_Init()
{
TIOS_IOS0=0;
TCTL4=0x02;
TSCR2=0x06;
TIE=0x01;
TSCR1=0x80;
}
unsigned char Decode_Init()
{
unsigned char i,j=0;
unsigned char temp;
for(i=0;i<4;i++)
{
  for(j=0;j<8;j++)
  {
    temp>>=1;
    initial_time=TCNT;
    while(PTT_PTT0==0);
    stop_time=TCNT;
    low_time=stop_time-initial_time;
    initial_time=TCNT;
    while(PTT_PTT0==1);
    stop_time=TCNT;
    high_time=stop_time-initial_time; //247   630
    if((100<low_time)||(low_time<400))
     return 0;
    if((high_time>140)&&(high_time<350))
     temp=temp&0x7f;
    if((high_time>530)&&(high_time<730))
     temp=temp|0x80;
  }
     decode[i]=temp;
  }
     if(decode[2]==~decode[3])
     return 1;
}
  
  
  void main(void)
{
DDRA=0xff;
DDRT_DDRT0=0;
EnableInterrupts;
SET_PLL();
Ect_Init();
while(1);
}
void interrupt 8 timer0()
{
  unsigned char i;
  DisableInterrupts;
  initial_time=TCNT;
  while(PTT_PTT0==0);
  stop_time=TCNT;
  low_time=stop_time-initial_time;
  initial_time=TCNT;
  while(PTT_PTT0==1);
  stop_time=TCNT;
  high_time=stop_time-initial_time;  //3370           1390
  if(((low_time>2900)&&(low_time<3900))&&((high_time>890)&&(high_time<1890)))
    {
       if(Decode_Init()==1)
        {
           for(i=0;i<9;i++)
            {
             if(decode[4]==jianma[i])
              PORTA=i;
            
            }
        }
        
      
    }  
  TFLG1_C0F=1;
  EnableInterrupts;
   
}

2

主题

18

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1052
威望
558
贡献
214
兑换币
127
注册时间
2012-2-11
在线时间
140 小时
毕业学校
淮阴工学院
2#
发表于 2013-8-28 20:49:43 | 只看该作者
大哥,你这个是怎么计时的呀? 我记得TCNT不能人为清零,和51的不一样,我一直不太清楚,求指导呀
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
38
威望
22
贡献
12
兑换币
12
注册时间
2015-12-17
在线时间
2 小时
毕业学校
吉林大学
3#
发表于 2016-4-27 09:32:16 | 只看该作者
可能没注意itcnt计数器的溢出吧
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 11:11 , Processed in 0.064735 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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