打印

上位机通过串口控制单片机,然后单片机控制步进电机

[复制链接]
5208|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
上位机通过串口控制单片机,然后单片机控制步进电机。即通过串口通讯由上位机实时的控制步进电机的转动圈数控制。大家看看我写的哪里不对,为什么步进电机没有按给定的数值跑?
#include<reg52.h>
#include <stdio.h>             /*输入输出库函数,用于收发字符串*/

#define uchar unsigned char
#define uint unsigned int
uchar a,flag_uart;
uchar step[]={0x08,0x28,0x20,0x30,0x10,0x50,0x40,0x48}; // 时序参数表

/*串行口初始化波特率9600,定时器1,工作方式2 */
void init()
{
PCON=0x80;//波特率加倍
TMOD=0x21;//定时器1作为比特率发生器,方式2
SCON=0x50;//串行控制寄存器设置;SM0=0; SM1=1;串行口工作于方式2;REN=1;串行口接收允许
TH1=0xf3;
TL1=0xf3; //装入初值
TR1=1;//开定时器1
ES=1;//串口中断允许
EA=1;// 总中断允许
}

/****************DelayMs****************/
void DelayMs(uint t)      //延时1毫秒
{   
uint i,j;
for(i=t;i>0;i--)
    for(j=110;j>0;j--);
}

/**************************************************主函数*******************************************************/
void main(void)
{
uchar k,c;
init();
flag_uart = 0;        //中断标志位
a = 0;                        //循环控制变量

while(1)
{
while(flag_uart==1)//通过串口中断置位
   {
    for(k = 0;k < a;k++) // 主循环,控制循环次数
       {
           for(c = 0;c < 8;c++)
              {
               P1=step[c];
               DelayMs(10); // 延时
              }
        }

        SBUF = a;
        while(!TI);
        TI = 0;
        ES = 1;

        a = 0;
        flag_uart = 0;
    }
}
}

//***************串口中断*******************//
void serial() interrupt 4
{
     while(!RI);
         a=SBUF;
     RI=0;
         flag_uart = 1;                  
}

相关帖子

沙发
薛定谔的小猫子|  楼主 | 2014-10-21 21:07 | 只看该作者
补充:STC89C52RC单片机,晶振24M,波特率设置的是9600
1、步进电机没按指定的圈数跑。
2、串口收不到发送过去的数值。
感觉SBUF给a的是一个ASCII码,或者是串口通讯出现了问题。
求大神指教!

使用特权

评论回复
评论
厉害的你 2019-4-11 09:59 回复TA
我也用的这个单片机 我晶振12M 波特率9600 我加了数据回显程序 接收会来的数据是乱码 之后波特率改为4800就解决了这个问题 
板凳
信守e| | 2014-12-9 18:43 | 只看该作者
我也不清楚,上位机通过串口号还是无线蓝牙发‘a’给单片机的呀啊?

使用特权

评论回复
地板
wangch_sh| | 2014-12-9 19:42 | 只看该作者
先把串口调通再说吧。

使用特权

评论回复
5
zyj888| | 2017-3-26 15:43 | 只看该作者
薛定谔的小猫子 发表于 2014-10-21 21:07
补充:STC89C52RC单片机,晶振24M,波特率设置的是9600
1、步进电机没按指定的圈数跑。
2、串口收不到发送 ...

在吗,楼主,我也面临同样的问题,能指点指点吗

使用特权

评论回复
6
xtajmhfhn| | 2017-3-27 10:17 | 只看该作者
一、首先确定下你的上位机软件发出来的数据对不对?
二、确定你的下位机与上位机通信是否正常?
三、你的上位机没有接收你的下位机发来的数据,说明可能是你的下位机没有收到上位机发来的数据。造成你上位机没有收到下位机的数据!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

23

帖子

0

粉丝