zoukankan      html  css  js  c++  java
  • 实际操作PC端串口调试助手软件与实际51单片机相互通信

    一、实际操作PC端串口调试助手软件与实际51单片机相互通信原理

    51单片机的TXD(发送数据)和RXD(接收数据)先分别与USB转TTL的RXD(接收数据)和TXD(发送数据)交叉对应连接来相互发送和接收数据,USB转TTL再通过激活的串口与PC端串口调试助手软件连接,从而实现相互通信。 

    二、实际操作PC端串口调试助手软件与实际51单片机相互通信原理

    三、USB转TTL串口与实际51单片机相互通信接线

    四、烧写PC端串口调试助手软件与实际51单片机相互通信的单片机C语言程序

    #include <reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    uchar flag,a,i,j;
    uchar code table0[]="I get ";
    uchar code table1[]="
    ";//回车换行
      void String_Timer2_init()//串口定时器初始化函数
    {
       TMOD=0x20;//0010 0000定时器工作方式为方式2,8位自动重装。
       TH1=0xfd;//初始化计数器高8位:1111 1101
       TL1=0xfd;//初始化计数器低8位
       TR1=1;//启动定时器1
       SM0=0;//设定串口工作方式为方式1(10位异步通信)
       SM1=1;//设定串口工作方式
       REN=1;//打开串口中断接收允许
       EA=1;//打开全局中断
       ES=1;//打开串口中断允许位
      }
      void main()
    {
       String_Timer2_init();//串口定时器初始化函数
       while(1)//固定循环
     {
        if(flag==1)//判断检测发送数据标志位变量flag是否为1,若为1则运行以下单片机发送数据缓存寄存器给PC端串口调试助手发送数据。
      {
         ES=0;//关闭串口中断允许位,阻止进入串口中断服务程序。为什么要设置ES=0?由于接下来单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束后,TI(即串口发送中断标志位)=1,若ES不设置为0,在TI(即串口发送中断标志位)=1时,会进入串口中断服务程序执行flag=1,又得回来再次判断if(flag==1),从而无法运行下面的程序。          
         for(i=0;i<6;i++)//循环发送数据个数
       {
          SBUF=table0[i];//将table0数组中的数据存入单片机发送数据缓存寄存器
          while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。
          TI=0;//TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据。
         }
         SBUF=a;//表示单片机接收数据缓存寄存器把从串口中断服务程序获取的某数据(用数值变量a表示)赋给单片机发送数据缓存寄存器。为什么?由于串口定时器初始化函数中REN(串口中断接收允许)=1与ES(串口中断允许位)=1被初始化后,就可以进入串口中断服务程序获取PC端串口调试助手给单片机发送某数据,然后单片机接收数据缓存寄存器接收PC端串口调试助手发来的某数据。       
         while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。
         TI=0; //TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据。
         for(j=0;j<3;j++)//循环发送数据个数
       {
          SBUF=table1[j];//将table1数组中的数据存入单片机发送数据缓存寄存器
          while(!TI);//判断串口发送中断标志位是否为1,若为1则单片机发送数据缓存寄存器给PC端串口调试助手发送数据结束。为什么在此编写while(!TI)?由于需要把单片机发送数据缓存寄存器保存的数据发送给PC端串口调试助手。
          TI=0;//TI(即串口发送中断标志位)=0,表示单片机发送数据缓存寄存器可重新给PC端串口调试助手发送数据。
         }
         ES=1;//打开串口中断允许位,允许进入串口中断服务程序。
         flag=0;//判断检测发送数据标志位变量flag是否为0,若为0则跳出运行单片机发送数据缓存寄存器给PC端串口调试助手发送数据。
       } 
      }
     }
      void string() interrupt 4//串口中断服务程序(函数)
    {
       RI=0;//表示单片机接收数据缓存寄存器可重新接收PC端串口调试助手发送数据。
       a=SBUF;//表示PC端串口调试助手给单片机接收数据缓存寄存器发送某数据,然后单片机接收数据缓存寄存器接收PC端串口调试助手发来的某数据,并赋给数值变量a。
       flag=1;//置检测发送数据标志位变量flag为1,运行单片机发送数据缓存寄存器给PC端串口调试助手发送数据。
      }

    五、USB转TTL串口与实际51单片机相互通信接线后再与电脑连接

    六、PC端串口调试助手软件操作(有两种PC端串口调试助手软件

    1、第一种PC端串口调试助手软件操作

    (1)、下载PC端串口调试助手软件,安装完成后的图标,如下所示。

    (2)、双击打开PC端串口调试助手软件图标,弹出以下界面。

    (3)、USB转TTL串口与实际51单片机相互通信接线后再与电脑连接后,右键点击电脑上的计算机,在弹出列表中选中属性,会弹出一个关于电脑控制面板的信息界面,点击左上边设备管理器,弹出设备管理器界面,找到端口项点开,出现新增一个通信串口:COM3。

    (4)、在PC端串口调试助手软件界面串口处将通信串口COM1改为通信串口COM3,在波特率处将4800改为9600,点击“打开串口”。

    (5)、在PC端串口调试助手软件界面点击“打开串口”弹出的界面

    七、PC端串口调试助手软件与实际51单片机相互通信。

    2、第二种PC端串口调试助手软件操作

    (1)、下载PC端串口调试助手软件,安装完成后的图标,如下所示。

    (2)、双击打开PC端串口调试助手软件图标,弹出以下界面。

    (3)、USB转TTL串口与实际51单片机相互通信接线后再与电脑连接后,右键点击电脑上的计算机,在弹出列表中选中属性,会弹出一个关于电脑控制面板的信息界面,点击左上边设备管理器,弹出设备管理器界面,找到端口项点开,出现新增一个通信串口:COM3。

    (4)、在PC端串口调试助手软件界面串口处将通信串口COM1改为通信串口COM3,选择串口助手项,在串口处改为COM3,在波特率处将4800改为9600,点击“打开串口”。

    (5)、在PC端串口调试助手软件串口助手项界面的接收缓冲区和发送缓冲区分别选中文本模式

    (6)、在PC端串口调试助手软件界面点击“打开串口”弹出的界面

    七、PC端串口调试助手软件与实际51单片机相互通信。

  • 相关阅读:
    记录几个IDEA插件使用方式
    constructor()方法
    SQL笔记
    修改hosts的方式fq
    正则表达式学习
    android架构下各层的分工
    【转】android的mm命令
    虚拟存储器
    xcode 7种使用coredata遇到 Class not found, using default NSManagedObject instead.问题
    AppStore上架规则
  • 原文地址:https://www.cnblogs.com/AChenWeiqiangA/p/13274841.html
Copyright © 2011-2022 走看看