📄 max232.lst
字号:
C51 COMPILER V7.20 MAX232 03/24/2007 01:17:41 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAX232
OBJECT MODULE PLACED IN MAX232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAX232.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*****************************************************************************
2 MCU8051学习板演示程序
3
4 (c) Copyright 2007-2007,广州恒芯电子
5 All Rights Reserved
6 *****************************************************************************/
7
8 /*****************************************************************************
9 程序说明
10 名称: MCU8051学习板演示程序(MAX232测试)
11 功能: 从串口接收一个字节,并在数码管上显示,或读入键盘值从串口发送出去(波特率为1200)
12 版本:2007-03-01
13 *****************************************************************************/
14
15 /*****************************************************************************
16 硬件说明
17 单片机: 兼容MCS-51单片机/STC89C51
18 晶振频率: 12MHz
19 *****************************************************************************/
20
21 #include "regx52.h"
22
23 /****************************************************************************
24 说明: 程序预定义
25 *****************************************************************************/
26 #define LED7A_CTRL P1_0/*数码管第一位控制引脚(0为有效,1为无效)*/
27 #define LED7B_CTRL P1_1/*数码管第二位控制引脚(0为有效,1为无效)*/
28 #define LED7C_CTRL P1_2/*数码管第三位控制引脚(0为有效,1为无效)*/
29 #define LED7D_CTRL P1_3/*数码管第四位控制引脚(0为有效,1为无效)*/
30
31 #define LED7_STATUS P0/*数码管状态引脚(0为有效,1为无效)*/
32 #define KEY_STATUS P2/*键盘引脚*/
33
34
35 /****************************************************************************
36 说明: 变量定义
37 *****************************************************************************/
38 code unsigned char m_ucLedTab[]=
39 {
40 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
41 0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
42 };/*数码管十六进制编码表*/
43
44 unsigned char code m_ucKeyTab[]=
45 {
46 0x7e, 0xe7, 0xd7, 0xb7, 0x77, 0xeb, 0xdb, 0xbb, 0x7b, 0xed,
47 0xdd, 0xbd, 0x7d, 0xee, 0xde, 0xbe
48 };/*键盘十六进制编码表*/
49
50 unsigned char m_ucLedBuf[4];/*七段数码管显示值缓存*/
51
52 /****************************************************************************
53 名称: KeyCheck()
54 说明: 键盘检测
55 参数: 无
C51 COMPILER V7.20 MAX232 03/24/2007 01:17:41 PAGE 2
56 返回: 键盘码值,若无键按下则返回16
57 *****************************************************************************/
58 unsigned char KeyCheck();
59
60 /****************************************************************************
61 名称: Led7Scan()
62 说明: 数码管动态扫描处理程序
63 参数: 无
64 返回: 无
65 *****************************************************************************/
66 void Led7Scan();
67
68 /****************************************************************************
69 名称: Uart()
70 说明: 从串口接收一个字节,在数码管上显示
71 参数: 无
72 返回: 无
73 *****************************************************************************/
74 void Uart();
75
76 /*****************************************************************************
77 程序开始
78 *****************************************************************************/
79 void main()
80 {
81 1 unsigned char ucKey;
82 1
83 1 /*T0中断设定*/
84 1 TMOD=0x21;/*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
85 1 TH0=0xec;/*定时时间 50Hz/4 计算公式:10000H - (5 x 1000) = EC78H*/
86 1 TL0=0x78;
87 1
88 1 TH1=0xe6;/*波特率为1200*/
89 1 TL1=0xe6;
90 1
91 1 ET0=1;/*允许T0中断*/
92 1 TR0=1;/*使T0工作*/
93 1 TR1=1;
94 1
95 1 SCON=0x50;
96 1 ES=1;
97 1
98 1 EA=1;/*总中断开启*/
99 1
100 1 m_ucLedBuf[0]=0;
101 1 m_ucLedBuf[1]=16;
102 1 m_ucLedBuf[2]=0;
103 1 m_ucLedBuf[3]=0;
104 1
105 1
106 1 while(1)
107 1 {
108 2 ucKey=KeyCheck();/*获得键盘值*/
109 2 if(ucKey!=16)/*判断是否有键按下,若有则将它在数码管显示出来*/
110 2 {
111 3 m_ucLedBuf[0]=ucKey;/*将键盘值在数码管上显示*/
112 3
113 3 EA=0;
114 3 SBUF=ucKey;/*将键盘值从串口发送出去*/
115 3 while(!TI);
116 3 TI=0;
117 3 EA=1;
C51 COMPILER V7.20 MAX232 03/24/2007 01:17:41 PAGE 3
118 3 }
119 2 }
120 1 }
121
122 /*****************************************************************************
123 名称: Interrupt1Handler
124 说明: T0中断入口
125 参数: 无
126 返回 :无
127 *****************************************************************************/
128 void Interrupt1Handler() interrupt 1
129 {
130 1 Led7Scan(); /*数码管动态扫描*/
131 1 TH0=0xec; /*重新设置T0定时值*/
132 1 TL0=0x78;
133 1 }
134
135 /*****************************************************************************
136 名称: Interrupt4Handler
137 说明: UART中断入口
138 参数: 无
139 返回 :无
140 *****************************************************************************/
141 void Interrupt4Handler() interrupt 4
142 {
143 1 Uart();
144 1 }
145
146 /****************************************************************************
147 名称: Led7Scan()
148 说明: 数码管动态扫描处理程序
149 参数: 无
150 返回: 无
151 *****************************************************************************/
152 void Led7Scan()
153 {
154 1 static unsigned char a=0;
155 1
156 1 switch(a) /*判断数码管动态扫描值*/
157 1 {
158 2 case 0: /*处理数码管第一位*/
159 2 LED7D_CTRL=1; /*设置数码管第四位为无效*/
160 2 LED7A_CTRL=0; /*设置数码管第一位位有效*/
161 2 break;
162 2
163 2 case 1: /*处理数码管第二位*/
164 2 LED7A_CTRL=1; /*设置数码管第一位为无效*/
165 2 LED7B_CTRL=0; /*设置数码管第二位位有效*/
166 2 break;
167 2
168 2 case 2: /*处理数码管第三位*/
169 2 LED7B_CTRL=1; /*设置数码管第二位为无效*/
170 2 LED7C_CTRL=0; /*设置数码管第三位位有效*/
171 2 break;
172 2
173 2 case 3: /*处理数码管第四位*/
174 2 LED7C_CTRL=1; /*设置数码管第三位为无效*/
175 2 LED7D_CTRL=0; /*设置数码管第四位位有效*/
176 2 break;
177 2 }
178 1
179 1 LED7_STATUS=m_ucLedTab[m_ucLedBuf[a]]; /*将显示码送数码管状态引脚*/
C51 COMPILER V7.20 MAX232 03/24/2007 01:17:41 PAGE 4
180 1
181 1 a++; /*数码管动态扫描值加1,若该值4则置为0*/
182 1 if(a>3)
183 1 a=0;
184 1 }
185
186 /****************************************************************************
187 名称: KeyCheck()
188 说明: 键盘检测
189 参数: 无
190 返回: 键盘码值,若无键按下则返回16
191 *****************************************************************************/
192 unsigned char KeyCheck()
193 {
194 1 unsigned char a,b;
195 1
196 1 for(a=0;a<4;a++)/*循环4次*/
197 1 {
198 2 switch(a)/*改变键盘扫描码*/
199 2 {
200 3 case 0:KEY_STATUS=0xef;break;
201 3 case 1:KEY_STATUS=0xdf;break;
202 3 case 2:KEY_STATUS=0xbf;break;
203 3 case 3:KEY_STATUS=0x7f;break;
204 3 };
205 2
206 2 b=KEY_STATUS;
207 2 if((b&0x0f)!=0x0f)/*判断是否有按键按下*/
208 2 {
209 3 for(a=0;a<16;a++)/*根据键盘码判断那个键按下*/
210 3 {
211 4 if(b==m_ucKeyTab[a])
212 4 {
213 5 return a;
214 5 }
215 4 }
216 3 }
217 2 }
218 1
219 1 return 16;
220 1 }
221
222 /****************************************************************************
223 名称: Uart()
224 说明: 从串口接收一个字节,在七段数码管上显示
225 参数: 无
226 返回: 无
227 *****************************************************************************/
228 void Uart()
229 {
230 1 EA=0;
231 1
232 1 while(RI==0);/*串口接收一个字节,并在七段数码管上显示*/
233 1 RI=0;
234 1
235 1 m_ucLedBuf[2]=(SBUF>>4)&0x0f;
236 1 m_ucLedBuf[3]=SBUF&0x0f;
237 1
238 1 EA=1;
239 1 }
240
241
C51 COMPILER V7.20 MAX232 03/24/2007 01:17:41 PAGE 5
242
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 338 ----
CONSTANT SIZE = 33 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -