irint.lst
来自「宏芯T102芯片驱动(51单片机作主控)」· LST 代码 · 共 304 行 · 第 1/2 页
LST
304 行
C51 COMPILER V7.06 IRINT 12/28/2004 10:14:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IRINT
OBJECT MODULE PLACED IN .\obj\IrInt.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\new_osd\IrInt.c BROWSE INCDIR(.\include\;.\source\) DEBUG OBJECTEXTE
-ND PRINT(.\IrInt.lst) OBJECT(.\obj\IrInt.obj)
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
10 extern bit ir_enable;
11 extern uCHAR ir_data;
12 //extern uWORD count1;
13
14 bit Filter13(bit le)
15 {
16 1 bit r;
17 1 r=INT1;
18 1 if(le==1)
19 1 {
20 2 _nop_();
21 2 _nop_();
22 2 _nop_();
23 2 r&=INT1;
24 2 _nop_();
25 2 _nop_();
26 2 _nop_();
27 2 r&=INT1;
28 2 }
29 1 else
30 1 {
31 2 _nop_();
32 2 _nop_();
33 2 _nop_();
34 2 r|=INT1;
35 2 _nop_();
36 2 _nop_();
37 2 _nop_();
38 2 r|=INT1;
39 2 }
40 1 if(r==le)
41 1 return 1;
42 1 else
43 1 return 0;
44 1 }
45 /*遥控接收在此中断程序内完成
46 数据放在ir_data内*/
47 /************************************/
48 /* Interrupt for IR subroutine */
49 /* external interrupt source INT0 */
50 /************************************/
51 void int1Remote(void) interrupt 2
52 {
53 1 register BYTE i;
54 1 unsigned int count; /*计时变量*/
C51 COMPILER V7.06 IRINT 12/28/2004 10:14:05 PAGE 2
55 1 unsigned int temp0,temp1,ir_code=0;
56 1 ir_enable=TRUE;
57 1 TMOD=0x11; /*timer 0 operate in 16 bit mode*/
58 1 EX1=0;
59 1 TL0=0;
60 1 TH0=0;
61 1 TR0=1;
62 1 /************************************/
63 1 /* Detect IR Head */
64 1 /************************************/
65 1 do /*Detect IR head 9mS*/
66 1 {
67 2 count=(TL0+TH0*256); /*count :us unit */
68 2 if(Filter13(1)==1) break;
69 2 }while(count<=(IR_HEAD+DELTA));
70 1 TR0=0; /*停止计时*/
71 1
72 1 if(Filter13(0)==1||count<(IR_HEAD-DELTA*25)) /*for some noise disturb IR*/
73 1 {
74 2 ir_enable=FALSE; /* no IR head or not suitable for Ir head*/
75 2 EX1=1;
76 2 TR0=1;
77 2 return;
78 2 }
79 1 /************************************/
80 1 /* Detect OFF CODE 4.5mS */
81 1 /************************************/
82 1 while(Filter13(0)==1);
83 1 TR0=0;
84 1 TL0=0;
85 1 TH0=0;
86 1 TR0=1;
87 1 do /*Detect IR OFF CODE*/
88 1 {
89 2 count=(TL0+TH0*256); /*count :us unit */
90 2 if(Filter13(0)==1) break;
91 2 }while(count<(OFF_CODE+DELTA));
92 1 TR0=0;
93 1 count=(TL0+TH0*256); /*count :us unit */
94 1 if(count<=(OFF_CODE-DELTA*2))
95 1 {
96 2 /*重复码OFF=2.25*/
97 2 if((count>(OFF_REP-DELTA)&&count<(OFF_REP+DELTA)))
98 2 {
99 3 TR0=0;
100 3 TL0=0;
101 3 TH0=0;
102 3 TR0=1;
103 3 do
104 3 {
105 4 count=(TL0+TH0*256); /*count :us unit */
106 4 if(Filter13(1)==1) break;
107 4 }while(count<=(REP_CODE+DELTA));
108 3 TR0=0;
109 3 count=(TL0+TH0*256); /*count :us unit */
110 3 if(INT1==1)
111 3 {
112 4 TR0=0;
113 4 if(
114 4 ir_data==REMOTE_KEY_DECR||ir_data==REMOTE_KEY_INCR)
115 4 {
116 5 ir_enable=TRUE; /*注意:ir_data不变*/
C51 COMPILER V7.06 IRINT 12/28/2004 10:14:05 PAGE 3
117 5 EX1=0;
118 5 }
119 4 else
120 4 {
121 5 ir_data=0;
122 5 ir_enable=FALSE;
123 5 EX1=1;
124 5 TR0=1;
125 5 }
126 4 return;
127 4 }
128 3 }
129 2 else
130 2 {
131 3 ir_enable=FALSE; /*not suitable for off code*/
132 3 EX1=1;
133 3 TR0=1;
134 3 return;
135 3 }
136 2 }
137 1 /************************************/
138 1 /* Detect 16 bit address code */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?