zoukankan      html  css  js  c++  java
  • 六、单片机学习——串口通讯实验

    实验目的:学会用单片机与计算机之间通过串口通讯。
    实验模块:核心板;
    实验内容:由串口调试助手以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);  //将读到的数从串口发出
        }
     }
    }
  • 相关阅读:
    Java vs Python
    Compiled Language vs Scripting Language
    445. Add Two Numbers II
    213. House Robber II
    198. House Robber
    276. Paint Fence
    77. Combinations
    54. Spiral Matrix
    82. Remove Duplicates from Sorted List II
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/breads/p/12727505.html
Copyright © 2011-2022 走看看