?? 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 + -