📄 main.lst
字号:
C51 COMPILER V7.09 MAIN 06/15/2006 17:32:03 PAGE 1
C51 COMPILER V7.09, 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 Main.C
3 红外收发实验
4 */
5
6
7 #include <reg51.h>
8
9
10 sbit LED = P0^0; //定义指示灯,收到正确数据后点亮
11 sbit CLK = P3^4; //定义红外管时钟信号,产生38kHz方波
12
13
14 //参数配置
15 #define MCLK 11059200L //定义CPU主频(Hz)
16 #define BAUD_RATE 2400L //设置波特率
17
18
19 volatile bit _TI_; //定义发送辅助标志
20 volatile unsigned char cnt; //定义接收计数器
21
22
23 /*
24 函数:UartINTSVC()
25 功能:T0定时中断服务程序
26 */
27 void T0INTSVC() interrupt 1
28 {
29 1 CLK = !CLK;
30 1 }
31
32
33 /*
34 函数:UartINTSVC()
35 功能:串行口中断服务程序
36 */
37 void UartINTSVC() interrupt 4
38 {
39 1 unsigned char c;
40 1 if ( RI ) //接收中断
41 1 {
42 2 c = SBUF;
43 2 RI = 0;
44 2 if ( c == 0x5A ) cnt++;
45 2 }
46 1 if ( TI ) //发送中断
47 1 {
48 2 TI = 0;
49 2 _TI_ = 1;
50 2 }
51 1 }
52
53
54 /*
55 函数:UartInit()
C51 COMPILER V7.09 MAIN 06/15/2006 17:32:03 PAGE 2
56 功能:串行口初始化
57 */
58 void UartInit()
59 {
60 1 EA = 0;
61 1 TR1 = 0;
62 1 RXD = 1;
63 1 TXD = 1;
64 1 _TI_ = 1;
65 1 SCON = 0x50; //串口方式1(8位Uart),允许接收
66 1 PCON |= 0x80; //波特率加倍
67 1 TMOD &= 0x0F;
68 1 TMOD |= 0x20;
69 1 TH1 = 256 - ( MCLK / 12 ) / ( 16 * BAUD_RATE );
70 1 TL1 = TH1; //设置波特率
71 1 TR1 = 1;
72 1 ES = 1; //使能串行口中断
73 1 EA = 1; //使能总中断
74 1 }
75
76
77 /*
78 函数:UartSendChar()
79 功能:通过串行口发送单个字节
80 参数:
81 c:被发送的字节数据,取值0x00~0xFF
82 */
83 void UartSendChar(char c)
84 {
85 1 while ( !_TI_ );
86 1 _TI_ = 0;
87 1 SBUF = c;
88 1 }
89
90
91 /*
92 函数:Delay()
93 功能:延时(t*0.1)ms
94 */
95 void Delay(unsigned char t)
96 {
97 1 unsigned char n;
98 1 do
99 1 {
100 2 n = 49;
101 2 while ( --n != 0 );
102 2 } while ( --t != 0 );
103 1 }
104
105
106 /*
107 函数:SysInit()
108 功能:系统初始化
109 */
110 void SysInit()
111 {
112 1 TMOD &= 0xF0;
113 1 TMOD |= 0x02; //设置T0为8位定时器,自动重装
114 1 TH0 = 256 - ((MCLK / 12) / 38000L) / 2;
115 1 TL0 = TH0; //设置T0初值,对应38kHz
116 1 PT0 = 1; //设置T0中断为高级优先级
117 1 ET0 = 1; //使能T0中断
C51 COMPILER V7.09 MAIN 06/15/2006 17:32:03 PAGE 3
118 1 EA = 1; //使能总中断
119 1 TR0 = 1; //启动定时器T0
120 1 UartInit(); //串行口初始化
121 1 }
122
123
124 void main()
125 {
126 1 unsigned char i;
127 1 SysInit();
128 1 for (;;)
129 1 {
130 2 cnt = 0; //接收计数器清0
131 2 for ( i=0; i<10; i++) //发送10次0x5A
132 2 {
133 3 UartSendChar(0x5A);
134 3 Delay(10);
135 3 }
136 2 if ( cnt > 5 ) //如果收到一半以上的0x5A
137 2 {
138 3 LED = 0; //点亮LED
139 3 }
140 2 else
141 2 {
142 3 LED = 1; //否则熄灭LED
143 3 }
144 2 Delay(100);
145 2 }
146 1 }
147
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 148 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -