📄 slavedevice.lst
字号:
C51 COMPILER V8.08 SLAVEDEVICE 08/31/2008 15:11:53 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE SLAVEDEVICE
OBJECT MODULE PLACED IN SlaveDevice.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE SlaveDevice.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uchar unsigned char
3 #define SLAVE 0x00
4 #define BN 16
5
6 uchar idata SendData[16];
7 uchar idata ReceiveData[16];
8
9 void main(void)
10 {
11 1 SCON = 0x70; //设置串行口: 方式 1, 8位UART, 允许接收
12 1 TMOD |= 0x20; //设置定时器T1, 方式 2, 8位自动重装
13 1 PCON =0x80; //设置SMOD=1
14 1 TL1 =0xF4; //波特率4800bit/s,初值
15 1 TH1 =0xF4;
16 1 TR1 = 1; //启动定时器T1
17 1 ES =1;
18 1 EA =1; //开串行口中断
19 1
20 1 while(1) //主循环
21 1 {
22 2 }
23 1 }
24
25 void slave(void) interrupt 4 using 1 //中断服务例程
26 {
27 1 uchar p,i;
28 1 uchar a;
29 1 bit SendBit; //准备发送标志
30 1 bit ReceiveBit; //准备接收标志
31 1
32 1 RI=0; //关串行口中断
33 1 ES=0;
34 1 if(SBUF!=SLAVE) //非本机地址
35 1 {
36 2 ES=1;
37 2 goto Exit;
38 2 }
39 1 SM2=0; //取消监听状态
40 1 SBUF=SLAVE; //发回从机地址
41 1 while(TI!=1);
42 1 TI=0;
43 1 while(RI!=1);
44 1 RI=0;
45 1 if(RB8==1) //地址不符,从机复位
46 1 {
47 2 SM2=1;
48 2 ES=1;
49 2 goto Exit;
50 2 }
51 1 a=SBUF; //接收命令
52 1 if(a==1) //从机接收主机的数据
53 1 {
54 2 if(ReceiveBit==1)
55 2 SBUF=0x01; //接收准备好,发回0x01
C51 COMPILER V8.08 SLAVEDEVICE 08/31/2008 15:11:53 PAGE 2
56 2 else
57 2 SBUF=0x00;
58 2 while(TI!=1);
59 2 TI=0;
60 2 while(RI!=1);
61 2 RI=0;
62 2 if(RB8==1)
63 2 {
64 3 SM2=1;
65 3 ES=1;
66 3 goto Exit;
67 3 }
68 2 //开始接收数据
69 2 ReceiveBit=0;
70 2 while(1)
71 2 {
72 3 p=0; //初始化校验和为0
73 3 for(i=0;i<BN;i++)
74 3 {
75 4 while(RI!=1);RI=0;
76 4 SendData[i]=SBUF; //接收数据
77 4 p+=ReceiveData[i];
78 4 }
79 3 while(RI!=1);
80 3 RI=0;
81 3 if(SBUF==p)
82 3 {
83 4 SBUF=0x00; //校验和相同,返回00H
84 4 break;
85 4 }
86 3 else
87 3 {
88 4 SBUF=0xEE; //返回EEH,重新接收
89 4 while(TI!=1);
90 4 TI=0;
91 4 }
92 3 }
93 2 SM2=1;
94 2 ES=1;
95 2 ReceiveBit=1; //准备接收标志
96 2 }
97 1 else if(a==0x02) //从机向主机发送数据
98 1 {
99 2 if(SendBit ==1)
100 2 SBUF=0x02; //发送准备好
101 2 else
102 2 SBUF=0x00;
103 2 while(TI!=1);
104 2 TI=0;
105 2 while(RI!=1);
106 2 RI=0;
107 2 if(RB8==1)
108 2 {
109 3 SM2=1;
110 3 ES=1;
111 3 goto Exit;
112 3 }
113 2 //开始发送数据
114 2 SendBit =0;
115 2 do
116 2 {
117 3 p=0; //初始校验和为0
C51 COMPILER V8.08 SLAVEDEVICE 08/31/2008 15:11:53 PAGE 3
118 3 for(i=0;i<BN;i++)
119 3 {
120 4 SBUF=SendData[i]; //发送数据
121 4 p+=SendData[i];
122 4 while(TI!=1);
123 4 TI=0;
124 4 }
125 3 SBUF=p; //发送校验和
126 3 while(TI!=1);
127 3 TI=0;
128 3 while(RI!=1);
129 3 RI=0;
130 3 }while(SBUF!=0); //主机接收不正确,重新发送
131 2 SM2=1;
132 2 ES=1;
133 2 SendBit =1; //准备发送标志
134 2
135 2 }
136 1 else //非法命令
137 1 {
138 2 SBUF=0x80;
139 2 while(TI!=1);
140 2 TI=0;
141 2 SM2=1;
142 2 ES=1; //恢复监听
143 2 }
144 1 Exit:;
145 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 257 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 32 ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -