mgfhappy 发表于 2009-6-6 15:32:00

我用的是ATMEGA 32单片机, 4M 晶振,T1工作在输入捕获模式,下降沿解发,,全部源代码如下:
//ICC-AVR application builder : 2007-10-22 20:27:27
// Target : M32
// Crystal: 4.0000Mhz
/*数据头的时间:   Th=9+4.5=13.5ms
数据“0”的时间:T0=0.565+0.56=1.125ms
数据“1”的时间:T1=1.685+0.56=2.245ms
*/
#include <iom32v.h>
#include <macros.h>
#defineuint    unsigned int
#defineuchar   unsigned char
unsigned int value=0,oldFall=0,temp=0,newFall=0,shuu=0;
unsigned int data1,data0,bitcnt;
unsigned char jia=0,JS_OK=0;
unsigned int shuju={0},pj=0;
void port_init(void)
{
PORTA = 0x00;
DDRA= 0x00;
PORTB = 0x00;
DDRB= 0x00;
PORTC = 0x00;
DDRC= 0x00;
PORTD = 0x40;
DDRD= 0x00;
}

/*//TIMER1 initialize - prescale:1
// desired value: 1mSec
// actual value:1.000mSec (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xF0; //setup
TCNT1L = 0x60;
OCR1AH = 0x0F;
OCR1AL = 0xA0;
OCR1BH = 0x0F;
OCR1BL = 0xA0;
ICR1H= 0x0F;
ICR1L= 0xA0;
TCCR1A = 0x00;
TCCR1B = 0x01; //start Timer
}*/
//TIMER1 initialize - prescale:1
// desired value: 1uSec
// actual value:1.000uSec (0.0%)


//TIMER1 initialize - prescale:1
// desired value: 1uSec
// actual value:1.000uSec (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFF; //setup
TCNT1L = 0xFC;
OCR1AH = 0x00;
OCR1AL = 0x04;
OCR1BH = 0x00;
OCR1BL = 0x04;
ICR1H= 0x00;
ICR1L= 0x04;
TCCR1A = 0x00;
TCCR1B = 0x01; //start Timer
}
#pragma interrupt_handler timer1_capt_isr:7
void timer1_capt_isr(void)
{
      uchar i;
          
      newFall=ICR1;
      temp=newFall-oldFall; //计算脉冲加间隔的时间
      oldFall=newFall;
          
          
       if(temp>1024 && temp<1225) // "0"信号
                  {
                  temp=0;
                  }
      else if(temp>2145 && temp<2345) //“1”信号
                  {
                  temp=1;
                  }
      else if(temp>13400 && temp<13600) //header信号
                  {
                  bitcnt=0;
                  data0=0;
                  data1=0;
                  return; //返回,等待下次开始接收
                  }
      else ///干扰信号
                  {
                          return;
                  }
      
      bitcnt++;
      if(bitcnt<16) //开始接收前16位
         {
                  data0=data0|(uint)temp;
                  data0=data0<<1;
         }
      else if(bitcnt==16)
                  {
                  data0=data0|(uint)temp;
                  }
      else if(bitcnt<32) //开始接收后16位
                  {
                  data1=data1|(uint)temp;
                  data1=data1<<1;
                  }
      else if(bitcnt==32) //接收完最后一位
                  {
                  data1=data1|(uint)temp;
               
                  bitcnt=0;
                  data0=0;
                  data1=0;
               
               JS_OK=1;
                  
                  
                  }
      
}


//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer1_init();

MCUCR = 0x00;
GICR= 0x00;
TIMSK = 0x20; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}



//
void main(void)
{
unsigned char i;
init_devices();
DDRC|=0x80;
PORTC|=0x80; // 一开如测试小灯不亮


while(1)
{
   if(JS_OK==1) //接收完32们数据后,灯亮
      PORTC&=~0x80;
   NOP();
}
}

mgfhappy 发表于 2009-6-6 15:38:19

根本就不能捕获到13.5ms的引导码,32位数据就更不用说了!当点一下,摇控器按钮时,读出temp约为9000 ,应该是9 ms 的低电平,可是我明明设置的是下降沿触发,为什么不能捕获到13.5ms的引导码呢;如果长按按键再松开,temp 值为 4500左右,真是奇了怪了,问题很多啊,希望各位高手赐教!

chinamanzhong 发表于 2009-6-7 10:20:45

mark 以前想搞,但没有搞到,现在记号下,然后回再学习!

mysky 发表于 2009-6-7 11:00:00

mark

kulouman 发表于 2009-6-9 00:07:45

好东西,正在学,mark

lucsunny 发表于 2009-6-18 11:06:40

恩 很好。 这个6121编码是PWM。 有没有PPM的。PPM的解码比这个复杂啊,搞半天没搞出来。

slowhand 发表于 2009-7-7 09:11:27

做个记号

yangyi 发表于 2009-7-7 20:07:27

曾经的梦想。

z7926573 发表于 2009-7-8 09:05:41

mark

sange 发表于 2009-7-10 11:18:01

先记号一下,回头再看看你的和我的有什么区别。

