我用单片机控制步进电机的正反转,现在上位机通过串口给单片机输入数据,这个数据表示步进电机脉冲的个数,但我用串口调试助手调试的时候,没有反应,(固定脉冲个数已经调试出来)请各位大神把昂我看看哪有问题,谢谢啦!求助,加急
下面是我的程序
#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;
}
|