|
单片机串口通信的应用,通过串口,我们的个人电脑和单片机系统进行通信。
个人电脑作为上位机,向下位机单片机系统发送十六进制或者ASCLL码,单片机
系统接收后,用LED显示接收到的数据和向上位机发回原样数据。
程序和原理图见附件。
单片机源程序如下:
- #include "reg52.h" //包函8051 内部资源的定义
- unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
- unsigned char fan;
- int i,j;
- void Delay() //延时程序
- {
- for(i=0; i<100; i++)
- for(j=0; j<100; j++);
- }
- void delays()
- {
- int k;
- for (k=0;k<1200;k++);
- }
- ///////功能:串口初始化,波特率9600,方式1/////////
- void Init_Com(void)
- {
- TMOD = 0x20;
- PCON = 0x00;
- SCON = 0x50;
- TH1 = 0xFd;
- TL1 = 0xFd;
- TR1 = 1;
- }
- /////主程序功能:实现接收数据并把接收到的数据原样发送回去///////
- void main()
- {
- Init_Com();//串口初始化
- while(1)
- {
-
- if ( RI ) //扫描判断是否接收到数据,
- {
- dat = SBUF; //接收数据SBUF赋与dat
- if(dat==0x30) //如果PC发送十六进制00,单片机P1口全亮。
- {P1=0x00;
- Delay(); }
- else if(dat==0x31)
- {P1=0x01;
- Delay();}
- else if(dat==0x32)
- {P1=0x03;
- Delay();}
- else if(dat==0x33)
- {P1=0x07;
- Delay(); }
- else if(dat==0x34)
- {P1=0x0f;
- Delay(); }
- else if(dat==0x35)
- {P1=0x1f;
- Delay();}
- else if(dat==0x06)
- {P1=0x3f;
- Delay(); }
- else if(dat==0x07)
- {P1=0x7f;
- Delay();}
- else if(dat==0x08)
- {P1=0xff;
- Delay(); }
- else if(!(P2&0x01))
- { delays();
- while(!(P2&0x01));
- fan = 0x36;}
- else if(!(P2&0x02))
- { delays();
- while(!(P2&0x02));
- fan = 0x37;}
- else if(!(P2&0x04))
- { delays();
- while(!(P2&0x04));
- fan = 0x38;}
- else if(!(P2&0x08))
- { delays();
- RI=0; //RI 清零。
- SBUF =dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)
- }
- }
- }
复制代码 |
|