📄 remote_drv.lst
字号:
C51 COMPILER V7.50 REMOTE_DRV 02/16/2009 09:59:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE REMOTE_DRV
OBJECT MODULE PLACED IN remote_drv.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE lib_mcu\remote\remote_drv.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\remote_
-drv.lst) OBJECT(remote_drv.obj)
line level source
1
2 #include "config.h" /* lib configuration header */
3 #include "remote_drv.h"
4 #include "lib_mcu\timer\timer_drv.h" /* timer driver definition */
5 #include "lib_mcu\lcd\lcd_drv.h"
6 #include "lib_mcu\kbd\key_drv.h" /* Keyboard driver definition */
7 #include <stdio.h>
8
9
10 INT8U gl_rmt;
11 bit gl_rmt_ok;
12
13 INT32U u32RmtValue; /*用于存放接收到的遥控信号*/
14 INT8U u8BitPoint;
15 INT8U u8ReceiveEnd;
16
17
18
19 /////////////////////////////////////////////////////////////////////////////
20 void remote_disable(void)
21 {
22 1 EX1 = 0;
23 1 }
24
25
26 /////////////////////////////////////////////////////////////////////////////
27 void remote_enable(void)
28 {
29 1 u32RmtValue = 0; //32bit receive value = 0
30 1 u8ReceiveEnd = 0; //not start to receive
31 1 u8BitPoint = 0; //bit point reset
32 1 gl_rmt = 0xff;
33 1 gl_rmt_ok = FALSE;
34 1 EX1 = 1; //enable ext1 interrupt
35 1 }
36
37
38 /////////////////////////////////////////////////////////////////////////////
39 void t1_remote_init(void)
40 {
41 1 T1_init(0,0,0x10); //T1工作于方式1,16BIT计数器
42 1 T1_start(); //开计数器1,用于判断遥控脉冲周期
43 1 IT1 = 1; //外部中断INT1管脚电平下降沿触发中断
44 1 remote_enable();
45 1 }
46
47
48
49 /////////////////////////////////////////////////////////////////////////////
50 INT8U remote_value(void)
51 {
52 1 INT8U u8Value;
53 1
54 1 if(gl_rmt_ok == TRUE)
C51 COMPILER V7.50 REMOTE_DRV 02/16/2009 09:59:54 PAGE 2
55 1 {
56 2 switch(gl_rmt)
57 2 {
58 3 case 0x90: u8Value = REMOTE_0; break;
59 3 case 0x00: u8Value = REMOTE_1; break;
60 3 case 0x10: u8Value = REMOTE_2; break;
61 3 case 0x08: u8Value = REMOTE_3; break;
62 3 case 0x18: u8Value = REMOTE_4; break;
63 3 case 0x04: u8Value = REMOTE_5; break;
64 3 case 0x14: u8Value = REMOTE_6; break;
65 3 case 0x0c: u8Value = REMOTE_7; break;
66 3 case 0x1c: u8Value = REMOTE_8; break;
67 3 case 0x80: u8Value = REMOTE_9; break;
68 3 case 0x50: u8Value = REMOTE_CHUP; break;
69 3 case 0x48: u8Value = REMOTE_CHDN; break;
70 3 case 0x4c: u8Value = REMOTE_MUTE; break;
71 3 case 0x40: u8Value = REMOTE_POWN; break;
72 3 case 0x44: u8Value = REMOTE_VOUP; break;
73 3 case 0x54: u8Value = REMOTE_VODN; break;
74 3 case 0xd8: u8Value = REMOTE_CALL; break;
75 3 case 0xcc: u8Value = REMOTE_LUUP; break;
76 3 case 0xdc: u8Value = REMOTE_LUDN; break;
77 3 case 0x88: u8Value = REMOTE_10UP; break;
78 3 case 0xe8: u8Value = REMOTE_TIME; break;
79 3 case 0xec: u8Value = REMOTE_NONE; break;
80 3 default : u8Value = REMOTE_NONE; break;
81 3 }
82 2 remote_disable();
83 2 return (u8Value);
84 2 }
85 1 else
86 1 return (0xff);
87 1 }
88
89
90
91
92 //////////////////////////////////////////////////////////////////////////////////
93 Interrupt(remote_int(void), IRQ_INT1)
94 {
95 1 INT8U bTbit;
96 1 INT8U i;
97 1 INT16U u16TimeValue;
98 1
99 1 EX1 = 0; //关中断
100 1
101 1 T1_stop(); //关定时器
102 1 u16TimeValue = TH1; //取定时器值
103 1 u16TimeValue <<= 8;
104 1 u16TimeValue += TL1;
105 1 TH1 = 0x00;
106 1 TL1 = 0x00;
107 1 T1_start(); //开定时器
108 1
109 1 if((u16TimeValue > 1800)&&(u16TimeValue < 2200))
110 1 bTbit = 1;
111 1 else if((u16TimeValue > 900)&&(u16TimeValue < 1100))
112 1 bTbit = 0; //判断出得到的位是1还是0
113 1
114 1 if(u8BitPoint < 32)
115 1 {
116 2 u32RmtValue += bTbit;
C51 COMPILER V7.50 REMOTE_DRV 02/16/2009 09:59:54 PAGE 3
117 2 u8BitPoint ++;
118 2 u32RmtValue <<= 1;
119 2 }
120 1 else
121 1 {
122 2 u8ReceiveEnd = 1;
123 2 u8BitPoint = 0;
124 2 }
125 1
126 1 if(u8ReceiveEnd == 1) //收满4个字节的数据后,进行字节内容判断
127 1 {
128 2 for(i=0; i<16; i++)
129 2 {
130 3 if((u32RmtValue & 0xff000000) == 0xe2000000)
131 3 {
132 4 gl_rmt = (u32RmtValue >> 16);
133 4 gl_rmt_ok = TRUE;
134 4 break;
135 4 }
136 3 else
137 3 {
138 4 u32RmtValue <<= 1;
139 4 }
140 3 }
141 2 u8ReceiveEnd = 0;
142 2 u32RmtValue = 0;
143 2 }
144 1
145 1 EX1 = 1;
146 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 564 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 7 2
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -