📄 timeint.c
字号:
#include "tab.h"
#include "78e65.h"
#include <stdio.h>
#include "reg51x.h"
#include <intrins.h>
//#include "ioprot.h"
sbit IR = P4^2;
//*****************************IR receiver ********************************
unsigned int uiIRcode=0;
unsigned char ucIRvalue=0;
unsigned char ucIR_value=0;
bit bir_ok_flag;
unsigned char ucIR_count;//ret ir process value
unsigned char GetCycle(void);
void DELAY_X15us_pin(unsigned char xus);//delay=(xus+1)*15us
unsigned char IR_process_uc(unsigned char ucvalue);
//***********************music out interrupt end ***********************
//***********************IR_process_uc*******************************
unsigned char IR_process_uc(unsigned char ucvalue_p){
unsigned char count;
switch(ucvalue_p){
case 0x12://0
count=0;
break;
case 0x22:// 1
count=1;
break;
case 0xa2:// 2
count=2;
break;
case 0x62:// 3
count=3;
break;
case 0x60:// 4
count=4;
break;
case 0xe0:// 5
count=5;
break;
case 0x82:// 6
count=6;
break;
case 0x68:// 7
count=7;
break;
case 0x02:// 8
count=8;
break;
case 0xaa:// 9
count=9;
break;
case 0x70:// 10
count=10;
break;
case 0x48://L key
count=41;
break;
case 0xd2://R key
count=42;
break;
case 0x52://UP key
count=43;
break;
case 0x72://down key
count=44;
break;
case 0x50://select key
count=45;
break;
case 0xc2://cancel key
count=46;
break;
case 0xca://menu key
count=47;
break;
case 0x58://display off/on key
count=48;
break;
default: count=0xff;
break;
}
return count;
}
//***********************************************************************
//*****************************IR receiver program***************************
void int3_interrupt() interrupt 7 {
unsigned char i;
unsigned char Count;
unsigned long IR_data;
bit bir_start_flag;
//EA=0;
EX3 = 0;
IE3=0;
//TR0=0;
bir_start_flag=0;
//bir_ok_flag=0;
IR_data=0;
Count=GetCycle();
//SBUF=Count;
if((Count>170) &&(Count<217)){ //11~14.5ms (13.5ms)(196,197)
bir_start_flag=1;
//printf("ir_start_ok\n");
}//repeat press some button .
else{
EX3 = 1;
return ;
} //not all
//-----------------------------------------------------------
if(bir_start_flag){ //begin to receive the ir_code .
for(i=32;i>0;i--){
Count=GetCycle(); IR_data <<= 1;
//SBUF=Count;
if((Count>19) && (Count<37)) IR_data ++;// 2~2.5ms(2.24ms)(32)
else if((Count>4) && (Count<19)) ;//0.85~1.3ms(1.12ms)(15,16,17)
else {
EX3=1;
return;
}
}
}
ucIR_value=(char)IR_data; IR_data>>=8;
ucIRvalue=(char)IR_data; IR_data>>=8;
uiIRcode=(int)IR_data;
bir_ok_flag=1;
ucIR_count=IR_process_uc(ucIRvalue); //*/
EX3=1;
}
//=========================================
unsigned char GetCycle(void){
unsigned char a;
a=0;
while(IR==0) {
DELAY_X15us_pin(3);//delay60us
a++;
if(a>170){//>10.5ms
return a;
}
}
while(IR) {
DELAY_X15us_pin(3);//delay60us
a++;
if(a>231){//>15ms
return a;
}
}
return(a);
}
//=================DELAY_x10us(delay=15*(x+1)us) f=12M IR PIN change exit =================================
void DELAY_X15us_pin(unsigned char xus){
unsigned char j,i;
i=IR;
for(j=0;j<xus;j++){
_nop_();_nop_();
if(i!=IR)break;
}
}
//*****************************IR receiver program end ***************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -