⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rs-232串口c程序1.txt

📁 C8051F020串口与计算机通信的编程
💻 TXT
字号:
RS-232串口c程序-单片机-全网电子打印本文 关闭窗口 
      RS-232串口c程序
      作者:未知 文章来源:网络 点击数:445 更新时间:2006-6-27 


      //-----------------------函数声明,变量定义--------------------------------------------------------
      #include <reg51.h>
      #define COUNT 10                // 定义接收缓冲区大小 
      unsigned char buffer[COUNT]; //定义接收缓冲区
      unsigned char point;            //定义接收数据个数指示变量
      void UART_init();               //串口初始化函数
      void COM_send(void);            //串口接收函数
      unsigned char CLU_checkdata(void);//计算校验位函数
      //--------------------------------------------------------------------------------------------------
      // 函数名称: UART_init()串口初始化函数
      // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
      //            串口接收中断允许,发送中断禁止
      //-------------------------------------------------------
      
     -------------------------------------------
      void UART_init()
      {
                           //初始化串行口和波特率发生器 
      SCON =0x58;          //选择串口工作方式,打开接收允许
      TMOD =0x21;          //定时器1工作在方式2,定时器0工作在方式1
      TH1 =0xfd;           //实现波特率9600(系统时钟11.0592MHZ)
      TR1 =1;              //启动定时器T1
      ET1 =0; 
      ES=1;                //允许串行口中断
      PS=1;                //设计串行口中断优先级
      EA =1;               //单片机中断允许
      }

      ------------------------------------
      // 函数名称: com_interrup()串口接收中断处理函数
      // 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
      //--------------------------------------------------------------------------------------------------
      com_interrupt(void) interrupt 4 using 3
      {
        unsigned char RECEIVR_buffer;
        if(RI)                                //处理接收中断
        {
      RI=0;                                //清除中断标志位
        RECEIVR_buffer=SBUF;            //接收串口数据
      if(point==0)       //如果还没有接收到起始位
              {
              if(
      RECEIVR_buffer=='S')       //判断是否起始标志位
                   point++;     //是准备接收下一位
        else
             point=0;     //不是,继续等待起始位
         } 
      else if(point>0&&point<10)     //判断是否接收够十位数据
        buffer[point++]=RECEIVR_buffer;  //不够,把接收到的数据放入接收缓存区
      else point=0;                   //缓冲区已满,清除缓存区内数据重新接收
      }
      If(TI)                                  //处理发送中断
       {
      TI=0;
      }
      }
      //--------------------------------------------------------------------------------------------------
      // 函数名称: COM_send()串口发送函数
      //

      函数功能: 把数据缓冲区的十位数据发送出去
      //--------------------------------------------------------------------------------------------------
      void COM_send(void)
      {
      for(point=0;point<=10,TI=1;point++)      //连续发送十位数据
                                            //把缓存区的数据都发送到串口
        {
         SBUF=buffer[point];
         TI=0;
         }
      }
      //--------------------------------------------------------------------------------------------------
      // 函数名称: CLU_checkdata()计算校验位函数
      // 输入变量: 无
      // 输出变量: checkdata,包括起始位在内的前九位数据的校验和
      // 函数功能: 计算校验和
      //--------------------------------------------------------------------------------------------------


      > unsigned char checkdata=0;
      for(point=0;point<9,TI=1;point++)
        {
         checkdata=checkdata|buffer[point];
         }
         return(checkdata);
       }
      //--------------------------------------------------------------------------------------------------
      // 函数名称: 主函数
      // 函数功能: 调度个子函数,完成通信过程
      //--------------------------------------------------------------------------------------------------
       void main(void)
       {
       unsigned char checkdata;
       do
       {
        UART_init();       //初始化串口
        if(point==10)       //判断数据是否接收完成
        checkdata=CLU_checkdata;    //调用求校验和函数
        if(checkdata==buffer[9])        //判断校验和是否正确
        COM_send();
                          //正确则调用发送程序
        point=0;
        }
        while(1);
       }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -