?? ir.lst
字號:
C51 COMPILER V8.05a IR 01/05/2009 15:57:49 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE IR
OBJECT MODULE PLACED IN .\OBJ\Ir.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ir\Ir.c LARGE BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\List\Ir.l
-st) OBJECT(.\OBJ\Ir.obj)
line level source
1 /******************************************************************************\
2 Project Version: MTKCARDVD()
3 ********************************************************************************
4 Filename: ir.c
5
6 Author: Bonson chen
7
8 Company: CoreTek/ACT Company
9
10 ********************************************************************************
11 File Version: 1.01
12 File Created: July 2007
13
14 Compiled Using: keil uVision2 Version 2.23
15
16 ********************************************************************************
17 Files Required:
18
19 ********************************************************************************
20 File Description:
21
22 ********************************************************************************
23 File History:
24
25 --------------------------------------------------------------------------------
26 Date Name Description
27 --------------------------------------------------------------------------------
28 Mar. 2007 bonson chen File Created
29
30 \******************************************************************************/
31 #define _IR_RECV_C_
32
33 #pragma NOAREGS
34 #include "Global.h"
35 #include "key.h"
36
37 #include "irkey.h"
38
39 // static variables
40
41 // *********************************************************************
42 // Function : void vIrInit(void)
43 // Description : Called when system initial, to reset IR and UI
44 // Parameter : None
45 // Return : None
46 // *********************************************************************
47 void vInitIRVar(void)
48 {
49 1 // reset IR related variable
50 1 _bIR0 = IR_NONE;
51 1 _fgIRKeyValid = FALSE;
52 1 _bPlaypostKey = IR_NONE;
53 1 _bIRKey0 = IR_NONE;
54 1 _bIRLongPush = IR_NONE;
C51 COMPILER V8.05a IR 01/05/2009 15:57:49 PAGE 2
55 1 LongPushCount = 0;
56 1 _bRemoteTimer = 0;
57 1 }
58
59 #define IR_OVERFLOW 250 /* 38 ms */
60 #define IR_LEAD_CENTER 23 /* 3.37 ms */
61 #define IR_REPEAT_CENTER 14 /* 2.25 ms */
62 #define IR_DATA_CENTER 8 /* 1.21 ms */
63
64 #define IR_LEADH_MAX 93
65 #define IR_LEADH_MIN 80 //measure is 83 //87
66 #define IR_LEADL_MAX 48
67 #define IR_LEADL_MIN 38 //35 //measure is 40 //40
68 #define IR_DATA1_MAX 20
69 #define IR_DATA1_MIN 9
70 #define IR_DATA0_MAX 6
71 #define IR_DATA0_MIN 2
72 #define IR_REPEAT_MIN 15//measure is 18 //19
73 #define IR_REPEAT_MAX 24
74 #define IR_PULSE_MAX 7
75 #define IR_PULSE_MIN 4
76
77 #define IR_HEAD_TIMER 13500
78 #define IR_CONHEAD_TIMER 11250
79 #define IR_HEAD_MISTAKE 400
80 #define IR_DIGITAL1_TIMER 2250
81 #define IR_DIGITAL0_TIMER 1125
82 #define IR_DIGITAL_MISTAKE 200
83 void vDelay100us(void)
84 {
85 1
86 1 BYTE c;
87 1
88 1 for (c=0;c<28;c++)
89 1 {
90 2 _nop_();_nop_();_nop_();_nop_();
91 2 _nop_();_nop_();_nop_();_nop_();
92 2 _nop_();_nop_();
93 2 _nop_();_nop_();_nop_();_nop_();
94 2
95 2 }
96 1 }
97
98 /************************************************************************
99 Function :
100 Description :
101 Parameter :
102 Return :
103 ************************************************************************/
104 BYTE bRemoteDetect(void)
105 {
106 1 BYTE bCount, i, j;
107 1 BYTE bCodes[4];
108 1 BYTE bByte;
109 1
110 1 // ********** Leader signal (low 9ms + high 4.5 ms) **********
111 1 for (bCount=0; (!PIN_IR); bCount++) vDelay100us(); //Leader signal low = 9ms
112 1
113 1 if ((bCount < IR_LEADH_MIN) || (bCount > IR_LEADH_MAX))
114 1 {
115 2 return(IR_NONE);
116 2 }
C51 COMPILER V8.05a IR 01/05/2009 15:57:49 PAGE 3
117 1
118 1 for (bCount = 0; ((PIN_IR) && (bCount < (IR_LEADL_MAX+10))); bCount++) vDelay100us(); //Leader signal
-high = 4.5ms
119 1
120 1 if ((bCount < IR_LEADL_MIN) || (bCount > IR_LEADL_MAX)) // outside high 4.5 range
121 1 { // consider same key is pressed
122 2 // if input the same key, only leader code is sent
123 2 // low (9ms) , high (2.25), low (0.56)
124 2 // if ((bCount >= IR_REPEAT_MIN) && (bCount <= IR_REPEAT_MAX)) // key remain pressed
125 2 {
126 3 for (bCount=0; !PIN_IR ; bCount++) vDelay100us();
127 3 }
128 2
129 2 for (bCount=0; (PIN_IR) && (bCount < (IR_DATA1_MAX+20)) ; bCount++) vDelay100us();
130 2
131 2 // if ((bCount >= IR_PULSE_MIN) && (bCount <= IR_PULSE_MAX))
132 2 if (bCount >= (IR_DATA1_MAX+10))
133 2 {
134 3 //gotoxy(1,1);
135 3 // PrintHex(bCount,1);
136 3 _bRemoteTimer = 5;
137 3 if ((++LongPushCount)>=5)
138 3 {
139 4 LongPushCount = 0;
140 4 _bRemoteTimer = 0;
141 4 return(IR_LONGPUSH); // return the previous input key
142 4 }
143 3 }
144 2 else
145 2 LongPushCount = 0;
146 2
147 2 return(IR_NONE);
148 2 }
149 1
150 1 LongPushCount = 0;
151 1
152 1 // *********** Read Code *************
153 1 // logic 0 = low (0.56) + high (0.56)
154 1 // logic 1= low (0.56) + high (1.68)
155 1 for (i=0; i<4; i++)
156 1 {
157 2 bByte = 0;
158 2 for (j=0; j<8; j++)
159 2 {
160 3 for (bCount=0; (!PIN_IR); bCount++) vDelay100us(); //bypass low signal at INT0
161 3
162 3 for (bCount=0; (PIN_IR) && (bCount < (IR_DATA1_MAX+10)) ; bCount++) vDelay100us();
163 3
164 3 if (bCount == 0)
165 3 {
166 4 j--;
167 4 continue; // maybe signal noise
168 4 }
169 3
170 3 bByte >>= 1; // shift right one bit
171 3
172 3 if (bCount >= IR_DATA1_MIN) // bit=0 => bCount<9ms; bit=1 => bCount>9ms
173 3 { // > 0.9 ms==> logic 1
174 4 // else ==> logic 0
175 4 if (bCount >= IR_DATA1_MAX)
176 4 {
177 5 return(IR_NONE); // bCount>30 => error
C51 COMPILER V8.05a IR 01/05/2009 15:57:49 PAGE 4
178 5 }
179 4 bByte |= 0x80;
180 4 }
181 3 }
182 2 bCodes[i] = bByte;
183 2 }
184 1
185 1 if ((bCodes[0] != IR_CUSTOM_CODE) || (bCodes[1] != ~bCodes[0]))
186 1 {
187 2 return(IR_NONE); // system code error
188 2 }
189 1
190 1 // each bit of aCodes[2] will be invert of aCodes[3]
191 1 if (bCodes[2] == ~bCodes[3])
192 1 {
193 2 _bIR0 = bCodes[2];
194 2 if (bCodes[2] >= IR_KEY_GAP_START)
195 2 {
196 3 bCodes[2] -= IR_KEY_GAP_SIZE;
197 3 }
198 2
199 2 if (bCodes[2] < IR_KEY_TBL_SIZE)
200 2 {
201 3 {
202 4 /* look up the mapping table */
203 4 bCodes[2] = _pbIRKeyTbl[bCodes[2]];
204 4 }
205 3
206 3 /* put the received key */
207 3 if (bCodes[2] != IR_NONE)
208 3 {
209 4 // long push key
210 4 if (IsLongPushKey(bCodes[2]))
211 4 {
212 5 _bRemoteTimer = 5;
213 5 }
214 4 /* assume IR interrupt priority is the highest */
215 4 return(bCodes[2]);
216 4 }
217 3 }
218 2 }
219 1
220 1 return(IR_NONE);
221 1 }
222
223
224 BYTE bGetIR0(BYTE bKey)
225 {
226 1 BYTE i;
227 1 for(i = 0; i< (IR_KEY_CODE_MAX-IR_KEY_GAP_SIZE); i++)
228 1 {
229 2 if(bKey ==_pbIRKeyTbl[i])
230 2 {
231 3 if(i < IR_KEY_GAP_START)
232 3 return i;
233 3 else
234 3 return(i + IR_KEY_GAP_SIZE);
235 3 }
236 2 }
237 1 return(IR_NONE);
238 1 }
C51 COMPILER V8.05a IR 01/05/2009 15:57:49 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 402 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 5
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -