📄 serial port.lst
字号:
C51 COMPILER V7.50 SERIAL_PORT 11/08/2008 20:46:51 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL_PORT
OBJECT MODULE PLACED IN serial port.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE serial port.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************
2 编写时间:2008年8月10日
3 编辑:小鱼儿
4 功能:开机检验数码管好坏,用串口通讯发送一个十六进制数,两位数码管显示,并有八个发光二极管
5 以二进制的形式点亮,其十六进值与数码管显示一致。
6 ***********************/
7
8 #include "reg52.h" //头文件
9 #include "intrins.h"
10
11 #define uchar unsigned char
12 #define uint unsigned int
13 uchar a,b,flag;
14 sbit dula=P2^6;//数码管段选
15 sbit wela=P2^7;//数码管位选
16 sbit beep=P2^3;//蜂鸣器引脚定义
17 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
18 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
19
20
21
22 void delay(uint z)//延时子程序
23 {
24 1 uint x,y;
25 1 for(x=z;x>0;x--)
26 1 for(y=125;y>0;y--);
27 1 }
28
29 /***********************
30 函数名:beep200ms
31 功能:数码管全亮,闪烁三次后,前两个数码管显示0.
32 ************************/
33 void beep200ms()//开机指示灯和数码管全闪
34 {
35 1 for(b=0;b<3;b++)//重复三次
36 1 {
37 2 P1=0x00;
38 2 dula=0;
39 2 P0=0xff;
40 2 dula=1;
41 2 dula=0;
42 2
43 2 wela=0;
44 2 P0=0xc0;
45 2 wela=1;
46 2 wela=0;
47 2 delay(500);
48 2
49 2 P1=0xff;
50 2 dula=0;
51 2 P0=0x00;
52 2 dula=1;
53 2 dula=0;
54 2
55 2 wela=0;
C51 COMPILER V7.50 SERIAL_PORT 11/08/2008 20:46:51 PAGE 2
56 2 P0=0xc0;
57 2 wela=1;
58 2 wela=0;
59 2 delay(500);
60 2 }
61 1 dula=0;
62 1 P0=0x3f;//十位显示0
63 1 dula=1;
64 1 dula=0;
65 1
66 1 wela=0;
67 1 P0=0xfe;
68 1 wela=1;
69 1 wela=0;
70 1 delay(10);
71 1
72 1 dula=0;
73 1 P0=0x3f;//个位显示0
74 1 dula=1;
75 1 dula=0;
76 1
77 1 wela=0;
78 1 P0=0xfd;
79 1 wela=1;
80 1 wela=0;
81 1 delay(10);
82 1 }
83 void display1(uint temp)//发送0x01,显示1
84 {
85 1 uint aa,bb;
86 1 aa=temp/16;
87 1 bb=temp%16;
88 1
89 1 dula=0;
90 1 P0=table[aa];//显示十位
91 1 dula=1;
92 1 dula=0;
93 1
94 1 wela=0;
95 1 P0=0xfe;
96 1 wela=1;
97 1 wela=0;
98 1 delay(10);
99 1
100 1 dula=0;
101 1 P0=table[bb];//显示个位
102 1 dula=1;
103 1 dula=0;
104 1
105 1 wela=0;
106 1 P0=0xfd;
107 1 wela=1;
108 1 wela=0;
109 1 delay(10);
110 1 }
111
112
113 void move()//流水灯
114 {
115 1 uchar x,temp;
116 1 x=0;
117 1 P1=0xfe;
C51 COMPILER V7.50 SERIAL_PORT 11/08/2008 20:46:51 PAGE 3
118 1 for(x=0;x<8;x++)
119 1 {
120 2 temp=P1;
121 2 P1=_crol_(temp,1);
122 2 delay(50);
123 2 }
124 1 for(x=0;x<8;x++)
125 1 {
126 2 temp=P1;
127 2 P1=_cror_(temp,1);
128 2 delay(50);
129 2 }
130 1 }
131
132
133 void main()
134 {
135 1 beep200ms();
136 1 TMOD=0x20;//设置定时/计数器T1的工作方式为方式2
137 1 TH1=0xfd;
138 1 TL1=0xfd;
139 1 TR1=1;//运行控制位
140 1 SM0=0;
141 1 SM1=1;//SCON 串行口的工作方式为方式1
142 1 REN=1;//允许串行接受
143 1 EA=1; //开总中断
144 1 ES=1;//开串行口中断允许位
145 1 PCON=0x00;
146 1 beep=1;//关蜂鸣器
147 1 while(1)
148 1 {
149 2 display1(SBUF);
150 2 if(flag==1)
151 2 {
152 3 ES=0;//
153 3 flag=0;
154 3 SBUF=a;
155 3 while(!TI);
156 3 TI=0;//TI为发送中断标志位,硬件置1,软件置0
157 3 ES=1;
158 3 }
159 2 switch(SBUF)
160 2 {
161 3 case 01:move();
162 3 break;
163 3 case 02:beep200ms();
164 3 break;
165 3 }
166 2 }
167 1 }
168
169 void serial() interrupt 4
170 {
171 1 P1=SBUF;
172 1 a=SBUF;
173 1 flag=1;
174 1 RI=0;//接受中断标志位,硬件置1,软件置0
175 1 }
176
177
178
179
C51 COMPILER V7.50 SERIAL_PORT 11/08/2008 20:46:51 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 358 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
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 + -