📄 masterdevice.lst
字号:
C51 COMPILER V8.08 MASTERDEVICE 08/31/2008 14:58:40 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MASTERDEVICE
OBJECT MODULE PLACED IN MasterDevice.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE MasterDevice.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uchar unsigned char
3 #define BN 16 //传送一次的字节数
4
5 uchar SLAVE=0x00; //从机地址
6 uchar idata ReceiveData[16];
7 uchar idata SendData[16]={"0123456789abcdef"};
8
9 void error(void) ; //出错子函数
10 void SendDataFun(void) ; //发送数据子函数
11 void ReceiveDataFun(); //接收数据子函数
12
13 void main(void) //主函数
14 {
15 1 SCON = 0x50; //设置串行口: 方式 1, 8位UART, 允许接收
16 1 TMOD |= 0x20; //设置定时器T1, 方式 2, 8位自动重装
17 1 PCON =0x80; //设置SMOD=1
18 1 TL1 =0xF4; //波特率4800bit/s,初值
19 1 TH1 =0xF4;
20 1 TR1 = 1; //启动定时器T1
21 1
22 1 SendDataFun(); //发送数据
23 1 ReceiveDataFun(); //接收数据
24 1 }
25
26 void error(void) //出错子函数
27 {
28 1 SBUF=0xEE; //发给出错标志
29 1 while(TI!=1); //等待发送完
30 1 TI=0;
31 1 }
32
33 void SendDataFun(void) //发送数据子函数
34 {
35 1 uchar a,i,p,comond,addrs;
36 1 comond=0x01; //发送数据指令
37 1 addrs=SLAVE; //从机地址
38 1 SBUF=addrs; //发送呼叫地址
39 1 while(TI!=1); //等待发送完
40 1 TI=0;
41 1 while(RI!=1); //等待从机应答
42 1 RI=0;
43 1 if(SBUF!=addrs)
44 1 error(); //若地址出错,发出错标志,从机复位
45 1 else
46 1 {
47 2 TB8=0; //清地址标志位,准备接收数据
48 2 SBUF=comond; //发送数据指令
49 2 while(TI!=1);
50 2 TI=0;
51 2 while(RI!=1);
52 2 RI=0;
53 2 a=SBUF; //接收从机返回的地址帧
54 2 if((a&0x80)==0x80) //若主机命令非法,发复位信号给从机
55 2 {
C51 COMPILER V8.08 MASTERDEVICE 08/31/2008 14:58:40 PAGE 2
56 3 TB8=1;
57 3 error();
58 3 }
59 2 else
60 2 {
61 3 if((a&0x01)==0x01) //从机准备接收就绪
62 3 {
63 4 do
64 4 {
65 5 p=0; //清校验和
66 5 for(i=0;i<BN;i++)
67 5 {
68 6 SBUF=SendData[i]; //发送数据
69 6 p=p+SendData; //计算校验和
70 6 while(TI!=1);
71 6 TI=0;
72 6 }
73 5 SBUF=p; //发送校验和给从机
74 5 while(TI!=1);
75 5 TI=0;
76 5 while(RI!=1);
77 5 RI=0;
78 5 }while(SBUF!=0); //从机接收不正确,主机重新发送
79 4 TB8=1; //重置地址标志位
80 4 }
81 3 }
82 2 }
83 1 }
84
85 void ReceiveDataFun() //接收数据子函数
86 {
87 1 uchar a,i,p,comond,addrs;
88 1 comond=0x02; //接收数据指令
89 1 addrs=SLAVE; //从机地址
90 1 SBUF=addrs; //发送呼叫地址
91 1 while(TI!=1); //等待发送完
92 1 TI=0;
93 1 while(RI!=1); //等待从机应答
94 1 RI=0;
95 1 if(SBUF!=addrs)
96 1 error(); //若地址出错,发出错标志,从机复位
97 1 else
98 1 {
99 2 TB8=0; //清地址标志位,准备接收数据
100 2 SBUF=comond; //发送接收数据指令
101 2 while(TI!=1);
102 2 TI=0;
103 2 while(RI!=1);
104 2 RI=0;
105 2 a=SBUF; //接收从机的返回地址帧
106 2 if((a&0x80)==0x80) //若主机命令非法,发复位信号给从机
107 2 {
108 3 TB8=1;
109 3 error();
110 3 }
111 2 else
112 2 {
113 3 if((a&0x02)==0x02) //从机准备发送就绪
114 3 {
115 4 while(1)
116 4 {
117 5 p=0;
C51 COMPILER V8.08 MASTERDEVICE 08/31/2008 14:58:40 PAGE 3
118 5 for(i=0;i<BN;i++)
119 5 {
120 6 while(RI!=1);
121 6 RI=0;
122 6 ReceiveData[i]=SBUF; //主机接收数据
123 6 p+=ReceiveData[i];
124 6 }
125 5 while(RI==0);
126 5 RI=0;
127 5 if(SBUF==p)
128 5 {
129 6 SBUF=0x00; //校验和相同,发0x00给从机
130 6 while(TI!=1);
131 6 TI=0;
132 6 }
133 5 else
134 5 {
135 6 SBUF=0x0F; //校验和不同,发0x0F给从机
136 6 while(TI!=1);
137 6 TI=0;
138 6 }
139 5 }
140 4 TB8=1; //重置地址标志位
141 4 }
142 3 }
143 2 }
144 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 234 ----
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 + -