📄 11.2.lst
字号:
C51 COMPILER V6.20c 11_2 09/02/2001 15:07:56 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE 11_2
OBJECT MODULE PLACED IN 11.2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 11.2.c DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define BN 16 //传送一次的字节数
4
5 uchar master(uchar addrs,uchar comnd);
6 uchar SLAVE=0x00; //从机地址
7 uchar idata rdata[16];
8 uchar idata tdata[16]={"abcdefghijklmnop"};
9 void main(void)
10 {
11 1 uchar i;
12 1 for(i=0;i<10;i++)
13 1 TMOD=0x20; //定时器T1定义为模式2
14 1 TL1=0xfd;TH1=0xfd; //置初值
15 1 PCON=0x00;
16 1 TR1=1;
17 1 SCON=0xD0; //设置串行口控制字,方式3,允许接收
18 1 master(SLAVE,0x01);
19 1 master(SLAVE,0x02);
20 1 SLAVE++;
21 1 }
22
23 void error(void)
24 {
25 1 SBUF=0xFF; //发给从机数据出错标志
26 1 while(TI!=1); //等待发送完
27 1 TI=0;
28 1 }
29
30 uchar master(uchar addrs,uchar comnd)
31 { uchar a,i,p;
32 1 while(1)
33 1 {
34 2 SBUF=SLAVE; //发呼叫地址
35 2 while(TI!=1); //等待发送完
36 2 TI=0;
37 2 while(RI!=1); //等待从机应答
38 2 RI=0;
39 2 if(SBUF!=addrs)
40 2 error(); //若地址出错,发出错标志,从机复位
41 2 else{
42 3 TB8=0; //清地址标志位,准备接收数据
43 3 SBUF=comnd; //发命令帧
44 3 while(TI!=1);TI=0;
45 3 while(RI!=1);RI=0;
46 3 a=SBUF; //接收从机的返回地址帧
47 3 if((a&0x80)==0x80){TB8=1;error();} //若主机命令非法,发复位信号给从机
48 3 else
49 3 {
50 4 if(comnd==0x01) //主机发送的命令是请求从机接收数据
51 4 {if((a&0x01)==0x01) //从机准备接收就绪
52 5 {do{
53 7 p=0; //清校验和
54 7 for(i=0;i<BN;i++)
55 7 {SBUF=tdata[i]; //发送数据
C51 COMPILER V6.20c 11_2 09/02/2001 15:07:56 PAGE 2
56 8 p=p+tdata; //计算校验和
57 8 while(TI!=1);TI=0;
58 8 }
59 7 SBUF=p; //发送校验和给从机
60 7 while(TI!=1);TI=0;
61 7 while(RI!=1);RI=0;
62 7 }while(SBUF!=0); //从机接收不正确,主机重新发送
63 6 TB8=1; //重置地址标志位
64 6 return(0);
65 6 }
66 5 }
67 4 else{
68 5 if(comnd==0x02) //主机发送的是接收命令,从机发送数据
69 5 {if((a&0x02)==0x02) //从机准备发送就绪
70 6 {while(1)
71 7 {p=0;
72 8 for(i=0;i<BN;i++)
73 8 {while(RI!=1);RI=0;
74 9 rdata[i]=SBUF; //主机接收数据
75 9 p+=rdata[i];
76 9 }
77 8 while(RI==0);RI=0;
78 8 if(SBUF==p)
79 8 {
80 9 SBUF=0x00; //校验和相同,发0x00给从机
81 9 while(TI!=1);TI=0;
82 9 }
83 8 else
84 8 {SBUF=0x0F; //校验和不同,发0x0F给从机
85 9 while(TI!=1);TI=0;
86 9 }
87 8 }
88 7 TB8=1; //重置地址标志位
89 7 return(0);
90 7 }
91 6 }
92 5 }
93 4 }
94 3 }
95 2 }
96 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 215 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = 32 ----
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 + -