当前位置: 代码迷 >> 单片机 >> 关于C8051F020 红外信号发射~该怎么处理
  详细解决方案

关于C8051F020 红外信号发射~该怎么处理

热度:218   发布时间:2016-04-28 16:30:44.0
关于C8051F020 红外信号发射~
是22.1184MHZ的晶振,不能发射信号。求高人指点。。。

C/C++ code
    #include <C8051F020.H>    #include "string.h"    #include "INTRINS.H"        #define uint unsigned int    #define uchar unsigned char        uchar flag,count,GW,DW;        sbit P3_5 = P3^5;        void delay(uint n)    {        uint i;        while(n--)        {            for(i = 0;i < 100;i++)            {                ;            }        }    }        void fs()    {        uchar n,i,temp;        count = 0;        n = 16;        flag = 1;        do{}while(count < n); //9ms        count = 0;        n = 8;        flag = 1;        do{}while(count < n); //4.5ms                temp = GW;        for(i = 0;i < 8;i++)        {            n = 1;            count = 0;            flag = 1;            do{}while(count < n);                        if(temp-(temp/2)*2)            {                n = 3;            }            else            {                n = 1;                }                    count = 0;            flag = 0;            do{}while(count < n);        }                temp = ~GW;        for(i = 0;i < 8;i++)        {            n = 1;            count = 0;            flag = 1;            do{}while(count < n);                        if(temp-(temp/2)*2)            {                n = 3;            }            else            {                n = 1;                }                    count = 0;            flag = 0;            do{}while(count < n);        }                temp = DW;        for(i = 0;i < 8;i++)        {            n = 1;            count = 0;            flag = 1;            do{}while(count < n);                        if(temp-(temp/2)*2)            {                n = 3;            }            else            {                n = 1;                }                    count = 0;            flag = 0;            do{}while(count < n);        }                temp = ~DW;        for(i = 0;i < 8;i++)        {            n = 1;            count = 0;            flag = 1;            do{}while(count < n);                        if(temp-(temp/2)*2)            {                n = 3;            }            else            {                n = 1;                }                    count = 0;            flag = 0;            do{}while(count < n);        }                n = 1;        count = 0;        flag = 1;        do{}while(count < n);        flag = 0;                }        void main()    {        //OSCICN = 0x08;          WDTCN = 0xde;          WDTCN = 0xad;        EA = 1;        TMOD = 0x01;        TH0 = 0xFF;        TL0 = 0x98;        ET0 = 1;        TR0 = 1;        flag = 0;            while(1)        {            GW = 0x40;            DW = 0x05;            delay(1);            P4 = 0x00;            fs();            P4 = 0xff;            delay(2000);         }    }        void time0() interrupt 1    {        TH0 = 0xFF;        TL0 = 0x98;        count++;        if(flag == 1)        {            P3_5 = ~P3_5;        }        else P3_5 = 0;    }        


------解决方案--------------------
1. 红外信号有频段范围,请计算分频设置是否正确。
2. 用示波器测量输出端信号波形,如果没有任何信号输出,请检查硬件电路是否短路接地。
3. 如果输出波形频率异常,则检查代码对发射信号的配置是否正确。
------解决方案--------------------
探讨

1. 红外信号有频段范围,请计算分频设置是否正确。
2. 用示波器测量输出端信号波形,如果没有任何信号输出,请检查硬件电路是否短路接地。
3. 如果输出波形频率异常,则检查代码对发射信号的配置是否正确。