• 六、单片机学习——串口通讯实验


    实验目的:学会用单片机与计算机之间通过串口通讯。
    实验模块:核心板;
    实验内容:由串口调试助手以16进制向单片机发送一数据,如01,如果单片机接收到数据将会原样返回给计算机,并且显示在串口调试助手的接收框内。硬件电路图:在应用单片机的串口和 PC 进行串行通信时,需要进行两种不同的电平之间的转换,需要应用MAX232芯片将从0V和 5V的TTL电平转换到3V~15V或-3V~-15V的 RS-232C 电平。串口通信的数据传输过程如下:MAX232 的 10 脚 T2IN 接单片机 TXD 端 P3.1,TTL 电平从单片机的 TXD 端发出,经过 MAX232 转换为RS-232 电平后从 MAX232 的 14 脚 T1OUT 发出,再连接到串口座的第 2 脚 TXD,至此计算机端接收到数据。PC 机发送数据时从 PC 机串口座上的第 3 脚 RXD 端

                                                                         

     实验代码:

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

    功能描述: 接收PC机发来的数据,并向PC机返回接收到的数据,PC机上使用串口调试助手,波特率1200bps,使用方式1.
    硬件连接:  用2位杜邦线分别将J9_0与J5_R1及J9_1与J5_D1连接(下载完程序后),用串口线将PC和开发板上的串口1连接。
    ***************************************************************************************************/
    #include "reg51.h"       //包含头文件
    #define uchar unsigned char
    #define uint  unsigned int
     
    uchar ch;               //用于存放串口接收到的数据
    bit read_flag= 0 ;      //取数标志位
    //**************************************************************************************************
    //初始化串口
    //**************************************************************************************************
    void init_com( void )
    {
      SCON = 0x50;   // 设定通信方式为方式1,允许接收,相当于REN = 1; SM1 = 1;  
      PCON = 0x00;   //SMOD=0,该语句可去掉
      IE |= 0x90 ;   //打开串口中断, 相当于 EA = 1;ES = 1; 
      //以下4句设置T1
      TMOD = 0x20;   // 定时器1工作于8位自动重载模式, 用于产生波特率
      TH1=0xE6;      //定时器0赋初值,TH1=(256 - (12000000 / (32 * 12 * 1200)))=230;
      TL1=0xE6;      //TL1=(256 - (12000000 / (32 * 12 * 1200)))=230;
      TR1 = 1;       //启动T1
     
    }
    //**************************************************************************************************
    //串口中断函数
    //**************************************************************************************************
    void serial () interrupt 4 using 3
    {
        if (RI)
           { 
            RI = 0 ;       //此步必不可少,因为硬件不能将其置0  
            ch=SBUF;       //从SBUF中取出数据      
            read_flag= 1 ; //就置位取数标志
            }
    }
    //**************************************************************************************************
    //串口发送函数
    //**************************************************************************************************
    void send_char( unsigned char ch1)
             {
                SBUF=ch1;       //将待发数据放到SBUF
                while (TI== 0); //等待TI=1(表示帧发送结束)发送
                TI= 0 ;         //此步必不可少,因为硬件不能将其置0 
              }
    //**************************************************************************************************
    //主函数
    //**************************************************************************************************
    void main(void)
    {
     init_com( ) ;
     while(1)
     {
       /* 
        查询方式实现通信,当系统较小时采取。
        使用该方式必须将下面的中断方式屏蔽,
         IE = 0x00 ;           //关闭所有中断,以防止中断影响
         while(RI == 0);
         RI = 0;
         ch = SBUF;            // 从缓冲区中把接收的字符放入c中
         SBUF = ch;            // 要发送的字符放入缓冲区
         while(TI == 0);
         TI = 0;
      */
    //中断方式实现通信 当系统较大时采取
      if (read_flag)      //如果取数标志已置位,就将读到的数从串口发出
        {
          read_flag= 0 ;  //取数标志清0
          send_char(ch);  //将读到的数从串口发出
        }
     }
    }
  • 相关阅读:
    使用C# lock同时访问共享数据
    将两个DataTable合并成一个DataTable
    嵌套存储过程返回值的调用
    在 Sql Server 中使用 MD5 加密
    用DIV制作即时提示层 防止被select控件遮挡的方法
    操作Cookie公用代码
    JS实现回调例子
    ASP存储过程参数数据类型
    在asp中使用js的encodeURIComponent方法
    Uva 10250 The Other Two Trees
  • 原文地址:https://www.cnblogs.com/breads/p/12727505.html
Copyright © 2020-2023  润新知