打印
[51单片机]

串口通信

[复制链接]
755|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1558047177|  楼主 | 2015-5-1 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用单片机控制步进电机的正反转,现在上位机通过串口给单片机输入数据,这个数据表示步进电机脉冲的个数,但我用串口调试助手调试的时候,没有反应,(固定脉冲个数已经调试出来)请各位大神把昂我看看哪有问题,谢谢啦!求助,加急
下面是我的程序
#include <reg52.h>
int n,a;

//TB6560输入控制端定义
sbit CLK = P1^0;
sbit ENA = P1^1;       
sbit DIR = P1^2;

sbit CW = P3^0;                //正反转运行按键


bit Run_Status;                //运行状态位标志,
                                        //=0表示电机在停止状态,可以按键正转、反转均可
                                        //=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向带来的电流过大。



/************************************************************************************************
** 函数名称: void main(void)
** 功能描述: 主函数
** 输   入: 无
** 输   出: 无
*************************************************************************************************/
void main(void)
{
while(1)
          {
       
        TMOD=0X20;
        TH1=0xfd;//装初值设定波特率为9600
        TL1=0xfd;
        TR1=1;//启动定时器
        SM0=0;//串口通信模式设置
        SM1=1;
        REN=1;//串口允许接收数据
        EA=1;//开总中断
        ES=1;//开串中断

       
                CW=0;
               
                        if(!CW&&!Run_Status)                       
                        {       
                                Run_Status=1;        //电机正在运行的状态标志
                                DIR = 0;                //正转
                                ENA = 1;
                               
                                TMOD =0x01;       
                                TH0=(65536-2500)/256;  
                                TL0=(65536-2500)%256;
                                IE= 0x82;                  //打开中断       
                                TR0=1;
                                                       
                        }
       
         
                       
                        if(CW&&!Run_Status)                       
                        {       
                                Run_Status=1;        //电机正在运行的状态标志
                                DIR = 1;                //反转
                                ENA = 1;
                               
                                TMOD =0x01;       
                                TH0=(65536-2500)/256;  
                                TL0=(65536-2500)%256;
                                IE= 0x82;                  //打开中断       
                                TR0=1;
               
                        }
                       
   }
}
/************************************************************************************************
** 函数名称: Timer0_ISR
** 功能描述: 定时器0中断处理函数
** 输   入: 无
** 输   出: 无
*************************************************************************************************/
void Timer0_ISR(void) interrupt 1
{
        TH0=(65536-2500)/256;
        TL0=(65536-2500)%256;

        if(n<a)
         {n++;        CLK = ~CLK;}
         else
         {n=0;        CLK =1 ;TR0 = 0 ;ET0 = 0 ; }                 //脉冲是低电平有效
       

}


void serial() interrupt 4//串行中断函数
{
         
       
        a=SBUF;//收取数据(脉冲个数)


        RI=0;
        
}

相关帖子

沙发
dirtwillfly| | 2015-5-1 20:56 | 只看该作者
好长的代码

使用特权

评论回复
板凳
JY-DX-JY| | 2015-5-2 14:11 | 只看该作者
网上搜个串口程序,对照着改。

使用特权

评论回复
地板
中国微电脑网| | 2015-5-4 16:21 | 只看该作者
分两步,第一步调试串口发送数据给单片机,单片机接收到数据以后显示接收到的数据,第二步把接收的数据驱动步进电机并观察运行状态。

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