串口控制小夜灯

2019-04-15 16:42发布

写了一个简单的电脑上位机和51单片机串口进行通信,功能可以查看进行串口发送和接收数据,并且可以实现单片机系统的开关。
单片机串口接收到数据0x01,单片机IO口输出高电平,继电器打开,用电器工作;
单片机串口接收到数据0x81,单片机IO口输出低电平,继电器关断,用电器停止工作。 上位机图: 这里写图片描述 下位机代码: #include //头文件 #define HEAD 0x00//数据头码 sbit J1 = P2 ^ 3;//控制器接口定义 void DELAY_MS (unsigned int a){//毫秒级延时 unsigned int i; while( a-- != 0){ for(i = 0; i < 600; i++); } } void UART_init (void){//UART串口初始化函数 TMOD = 0x20; //定时器T/C1工作方式2 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收) TH1 = 0x64; //定时器初值高8位设置 TL1 = 0x64; //定时器初值低8位设置 PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400) TR1 = 1; //定时器启动 } void main (void){ unsigned char UART_data1,UART_data2; //定义串口接收数据变量 unsigned int s; // P2=0X0f; DELAY_MS(8000);//延时防止下载时死机 UART_init();//串口初始化(查寻) while(1) { if (RI == 1)//接收中断标志位为1时接受数据头码 { UART_data1 = SBUF; RI = 0; s=0; //判断头码是否正确等待时间过长时跳出。 while(s<2000&&UART_data1==HEAD) { s++; if (RI == 1){//开始接受控制数据 UART_data2 = SBUF;// RI = 0; switch (UART_data2){ case 0x01:P2=0xff;break;//第1路开 case 0x81:P2=0x00;break;//第1路关 default:break; } } } } } }