📄 12-5z.lst
字号:
C51 COMPILER V7.09 12_5Z 08/11/2005 18:57:04 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 12_5Z
OBJECT MODULE PLACED IN 12-5z.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12-5z.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <stdio.h>
2 #include <reg51.h>
3
4 #define LampComm P0_0
5 #define TRUE 1
6 #define FALSE 0
7 //以上语句定义主机正在通讯闪灯信号
8 #define SelectComm1 P0_1
9 #define SelectComm2 P0_2
10 #define SelectComm3 P0_3
11 #define SelectComm4 P0_4
12 #define SelectComm5 P0_5
13 #define SelectComm6 P0_6
14 //以上语句定义主机通讯的从机号
15 #define MACHINECOMM_OK 0x11
16 //以上语句定义主机通讯传送握手信号
17 #define MACHINECOMM_RET 0x88
18 //以上语句定义从机回复通讯握手信号
19
20 #define DELAY_VALUE 3
21
22 sbit P0_0=P0^0;
23 sbit P0_1=P0^1;
24 sbit P0_2=P0^2;
25 sbit P0_3=P0^3;
26 sbit P0_4=P0^4;
27 sbit P0_5=P0^5;
28 sbit P0_6=P0^6;
29 sbit P0_7=P0^7;
30
31 sbit P1_0=P1^0;
32 sbit P1_1=P1^1;
33 sbit P1_2=P1^2;
34 sbit P1_3=P1^3;
35 sbit P1_4=P1^4;
36 sbit P1_5=P1^5;
37 sbit P1_6=P1^6;
38 sbit P1_7=P1^7;
39
40 sbit P2_0=P2^0;
41 sbit P2_1=P2^1;
42 sbit P2_2=P2^2;
43 sbit P2_3=P2^3;
44 sbit P2_4=P2^4;
45 sbit P2_5=P2^5;
46 sbit P2_6=P2^6;
47 sbit P2_7=P2^7;
48
49 sbit P3_2=P3^2;
50 sbit P3_3=P3^3;
51
52
53 bit EvRcv=FALSE; //是否收到串行数据的标志位
54
55 unsigned char rcvdata=0; //从串口存储接收的变量
C51 COMPILER V7.09 12_5Z 08/11/2005 18:57:04 PAGE 2
56 void send(char *temp,int j); //发送子程序
57 void initial(void); //初始化子程序
58 void delay(short i); //延时子程序
59
60 void main(void)
61 {
62 1 unsigned char datacomm,count=0;
63 1 datacomm=MACHINECOMM_OK;
64 1 initial();
65 1 while(1)
66 1 {
67 2 for (count=0;count<6;count++)
68 2 {
69 3 switch(count)
70 3 {
71 4 case 0: SelectComm1=1;
72 4 break;
73 4 case 1: SelectComm2=1;
74 4 break;
75 4 case 2: SelectComm3=1;
76 4 break;
77 4 case 3: SelectComm4=1;
78 4 break;
79 4 case 4: SelectComm5=1;
80 4 break;
81 4 case 5: SelectComm6=1;
82 4 break;
83 4 default:break;
84 4 } //根据count的不同值,选通不同的从机
85 3 send(&datacomm,1); //发送握手信号
86 3 while(1)
87 3 {
88 4 if(EvRcv) //如果接收到数据
89 4 {
90 5 if(rcvdata==MACHINECOMM_RET)
91 5 {
92 6 LampComm=TRUE;
93 6 delay(DELAY_VALUE);
94 6 LampComm=FALSE;
95 6 } //指示灯闪烁
96 5 EvRcv=FALSE;
97 5 break; //退出等待
98 5 }
99 4 }
100 3
101 3 }
102 2 SelectComm1=0;
103 2 SelectComm2=0;
104 2 SelectComm3=0;
105 2 SelectComm4=0;
106 2 SelectComm5=0;
107 2 SelectComm6=0; //再次不选通所有的从机
108 2 }
109 1 }
110
111 void initial() //初始化子程序
112 {
113 1 IP=0x10; //定义串口为高优先级中断
114 1 IE=0x97; //允许串口、中断0、1、定时器0
115 1 TCON=0x05;
116 1
117 1 TMOD=0x21; //定时器1为自动装入(auto-load)方式
C51 COMPILER V7.09 12_5Z 08/11/2005 18:57:04 PAGE 3
118 1 PCON=0; //SMOD(PCON.7)=1时,波特率翻倍.//smod=1 (晶振为
119 1 //11.0592M时为0)
120 1
121 1 SCON=0xD0; //串行口工作方式 : 9位UART, 波特率可变
122 1 TH1=0xf3;
123 1 TL1=0xf3; //
124 1 PCON=0x80|PCON;
125 1 //SMOD=1; //波特率设置 : 9600 baud(E8--24MHZ)
126 1 //SMOD=0=4.8kbps
127 1 //th1=tl1=fd,smod=0 ,=19.2kbps
128 1 TR1=1; //启动定时器1
129 1 SelectComm1=0;
130 1 SelectComm2=0;
131 1 SelectComm3=0;
132 1 SelectComm4=0;
133 1 SelectComm5=0;
134 1 SelectComm6=0;
135 1 }
136
137 void send(unsigned char *temp,int j)
138 {
139 1 int i=0;
140 1 LampComm=TRUE;
141 1 EA=0;
142 1 for(i=0;i<=j-1;i++) //按发送数据的长度来发送数据
143 1 {
144 2 ACC=*(temp+i);
145 2 TB8=P;
146 2 SBUF=ACC; //发送数据
147 2 while(TI==0); //发送数据完毕时,TI会自动置高
148 2 TI=0; //发送数据完毕,将TI清零,准备下一次发送
149 2 }
150 1 EA=1;
151 1 LampComm=FALSE;
152 1 }
153
154 void Rcv_INT(void) interrupt 1
155 //串口中断优先级为1
156 {
157 1 LampComm=TRUE;
158 1 if(RI) //如果收到数据则进行下面的操作
159 1 {
160 2 ACC=SBUF; //将串行通信的缓存中的数据存入寄存器A
161 2 if(P==RB8)
162 2 {
163 3 rcvdata=ACC; //将寄存器A中的数据存入变量rcvdata
164 3 EvRcv=TRUE; //将已经接收到数据的标志位置高
165 3 }
166 2 RI=0; //RI清零
167 2 }
168 1 LampComm=FALSE;
169 1 }
170
171 //延时子程序
172 void delay(int i)
173 {
174 1 int j=0;
175 1 i=i*DELAY_VALUE;
176 1 while (j<i)j++;
177 1 }
178
C51 COMPILER V7.09 12_5Z 08/11/2005 18:57:04 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 292 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 7
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 + -