SUBF的两次使用
题目
以2400bps从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过255时归零。
分析
题目不难,只需要提醒一点就是关于两面加序号,就是,多次使用SUBF,只要使用就可以吧值赋给SUBF,然后TI清0,每次使用SUBF,就需要清一次,其他就没了,
代码
1 # include <reg52.h>
2 # define uchar unsigned char
3 # define uint unsigned int
4 uchar flag,i;
5 uchar a;
6 void inti();
7 void main()
8 {
9 i = 0;
10 inti();
11 while(1)
12 {
13 if(flag == 1)
14 {
15 flag = 0;
16 ES = 0;
17 i++;
18 if(i == 255)
19 i = 0;
20 SBUF = i;
21 while(!TI);
22 TI = 0;
23 SBUF = a;//只有一个字节一个数,因为自己的数据类型
24 while(!TI);
25 TI = 0;
26 ES = 1;
27 }
28 }
29 }
30 void inti()
31 {
32 TMOD = 0x20;
33 TH1 = 0xf4;
34 TL1 = 0xf4;
35 SM0 = 0;
36 SM1 = 1;
37 REN = 1;
38 EA = 1;
39 ES = 1;
40 TR1 = 1;
41 }
42 void se() interrupt 4
43 {
44 RI = 0;
45 flag = 1;
46 a = SBUF;
2 # define uchar unsigned char
3 # define uint unsigned int
4 uchar flag,i;
5 uchar a;
6 void inti();
7 void main()
8 {
9 i = 0;
10 inti();
11 while(1)
12 {
13 if(flag == 1)
14 {
15 flag = 0;
16 ES = 0;
17 i++;
18 if(i == 255)
19 i = 0;
20 SBUF = i;
21 while(!TI);
22 TI = 0;
23 SBUF = a;//只有一个字节一个数,因为自己的数据类型
24 while(!TI);
25 TI = 0;
26 ES = 1;
27 }
28 }
29 }
30 void inti()
31 {
32 TMOD = 0x20;
33 TH1 = 0xf4;
34 TL1 = 0xf4;
35 SM0 = 0;
36 SM1 = 1;
37 REN = 1;
38 EA = 1;
39 ES = 1;
40 TR1 = 1;
41 }
42 void se() interrupt 4
43 {
44 RI = 0;
45 flag = 1;
46 a = SBUF;
47 }
浙公网安备 33010602011771号