📄 main.lst
字号:
C51 COMPILER V7.08 MAIN 04/07/2011 17:57:37 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 * 红外接收数据,中断方式,并通过串口发送
3 *
4 * 晶振:11.0592M
5 */
6
7 #include <reg52.h>
8
9 typedef unsigned char uint8;
10
11 sbit Ir_Pin = P3^3;
12
13 uint8 Ir_Buf[4]; //用于保存解码结果
14
15
16 /*
17 * 外部中断初始化
18 */
19 void int1_init(void)
20 {
21 1 IT1 = 1; //下降沿有效
22 1 EX1 = 1;
23 1 EA = 1;
24 1 }
25
26 /*
27 * UART初始化
28 * 波特率:9600
29 */
30 void uart_init(void)
31 {
32 1 TMOD = 0x21;
33 1 SCON = 0x50;
34 1
35 1 TH1 = 0xFD;
36 1 TL1 = 0xFD;
37 1
38 1 TR1 = 1;
39 1 }
40
41 /*
42 * UART发送一字节
43 */
44 void UART_Send_Byte(uint8 dat)
45 {
46 1 SBUF = dat;
47 1 while (TI == 0);
48 1 TI = 0;
49 1 }
50
51
52 /*
53 * 获取低电平时间
54 */
55 unsigned int Ir_Get_Low()
C51 COMPILER V7.08 MAIN 04/07/2011 17:57:37 PAGE 2
56 {
57 1 TL0 = 0;
58 1 TH0 = 0;
59 1 TR0 = 1;
60 1 while (!Ir_Pin && (TH0&0x80)==0);
61 1
62 1 TR0 = 0;
63 1 return (TH0 * 256 + TL0);
64 1 }
65
66 /*
67 * 获取高电平时间
68 */
69 unsigned int Ir_Get_High()
70 {
71 1 TL0 = 0;
72 1 TH0 = 0;
73 1 TR0 = 1;
74 1 while (Ir_Pin && (TH0&0x80)==0);
75 1
76 1 TR0 = 0;
77 1 return (TH0 * 256 + TL0);
78 1 }
79
80
81 main()
82 {
83 1 uart_init();
84 1 int1_init();
85 1
86 1 while (1);
87 1 }
88
89 void int1_isr() interrupt 2
90 {
91 1 unsigned int temp;
92 1 char i,j;
93 1
94 1 temp = Ir_Get_Low();
95 1 if ((temp < 7833) || (temp > 8755)) //引导脉冲低电平8500~9500us
96 1 return;
97 1 temp = Ir_Get_High();
98 1 if ((temp < 3686) || (temp > 4608)) //引导脉冲高电平4000~5000us
99 1 return;
100 1
101 1 for (i=0; i<4; i++) //4个字节
102 1 {
103 2 for (j=0; j<8; j++) //每个字节8位
104 2 {
105 3 temp = Ir_Get_Low();
106 3 if ((temp < 184) || (temp > 737)) //200~800us
107 3 return;
108 3
109 3 temp = Ir_Get_High();
110 3 if ((temp < 184) || (temp > 1843)) //200~2000us
111 3 return;
112 3
113 3 Ir_Buf[i] >>= 1;
114 3 if (temp > 1032) //1120us
115 3 Ir_Buf[i] |= 0x80;
116 3 }
117 2 }
C51 COMPILER V7.08 MAIN 04/07/2011 17:57:37 PAGE 3
118 1
119 1 UART_Send_Byte(Ir_Buf[0]);
120 1 UART_Send_Byte(Ir_Buf[1]);
121 1 UART_Send_Byte(Ir_Buf[2]);
122 1 UART_Send_Byte(Ir_Buf[3]);
123 1 }
124
125
126
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 307 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 2
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 + -