| 
 
| 红外解码部分用遥控器芯片是TC9012测试过没问题  用以下程序发出的红外信号接收端接收不到  是什么问题啊 typedef unsigned char uchar;
 typedef unsigned int uint;
 uint a=0;
 void produce_strcode();
 void produce_pwm(unsigned char c);
 void IO_Init(void) ;
 uchar val,i;
 #define CPU_F ((double)8000000)
 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/8000000.0))
 #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/8000.0))
 /****************************************************************************/
 // 产生PWM波,发送9ms高电平,4.5ms低电平作为 起始码
 //*****************************************************************************
 void produce_strcode()
 {
 TACTL |=TACLR;  //ACLK,不分频,清TAR
 TACTL |=TASSEL_1;
 CCR0=442;       //PWM周期,13.5ms
 CCTL1=OUTMOD_7;    //模式7 复位/置位
 CCR1=295;        // 先输出一个9ms高电平,4.5ms低电平作为 起始码
 TACTL |= MC_1; //启动定时器A 为增计数模式
 while((TACTL & 0x01) == 0);   //等待溢出标志,进入下一个周期
 TACTL &= ~TAIFG;  //清标志
 }
 /********************************************************************************
 // 产生PWM波8个用户码,8个用户反码,8个的数据码,之后是8个数据码的反码
 //其中以0.56ms高电平,1.125ms周期表示“0”,中以0.56ms高电平,2.25ms周期表示“1”
 //
 ***************************************************************************/
 void produce_pwm(unsigned char c)
 {
 TACTL |=TACLR;  //ACLK,不分频,清TAR
 TACTL |=TASSEL_1;
 CCTL1=OUTMOD_7;    //模式7 复位/置位
 TACTL |= MC_1; //启动定时器A 为增计数模式
 for (i=0;i<8;i++)   //发送8位数据码
 {
 if (c&0x01)
 val=1;
 else val=0;
 while((TACTL & 0x01) == 0);   //等待溢出标志,进入下一个周期
 if (val)
 { CCR0=74;       //PWM周期,2.25ms
 CCR1=18;  }        //0.56ms的高电平 占空比1/4 “1”的编码
 else
 { CCR0=37;       //PWM周期,1.125ms
 CCR1=18;  } //0.56ms的高电平 占空比 1/2 “0”的编码
 c>>=1;
 TACTL &= ~TAIFG;  //清中断标志
 }
 
 for (i=0;i<8;i++)   //发送8位数据反码
 {
 if (c&0x01)   //检测第i位数据反码
 val=0;
 else val=1;
 while((TACTL & 0x01) == 0);   //等待溢出标志,进入下一个周期
 if (val)
 { CCR0=74;       //PWM周期,2.25ms
 CCR1=18;  }        //0.56ms的高电平 占空比1/4 “1”的编码
 else
 { CCR0=37;       //PWM周期,1.125ms
 CCR1=18;  }        //0.56ms的高电平 占空比 1/2 “0”的编码
 c>>=1;
 TACTL &= ~TAIFG;  //清中断标志
 }
 }
 
 //****************************************************************************
 //PWM 初始化IO   P1高四位按键中断响应
 void IO_Init(void)
 {
 
 P1DIR |= 0x04;
 P1SEL |= 0x04;             //P1.2输出PWM,TA1
 
 }
 //***********************************************************************
 //主函数系统时钟初始,PWM的IO口初始化,
 //*****************************************************************************
 void main(void)
 { WDTCTL=WDTPW+WDTHOLD;                    //关看门狗
 DCOCTL=CALDCO_8MHZ;
 BCSCTL1=CALBC1_8MHZ;
 
 IO_Init();//PWM波的IO口初始
 
 while(1)
 {
 produce_strcode();     // 发送pwm波,
 
 produce_pwm(a);
 
 produce_pwm(0x18);
 while((TACTL & 0x01)==0);
 TACTL= TACLR;     //数据码发送完,关timer_A
 P1OUT|=BIT2;
 delay_ms(30000);
 }
 }
 | 
 |