51单片机与PC串口通信程序及硬件电路图

出处:电子市场时间:2016-07-15

#include 
#define    BUFFERLEGTH 10
//-----------------------------------------------------------------
void UART_init();                //串口初始化函数
void COM_send(void);             //串口发送函数
char str[20];
char j;
//-------------------------------------------------------------------
void main(void)
{
unsigned char i;
UART_init();
j=0;        //初始化串口
for(i = 0;i < 10 ;i++)
{
   COM_send();        //首先发送数据作为测试用

};

while(1);
}


//-------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//             串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
                      //初始化串行口和波特率发生器
SCON =0x50;           //选择串口工作方式1,打开接收允许
TMOD =0x20;           //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfA;            //实现波特率9600(系统时钟11.0592MHZ)
PCON = 0x80;
TR1 =1;               //启动定时器T1
ET1 =0;
ES=1;                 //允许串行口中断
PS=1;                 //设计串行口中断优先级
EA =1;                //单片机中断允许
}
//------------------------------------------------------------
void COM_send(void)
{
    unsigned char point = 0;
    for(point=0;str[point]!='\0';point++)       //连续发送二十位数据                                      //把缓存区的数据都发送到串口
   {
    SBUF=str[point];
    while(!TI);
    TI=0;
//str[point]='\0';
    }

}
//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: com_interrup()串口接收中断处理函数
// 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
//--------------------------------------------------------------------------------------------------
void com_interrupt(void) interrupt 4 using 3
{
   unsigned char RECEIVR_buffer;
   bit flag=1;
   if(RI)                                 //处理接收中断
   {
      RI=0;                                 //清除中断标志位
      RECEIVR_buffer=SBUF;             //接收串口数据
      str[j]=SBUF;
      if (RECEIVR_buffer == '$')
      { ES=0; 
      str[j]='\0';
         SCON =0x40;     //接收不允许
         COM_send();    //发送数据
   ES=1; 
   j=0; 
   flag=0;
         SCON=0x50;     //接收允许
      }
   if(flag)
   j++;
    }
}

上一篇:H桥驱动电路原理图及使能控制和方向逻辑
下一篇:几款经典简单的声卡话筒功放电路分析

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关电路图