📄 irint.lst
字号:
C51 COMPILER V7.06 IRINT 06/16/2005 10:05:41 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IRINT
OBJECT MODULE PLACED IN F:\T100_C~1\HUI_CH~1\铁将军\SIMULA~2\IRINT.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\T100_C~1\HUI_CH~1\铁将军\SIMULA~2\IRINT.C DB SB OE
stmt level source
1 //#ifdef INTERRUPT1
2 #include "reg51.h"
3 #include <intrins.h>
4 #include "Common.h"
5 #include "Remote.h"
6 #include "KeyPad.h"
7 #include "OSDDraw.h"
8 #include "TwoWire.h"
9 #include "T101_Util.h"
10
11 extern uWORD XCLK_MCU;
12 extern bit ir_enable;
13 extern uCHAR ir_data;
14 uCHAR ir_data1;
15 //extern uWORD count1;
16 extern bit IRFACTRY_Ctrl(uCHAR cCom);
17
18 bit Filter13(bit le)
19 {
20 1 bit r;
21 1 r=INT1;
22 1 if(le==1)
23 1 {
24 2 _nop_();
25 2 _nop_();
26 2 _nop_();
27 2 r&=INT1;
28 2 _nop_();
29 2 _nop_();
30 2 _nop_();
31 2 r&=INT1;
32 2 }
33 1 else
34 1 {
35 2 _nop_();
36 2 _nop_();
37 2 _nop_();
38 2 r|=INT1;
39 2 _nop_();
40 2 _nop_();
41 2 _nop_();
42 2 r|=INT1;
43 2 }
44 1 if(r==le)
45 1 return 1;
46 1 else
47 1 return 0;
48 1 }
49 /*遥控接收在此中断程序内完成
50 数据放在ir_data内*/
51 /************************************/
52 /* Interrupt for IR subroutine */
53 /* external interrupt source INT0 */
54 /************************************/
55 void int1Remote(void) interrupt 2
C51 COMPILER V7.06 IRINT 06/16/2005 10:05:41 PAGE 2
56 {
57 1 /* static uWORD IR_HEAD=20000;// = (XCLK_MCU*3/4);//10738//9000//7500
58 1 static uWORD OFF_CODE=10000;// = (IR_HEAD/2);//5369//4500//3750
59 1 uWORD OFF_REP;// = (IR_HEAD/4);//2684//2250// 1875
60 1 uWORD REP_CODE;// = (IR_HEAD/16);//667//467
61 1 uWORD DELTA ;// = 300;//250
62 1 uWORD CODE_0_TIME;//= (IR_HEAD/16);//667//557//467
63 1 uWORD CODE_1_TIME;//= (CODE_0_TIME*3);//2000//1670//1400*/
64 1 register BYTE i;
65 1 unsigned int count,count1; /*计时变量*/
66 1 unsigned int temp0,temp1,ir_code=0;
67 1 ir_enable=TRUE;
68 1 TMOD=0x11; /*timer 0 operate in 16 bit mode*/
69 1 EX1=0;
70 1 TL0=0;
71 1 TH0=0;
72 1 TR0=1;
73 1 /************************************/
74 1 /* Detect IR Head */
75 1 /************************************/
76 1 do /*Detect IR head 9mS*/
77 1 {
78 2 count=(TL0+TH0*256); /*count :us unit */
79 2 if(Filter13(1)==1) break;
80 2 }while(count<=(IR_HEAD+DELTA));
81 1 TR0=0; /*停止计时*/
82 1 count=(TL0+TH0*256); /*count :us unit */
83 1
84 1 if(Filter13(0)==1||((count<(IR_HEAD-DELTA*25))))//&&(IR_HEAD!=0xffff)))//||count<(7000))//IR_HEAD!=0xffff
-) /*for some noise disturb IR*/
85 1 {
86 2 ir_enable=FALSE; /* no IR head or not suitable for Ir head*/
87 2 EX1=1;
88 2 TR0=1;
89 2 return;
90 2 }
91 1 /************************************/
92 1 /* Detect OFF CODE 4.5mS */
93 1 /************************************/
94 1 while(Filter13(0)==1);
95 1 TR0=0;
96 1 TL0=0;
97 1 TH0=0;
98 1 TR0=1;
99 1 do /*Detect IR OFF CODE*/
100 1 {
101 2 count=(TL0+TH0*256); /*count :us unit */
102 2 if(Filter13(0)==1) break;
103 2 }while(count<(OFF_CODE+DELTA));
104 1 count1=count;
105 1 /* if(IR_HEAD==0xffff)IR_HEAD = count*2;//10738//9000//7500
106 1 OFF_CODE = IR_HEAD/2;//5369//4500//3750
107 1 OFF_REP = (IR_HEAD/4);//2684//2250// 1875
108 1 REP_CODE = (IR_HEAD/16);//667//467
109 1 DELTA = 300;//250
110 1 CODE_0_TIME= (IR_HEAD/16);//667//557//467
111 1 CODE_1_TIME= (CODE_0_TIME*3);//2000//1670//1400*/
112 1 TR0=0;
113 1 count=(TL0+TH0*256); /*count :us unit */
114 1 if(count<=(OFF_CODE-DELTA*2))
115 1 {
116 2 /*重复码OFF=2.25*/
C51 COMPILER V7.06 IRINT 06/16/2005 10:05:41 PAGE 3
117 2 if((count>(OFF_REP-DELTA)&&count<(OFF_REP+DELTA)))
118 2 {
119 3 TR0=0;
120 3 TL0=0;
121 3 TH0=0;
122 3 TR0=1;
123 3 do
124 3 {
125 4 count=(TL0+TH0*256); /*count :us unit */
126 4 if(Filter13(1)==1) break;
127 4 }while(count<=(REP_CODE+DELTA));
128 3 TR0=0;
129 3 count=(TL0+TH0*256); /*count :us unit */
130 3 if(INT1==1)
131 3 {
132 4 TR0=0;
133 4 if(ir_data==REMOTE_KEY_VO_DEC||ir_data==REMOTE_KEY_VO_INC||
134 4 ir_data==REMOTE_KEY_DECR_F||ir_data==REMOTE_KEY_INCR_F||
135 4 ir_data==REMOTE_KEY_DECR||ir_data==REMOTE_KEY_INCR)
136 4 {
137 5 ir_enable=TRUE; /*注意:ir_data不变*/
138 5 EX1=0;
139 5 }
140 4 else
141 4 {
142 5 ir_data=0;
143 5 ir_enable=FALSE;
144 5 EX1=1;
145 5 TR0=1;
146 5 }
147 4 return;
148 4 }
149 3 }
150 2 else
151 2 {
152 3 ir_enable=FALSE; /*not suitable for off code*/
153 3 EX1=1;
154 3 TR0=1;
155 3 return;
156 3 }
157 2 }
158 1 /************************************/
159 1 /* Detect 16 bit address code */
160 1 /************************************/
161 1 if(ir_enable==TRUE)
162 1 {
163 2 TMOD=0x11; /*counter start with INT0 and TR0*/
164 2 ir_code=0; /*初始化变量*/
165 2 for(i=0;i<16;i++)
166 2 {
167 3 while(INT1==0);
168 3 TL0=0;
169 3 TH0=0;
170 3 TR0=1;
171 3 do
172 3 {
173 4 count=(TL0+TH0*256); /*count :us unit */
174 4 if(Filter13(0)==1) break;
175 4 }while(count<=(CODE_1_TIME+DELTA)); /*INT0为高电平时计时*/
176 3 TR0=0;
177 3 ir_code<<=1;
178 3 if((count>(CODE_1_TIME-DELTA))&&(count<=(CODE_1_TIME+DELTA))) /*detect 1 code 2.24mS-0.56mS=1.68mS*/
C51 COMPILER V7.06 IRINT 06/16/2005 10:05:41 PAGE 4
179 3 ir_code++;
180 3 else if((count>(CODE_0_TIME-DELTA))&&(count<=(CODE_0_TIME+DELTA))); /*detect 0 code 1.12mS-0.56mS=0.56
-mS*/
181 3 else
182 3 {
183 4 ir_enable=FALSE;
184 4 TR0=1;
185 4 break; /*not suitable for address code */
186 4 }
187 3 } /*end for*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -