- #include "stc12c5a60s2.h"
- #include "intrins.h"
- #define IR_CH_ 0x45 //ch-
- #define IR_CH 0x46 //ch
- #define IR_CH_A 0x47 //ch+
- void IR_Receive(unsigned char ir_buf[]);
- sbit IRIN=P3^3; //紅外接收口
- sbit led1=P1^0;//LED指示
- unsigned char IRCOM[4];
- void Delay140us() //@11.0592MHz
- {
- unsigned char i, j;
- _nop_();
- _nop_();
- i = 2;
- j = 125;
- do
- {
- while (--j);
- } while (--i);
- }
- void main()
- {
- IRIN=1;
- EX1 = 1;
- led1 = 1;
- TCON=TCON|0x04; //INT1 FALL INT
- IPH |= (0X01<<2);
- IP |= (0X01<<2);//設置外部中斷1為優先級最高
- EA = 1;
- while(1)
- {
- led1 ^=1;
- if(IRCOM[2]==IR_CH_) led1 = 1;
- if(IRCOM[2]==IR_CH_A) led1 = 0;
- if(IRCOM[2]==IR_CH) led1 ^= 1;//遙控測試
- IRCOM[2] = 0;
- }
- }
- void IR_int(void) interrupt 2
- {
- EA = 0;
- IR_Receive(IRCOM);
- EA = 1;
- }
- void IR_Receive(unsigned char ir_buf[])
- {
- xdata unsigned char time,i,j;
- while(!IRIN)
- {
- time++;
- Delay140us();
- }
- if(time>63)//64*0.14=9ms
- {
- time = 0;
- while(IRIN)
- {
- time++;
- Delay140us();
- }
- if(time>31)//32*0.14=4.5ms
- {
- time = 0;
- for(i=0;i<4;i++)
- {
- ir_buf[i] = 0;
- for(j=0;j<8;j++)
- {
- while(!IRIN)
- {
- time++;
- Delay140us();
- }
- if(time>=3)
- {
- time=0;
- while(IRIN)//ÅÐ¶Ï¸ßµçÆ½Ê±¼ä
- {
- time++;
- Delay140us();
- }
- if(time>=11) ir_buf[i] |= (0x01<<j);
- }
- }
- }
- }
- }
- }
復制代碼 |