51单片机串口通信程序.docVIP

  • 3
  • 0
  • 约3.43千字
  • 约 4页
  • 2017-06-07 发布于重庆
  • 举报
51单片机串口通信程序

上位机发送格式 set ”xxxx” xxxx为int 或者char都可以,指令名字大家可以随意扩展 例如 read temp ch ”x” 用来读取某个通道的温度值 下面的程序通过上位机控制接在P1口的8个led,上位机发送 set ” 0” 到 set ”255” 的数据,下位机返回 /************************************************************** * 平台:HJ-3G V6.0 + Keil U4 + STC89C52 * 名称:通过串口向单片机发送数据。 * 晶振:11.0592MHZ ******************************************************************/ #include #include #include #define uchar unsigned char #define uint unsigned int #define UART_BUFFERSIZE 16 uchar sbuf; uchar led_mode 0; uchar buf[6] ; uchar UART0_Buffer[UART_BUFFERSIZE]; uchar UART0_Buffer_Size 0; uchar UART_Input_First 0; uchar UART_Output_First 0; uchar TX0_rdy 1; sbit beep P2^3; bit UART0_recieved; /********************************************************* 串行中断服务函数 *********************************************************/ void serial interrupt 4 ES 0; //关闭串行中断 if RI 1 if UART0_Buffer_Size 0 // If new word is entered UART_Input_First 0; RI 0; // Clear interrupt flag sbuf SBUF; // Read a character from UART if UART0_Buffer_Size UART_BUFFERSIZE UART0_Buffer[UART_Input_First] sbuf; // Store in array UART0_Buffer_Size++; // Update arrays size UART_Input_First++; // Update counter if sbuf // when XML ending tag is recieved UART0_recieved 1; // set recieved bit if TI 1 // Check if transmit flag is set TI 0; // Clear interrupt flag if UART0_Buffer_Size ! 1 // If buffer not empty // If a new word is being output if UART0_Buffer_Size UART_Input_First UART_Output_First 0; SBUF UART0_Buffer[UART_Output_First]; // Transmit UART_Output_First++; // Update counter UART0_Buffer_Size--; // Decrease array size else UART0_Buffer_Size 0; // Set the array size to 0 TX0_rdy 1; // Indicate transmission complete /* switch buf case 0x31: P1 0xfe;beep 1;break; //接受到1,第一个LED亮 case 0x32: P1 0xfd;beep 1;break; //接受到2,第二个LED亮 case 0x33: P1 0xfb;beep 1;break; //接受到3,第三个LED亮 case 0x34: P1 0xf7;beep 1;break; //接受到4,第四个LED亮 case 0x35

文档评论(0)

1亿VIP精品文档

相关文档