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

来源:互联网 发布:同花顺mac版level2 编辑:程序博客网 时间:2024/05/01 18:31
51单片机与PC串口通信程序及硬件电路图
2008年03月19日 星期三 21:35

 

 

#include <reg51.h>
#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++;
    }
}

原创粉丝点击