flyerhacker 发表于 2009-7-10 12:40:23

mark

firs_avr 发表于 2009-7-12 09:39:20

谢谢楼主

krdzw 发表于 2009-7-12 11:30:42

mark

dongzhiqing 发表于 2009-7-27 17:42:20

hao

fy024 发表于 2009-7-27 20:33:04

mark

hzxiaobao 发表于 2009-7-28 20:00:51

谢谢!已实现红外解码

lcqqtw 发表于 2009-8-23 16:07:41

强!

D.lovers 发表于 2009-8-23 21:06:53

跟贴学习!顶

sanfeng82 发表于 2009-12-7 13:10:57

先MRAK慢慢看

bluelool 发表于 2009-12-9 18:42:16

mark以后有机会学习学习

hasia 发表于 2009-12-10 12:11:32

谢谢

kuzhuu 发表于 2010-1-14 13:00:50

最近再搞!强贴!

bluelool 发表于 2010-1-14 19:26:02

mark

zhames 发表于 2010-1-14 22:49:22

mark

sw821025 发表于 2010-1-15 17:34:22

签收

damoplus 发表于 2010-1-15 17:45:36

领了,谢谢

radiofcx 发表于 2010-1-22 15:03:02

这种方法通用性不好,占用资源太多,很多地方不适用,

whatdiy 发表于 2010-1-23 20:20:37

囧,刚刚发现了一个可以GPS定位手机位置的网站,真不可思议!可以去看看
http://hd.qu365.com/?P346086

chenhuanbang 发表于 2010-8-19 17:53:18

mark

lantian0099 发表于 2010-8-19 18:11:22

学习ing。。。

sstarren 发表于 2010-8-19 21:17:58

记号

longsky1985 发表于 2010-8-22 11:24:43

MARK

charlie2008 发表于 2010-8-22 12:16:54

mark!

feixue2588 发表于 2010-8-22 15:52:33

mark

hclcwx 发表于 2010-8-22 16:56:11

ding

KevinLee 发表于 2010-8-22 17:36:41

mark

wt19891211 发表于 2010-8-30 16:00:33

学习·

hpdell 发表于 2010-9-1 11:49:47

我用这个解码程序来改成icp3的,但是不成功!不知道是何故,数据加到“else if(bitcnt==16) ”这里,就不再执行了????????????

chenfzg 发表于 2010-9-4 16:30:46

好~~~~

autumn_summit 发表于 2010-9-15 16:21:40

先说声谢了!!!

fshunj 发表于 2010-9-15 18:16:57

顶一下

xtaens 发表于 2010-9-29 20:21:20

mark

James_King 发表于 2010-10-8 16:34:48

MARK

qdsywh 发表于 2010-10-8 20:19:21

mark

jack_yu 发表于 2010-10-8 22:01:37

mark!!

harveychan 发表于 2010-11-13 13:04:02

谢谢楼主

HXHNTTXLLA 发表于 2011-3-24 16:23:40

真的太感谢您啦程序可以   谢谢!!!

GZLJZ 发表于 2011-3-24 16:31:40

标志位检测,好

clf4118 发表于 2011-3-24 16:37:30

mark

lixupeng 发表于 2011-3-24 18:36:16

学习!!!!!

sherlockljt 发表于 2011-4-22 21:53:59

mark

sherlockljt 发表于 2011-4-23 01:30:43

mark

lexuezhitu 发表于 2011-8-26 20:10:50

mark

ninglu 发表于 2011-8-26 20:17:16

学习

lanjingjing 发表于 2011-8-26 21:16:19

mark!

wwnj 发表于 2011-9-2 10:44:17

MARK

bancal 发表于 2011-9-27 13:51:37

学习了

lingchen888 发表于 2011-11-1 16:35:56

mark,正准备做这方面的,谢谢!

xrwf_2009 发表于 2011-11-11 11:28:03

帮顶

heihai001 发表于 2011-12-10 21:30:07

回复【楼主位】lonelynw 阿水
-----------------------------------------------------------------------

好贴,对我有很大的帮助啊。谢谢了!

wb156351 发表于 2011-12-27 16:23:20

mark

taocongrong 发表于 2011-12-29 15:17:29

好东西

hgy_tom 发表于 2012-6-28 23:10:53

学习了,哈哈

hugh512 发表于 2012-7-3 11:36:23

请问楼主:
数字机顶盒上的红外遥控器初始使用的时候,和电视的红外是不相匹配的.
需要将和电视匹配的遥控器进行匹配,然后就可以使用.
请问这个机顶盒遥控器和电视机遥控器匹配的过程也是个解码的过程?能详细描述下吗?

llh1234 发表于 2012-7-5 22:03:59

{:smile:}
mark

fangfei036 发表于 2012-7-6 08:48:04

啊莫终于恢复正常了!!等了n久

一地夏天 发表于 2012-7-18 09:24:21

继续为大家贡献资料哦

muniao 发表于 2012-7-31 00:31:47

Mark有空试试
页: 1 [2]
查看完整版本: 红外遥控的输入捕捉实现~~~~搞一个周刚成功!发个给同我一样的初学者