首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

串口通信驱动程序

串口通信驱动程序

  .软件设计

/**************************************************************************

*程序名称:51单片机串口调试

*程序功能:单片机通过串口和上位机的串口调试软件进行数据交换

*开发工具:WSF-51DB开发板

* MCU型号:AT89S52-24PU

*时钟频率:11.0592MHZ

*程序作者:吴师傅

*版权说明:吴师傅版权所有。转载请注明来源和作者。

**************************************************************************/

#include<reg52.h>

//串口初始化:

void IniSerialPort(void)

{

      TMOD=0X20; //定时器1工作在方式2

      TH1=0xfd;

//置定时器初值,波特率9600/0xfd,4800/0xfa;2400/0xf4;19200/0xfd,PCON=0x80;

      TL1=0xfd;//注意:要用11.0592MHZ晶振

      //EA=1; //总中断打开,采用查询法时不用打开中断

      //ES=1; //串口中断开关,采用查询法时不用打开中断

      TR1=1; //定时器1打开            

      REN=1;      //串口为工作方式1,允许接收数据

      SM0=0;

      SM1=1;

}



//串口查询法接收一个字节:

unsigned char ReceiveByte(void)

{

     unsigned char rbyte;

     while(!RI); //查询接收标志位,是否有数据到达缓冲区

     RI=0; //清零接收标志位

     rbyte=SBUF; //从缓冲区读取数据

     return rbyte;

}



//串口发送一个字节:

void SendByte(unsigned char sbyte)

{

     SBUF=sbyte; //发送数据

     while(!TI); //等待发送完成

     TI=0; //清零发送标志位

}



//串口发送一个字符串:

void SendString(unsigned char *pstr) //定义指针

{

     while(*pstr!='\0') //字符串是否发完

     {

         SendByte(*pstr);//发送字符串数据

         pstr++; //指向下一个字符

     }

}



//串口中断函数:

void SerialPortInte(void) interrupt 4 //采用串口中断法收发数据

{

     unsigned char rbyte;

     RI=0; //清零接收标志位

     rbyte=SBUF;//读取缓冲区的数据

     P2=rbyte; //把数据送到P2口显示

}



//主函数:

int main(void)

{

     unsigned char rdata;

     IniSerialPort(); //初始化串口              

     while(1)

     {

             rdata=ReceiveByte();//采用查询法接收数据

             if(rdata==0x55) SendString("How do you do!Can I help you?");

//如果收到0x55,就发送字符串给上位机

             else SendByte(rdata);//如果不是0x55,就把数据发回去

     }

     return 0;

}
返回列表