普中单片机–串口通信(2)

通过串口助手发送数据 点亮LED

软件部分

#include <reg52.h>
#define jingzhen 12000000UL /*使用12.0M晶体*/	 //
#define botelv 4800UL /*波特率定义为4800*/
 
typedef unsigned char uchar;
typedef unsigned int uint;

uchar buf;

sbit beep=P1^5;

void main(void) 
{
		 EA=0; //暂时关闭中断
		 TMOD&=0x0F;  //定时器1模式控制在高4位
		 TMOD|=0x20;    //定时器1工作在模式2,自动重装模式
		 SCON=0x50;     //串口工作在模式1
		 TH1=256-jingzhen/(botelv*12*16);  //计算定时器重装值
		 TL1=256-jingzhen/(botelv*12*16);
		 PCON|=0x80;    //串口波特率加倍
		 ES=1;         //串行中断允许
		 TR1=1;        //启动定时器1
		 REN=1;        //允许接收 
		 EA=1;         //允许中断
    
	  while(1);        
}
/********************************************************* 串行中断服务函数 *********************************************************/
void  serial() interrupt 4 
{
   ES = 0;                //关闭串行中断
   RI = 0;                //清除串行接受标志位
   buf = SBUF;            //从串口缓冲区取得数据
  switch(buf)
   {
      case 0x31:  P2=0xfe;beep=1;break;  //接受到1,第一个LED亮 
      case 0x32:  P2=0xfd;beep=1;break;  //接受到2,第二个LED亮 
      case 0x33:  P2=0xfb;beep=1;break;  //接受到3,第三个LED亮 
      case 0x34:  P2=0xf7;beep=1;break;  //接受到4,第四个LED亮 
      case 0x35:  P2=0xef;beep=1;break;  //接受到5,第五个LED亮 
      case 0x36:  P2=0xdf;beep=1;break;  //接受到5,第六个LED亮 
      case 0x37:  P2=0xbf;beep=1;break;  //接受到5,第七个LED亮
	    case 0x38:  P2=0x7f;beep=1;break;  //接受到5,第八个LED亮
	    default:    beep=0;P2=0xff;break;  //接受到其它数据,蜂鸣器响 
   }
   ES = 1;    //允许串口中断
}

参考资料

  1. 串口通信https://blog.csdn.net/weixin_43599390/article/details/105206530
  2. 串口通信基本原理(超基础、详细版) https://blog.csdn.net/qq_38410730/article/details/79887200