这个实验的内容是:电脑通过虚拟的COM端口与单片机进行相互通讯(电脑发给单片机,然后单片机又把接收到的信息发给电脑),发送的信息分别为正转、反转、加速、减速、停止,来控制电机做出相应的反应,并在Proteus上仿真。

模拟串口通讯需要用到2个软件,这里是网盘下载链接:
串口助手
提取码:rzqe
虚拟串口驱动
提取码:1172

这个实验有一个重要的问题,就是一定要选对虚拟串口和波特率,要不然就会不能进行通讯或是通讯时出现乱码。COM端口使用要配对,COM1-COM2,COM3-COM4,优先推荐使用COM3-COM4,波特率最好设置低一点,因为我传输时没有校验位,波特率太高的话容易出现乱码,所以我选择的波特率是4800。再就是程序中设置波特率初值,如果你设置了波特率加倍的话,最终波特率要在波特率的初值上乘以2,注意程序设置的波特率与串口助手要一致。

Proteus图:

具体实现方式请看下面的程序:

#include"main.h"// 五条信息的Unicode 码如下
//正转:d5 fd d7 aa
//反转:b7 b4 d7 aa
//加速:bc d3 cb d9
//减速:bc f5 cb d9
//停止:cd a3 d6 b9void main(){UsartInit();  //串口初始化timer0_init();  //定时器初始化while(1){setmotor();   //控制电机状态的函数}
}
#ifndef __MAIN_H__
#define __MAIN_H__#include"setmotor.h"#include"usart.h"#endif
#include"setmotor.h"static unsigned char state=0; //赋0、1、2分别表示电机的三个状态
static unsigned char k=4;  //k值决定电机速度的大小,k值越小电机的速度就越大,k值代表延时的长度
static int i;
unsigned char code zz[]={0x11,0x31,0x21,0x61,0x41,0xc1,0x81,0x91};//正转四相八拍步进电机
unsigned char code fz[]={0x91,0x81,0xc1,0x41,0x61,0x21,0x31,0x11};//反转//电机正转
void motor_zz(){unsigned int j;for(j=0;j<8;j++){P1=zz[j];//每一拍延时一下for(i=0;i<k;i++){unsigned int t;for(t=0;t<3;t++){timer0_init();while(~TF0);  //当定时器溢出时,TF0为1,退出循环TF0=0; //置0后方便下一次溢出提醒          }}}
}//电机反转
void motor_fz(){unsigned int j;for(j=0;j<8;j++){P1=fz[j];for(i=0;i<k;i++){unsigned int t;for(t=0;t<3;t++){timer0_init();while(~TF0);TF0=0;              }}}
}void setmotor(){while(state==0){  //状态0有两种模式分别是正转和反转,也是首次能执行的命令//正转if(com[0]==0xd5&&com[1]==0xfd&&com[2]==0xd7&&com[3]==0xaa){  //正转的Unicode码state=1;  //可以进入状态1com[1]=0x00;  //如果不改变其中一个com[4]的值,后面就不会执行motor_zz()break;  //跳出while循环}//反转if(com[0]==0xb7&&com[1]==0xb4&&com[2]==0xd7&&com[3]==0xaa){state=2;  //可以进入状态2com[1]=0x00;  //如果不改变其中一个com[4]的值,后面就不会执行motor_fz()break;}}//已经正转while(state==1){//电机停止if(com[0]==0xcd&&com[1]==0xa3&&com[2]==0xd6&&com[3]==0xb9){state=0;com[1]=0x00;break;}//电机正转if(com[0]==0xd5&&com[1]==0xfd&&com[2]==0xd7&&com[3]==0xaa){state=1;com[1]=0x00;break;}//电机反转if(com[0]==0xb7&&com[1]==0xb4&&com[2]==0xd7&&com[3]==0xaa){state=2;com[1]=0x00;break;}//电机加速if(com[0]==0xbc&&com[1]==0xd3&&com[2]==0xcb&&com[3]==0xd9){k=k-1;  //减小k值if(k<1)k=1;  //减到1为止}//电机减速if(com[0]==0xbc&&com[1]==0xf5&&com[2]==0xcb&&com[3]==0xd9){k=k+1;if(k>10)k=10;  }motor_zz();}//已经反转while(state==2){//电机停止if(com[0]==0xcd&&com[1]==0xa3&&com[2]==0xd6&&com[3]==0xb9){state=0;com[1]=0x00;break;}//电机正转if(com[0]==0xd5&&com[1]==0xfd&&com[2]==0xd7&&com[3]==0xaa){state=1;com[1]=0x00;break;}//电机反转if(com[0]==0xb7&&com[1]==0xb4&&com[2]==0xd7&&com[3]==0xaa){state=2;com[1]=0x00;break;}//电机加速if(com[0]==0xbc&&com[1]==0xd3&&com[2]==0xcb&&com[3]==0xd9){k=k-1;if(k<1)k=1;}//电机减速if(com[0]==0xbc&&com[1]==0xf5&&com[2]==0xcb&&com[3]==0xd9){k=k+1;if(k>10)k=10;}motor_fz();}
}
#ifndef __SETMOTOR_H__
#define __SETMOTOR_H__#include"usart.h"#include"timer0_init.h"extern unsigned char com[4];void setmotor();#endif
#include"usart.h"unsigned char com[4]={0,0,0,0};  //因为两个汉字对应4个Unicode码
static unsigned int i=0;void UsartInit(){SCON=0x50;  //选择串口工作方式1并允许接收TMOD=0x20;  //选择定时器工作方式2,可以初值重装载PCON=0x80;  //波特率加倍TH1=0xf3;   //波特率初值为2400,加倍后就是4800TL1=0xf3;   //TH1的初值不会变,用来赋值给TL1 ES=1;  //串口中断允许位EA=1;  //打开总中断TR1=1;  //开启定时器中断
}void receivedata() interrupt 4{if(RI==0) return;  //单片机没有收到信息,就直接退出函数ES=0;  //关掉串口中断,以防多条信息输入时,来不及执行前面的代码RI=0;  //接收完一条信息后,RI是为1的,表示接收完成,我们要手动把RI置0com[i]=SBUF;  //接收的信息是放在SBUF缓存器中,我们要把它读取出来,方便SBUF接收下一次信息的输入SBUF=com[i];  //再把接收的信息发给上位机(电脑),这两个SBUF是不同的,只是命名一样i++;  //分四次就接受两个汉字的Unicode码while(!TI);  //判断信息是否发送完成,完成了TI就会为1,跳出循环TI=0;  //手动置0,用于下一次的判断if(i>=4)i=0;ES=1;  //一条信息完整发送成功,再打开串口中断,接收下一条信息
}
#ifndef __USART_H__
#define __USART_H__#include"reg52.h"void UsartInit();#endif
#include"timer0_init.h"void timer0_init(){EA=1;ET0=1;TR0=1;TMOD|=0x01;//定时器工作模式为1,因为还使用了定时器工作方式2,所以TMOD后要有“|”TH0=0xd8;//定时器延时10msTL0=0xf0;
}
#ifndef __TIMER0_INIT_H__
#define __TIMER0_INIT_H__#include"reg52.h"void timer0_init();#endif

串口通讯与步进电机驱动相关推荐

  1. 57步进电机驱动板,可以通过编码器调速,支持SPI通讯屏显示,485通讯

    57步进电机驱动板,可以通过编码器调速,支持SPI通讯屏显示,485通讯. 板子上面有电位器可电流设定或者485改电流设定. 最大电流支持4.5A,如果需要更大电流需要改元器件参数. 有启停和方向按键 ...

  2. a4988 脉宽要求_基于STM32的微型步进电机驱动控制器设计

    基于STM32的微型步进电机驱动控制器设计 摘 要: 设计了一种微型步进电机驱动控制器,通过上位机界面修改步进电机转速.旋转角度.细分系数.该设计以STM32F103T8U6作为主控制器,以A4988 ...

  3. arduino 步进电机驱动库_一文看懂arduino驱动uln2003操作步进电机的方法

    arduino驱动uln2003操作步进电机的方法 1.网上买的步进电机,很多接线顺序都不对.经过不懈努力查资料,终于找到了能用的接线方式: 电机上的12345针脚,对应着接线端子的42135. 2. ...

  4. STM32F103步进电机驱动简单控制

    stm32f103步进电机驱动控制 一.硬件接线方法 本文采用混合式二相步进电机-J8HB2401-野火42步进电机,驱动器为野火EBF-MSD4805,下面是常用接线方式: 如上图所示通常采用共阴接 ...

  5. STC51单片机35——五线四相步进电机驱动测试程序(2个步进电机)

    /*--------------------------------------------------------------------------------      MCU:         ...

  6. 基于单片机的步进电机驱动电路设计

    基于单片机的步进电机驱动电路设计 步进电机在控制系统中具有广泛的应用.它可以把脉冲信号转换成角位移,并且可用作电磁制动轮.电磁差分器.或角位移发生器等. 有时从一些旧设备上拆下的步进电机(这种电机一般 ...

  7. 基于STM32单片机闭环步进电机驱动调速仿真(仿真+源码+全套资料)

    资料编号:081 (1) 基本功能:本任务通过输出脉冲控制步进电机的停止.运动.方向.使用 两个按键分别控制步进电机的正转和反转,再次按下这两个按键,步进电机停止, 同时 LCD 显示电机状态信息. ...

  8. 串口 发送 接收 高位_电工进阶PLC大神,必备PLC串口通讯的基本知识!

    戳上方蓝字"技成电工课堂"快速关注!!! 电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗?1,什么是串口通讯? ...

  9. plc和pc串口通讯接线_让你搞懂PLC串口通讯和通讯接口,这东西估计没几个能说清楚~...

    电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗? 1,什么是串口通讯? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 ...

最新文章

  1. oracle排序后的第一条记录
  2. 遮掩java_Java×××:重载、重写、隐藏、遮蔽、遮掩(2)
  3. python字符串大全_python学习笔记:字符串操作大全
  4. 【51Nod-1100】 斜率最大(贪心)☆双排序
  5. 人生历练必备的十个心态(图)
  6. 如何设置的单位为m_如何将视频设置为网页背景
  7. 【SSM 整合项目】图书管理系统
  8. NYOJ-915 +-字符串(贪心)
  9. NBOJ 1184 Elaine's Queue deque的运用
  10. GeoServer style(sld)中文乱码解决方法
  11. 403高校毕业设计选题
  12. java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, recieved org
  13. 论文专利博客写作总结
  14. 那些以玩笑说出口的话,往往是最真的表达
  15. 使用Amazon SNS,发邮件
  16. Whale帷幄 - 智慧化门店 智慧化运营
  17. 什么是方法的重载?(Java)
  18. 百度地图获取省市边界、设置图片背景
  19. 【第3版emWin教程】第53章 emWin6.x的按钮Button控件
  20. module ‘gast‘ has no attribute ‘Num‘ 警告

热门文章

  1. 柯美打印机服务器显示代码09,柯美数码复印机故障代码及维修模式【最新】.docx...
  2. html5中display属性,display的属性
  3. ThreadLocal中的WeakReference
  4. VMware挂载共享盘
  5. PlantSimulation:Material Flow介绍
  6. php兑换接口,php积分兑换接口实例
  7. jar包反编译,查看源代码【转载】
  8. GeoMesa源码学习 (2):创建Schema并导入数据
  9. 以考代评高级职称||信息系统项目管理师一贴打尽,你想知道的都在这
  10. 免费 PSD 下载: 20个精美的登录和注册表单