1 /*2018年8月9日凌晨1点 于福安公寓
2 功能:通过串口调试工具模拟电脑给单片机发送数据,能够接受到数据
3 切记:串口通讯时,晶振一定要匹配为11.0592MHZ ,如果为12MHZ时,
4 就会出现接收到的数据和所发送的数据不同
5 注:当开发板上为12MHZ时,初值就必须要重新计算 当出现乱码的时候,可能是波特率出现问题
6
7 该程序匹配的为:12MHZ、SMOD =1,加倍、波特率为4800,由此的求得初值
8 */
9 #include<reg52.h>
10 unsigned char flag,a;
11 void main()
12 {
13 TMOD=0x20;//定时器1的工作方式2 M1和M0的组合来确定工作方式
14 TH1 =0xf3; //波特率为4800、定时器1的工作方式2、加倍SMOD=1
15 TL1 =0xf3; //重装初值
16 TR1 =1; //启动定时器1
17 PCON =0x80; //设置了SMOD =1,因为默认的是SMOD =0 ,所以必须通过PCON寄存器设定
18 SM0 =0; //在SCON寄存器中
19 SM1 =1;
20 REN =1;
21 EA=1;
22 ES =1;
23
24
25 while(1)
26 {
27 // if(RI==1)//if后面不能加;如果加封号,就会为空,就会出现逻辑错误,但是编译器检查不出来
28 // {
29 // RI=0;
30 // P2=SBUF;
31 // }
32 if(flag==1)
33 {
34 flag =0;
35 ES =0; //关闭串口中断,否则会进入一个死循环中,因为接收或者发送完成之后都会进入到中断中去
36 SBUF =a; //发送数据
37 while(!TI); //在此等候如果发送完成之后,进行下面的语句
38 TI=0; //发送完成后,软件令TI=0;
39 ES =1; //发送完成后,再打开串口中断
40 // {
41 // ES=0;
42 // flag=0;
43
44 // SBUF='1';//28; //并且此处的SBUF是发送缓冲器
45 // while(!TI);
46 // TI=0;
47
48 // SBUF='2';//28;
49 // while(!TI);
50 // TI=0;
51
52 // SBUF='4';//28;
53 // while(!TI);
54 // TI=0;
55
56 // ES=1;
57 // }
58 }
59 }
60 }
61
62 void ser() interrupt 4
63 {
64 RI =0;
65 P2 =SBUF;
66 a =SBUF;
67 flag =1;
68 }