中级会员
- 积分
- 288
- 金钱
- 288
- 注册时间
- 2017-7-19
- 在线时间
- 85 小时
|
5金钱
51单片机 怎么用定时器输出方波从宽到窄,单片机用定时器输出,不借助按键调速。 用来控制步进电机转速,给定高速脉冲时无法启动,必须有一个加速的过程。
#include<reg52.h>
//宏定义
//***************************************************************
#define uchar unsigned char
#define uint unsigned int
#define TERM 10//周期为10
//***************************************************************
//管脚定义
//***************************************************************
sbit ZHENGKEY = P2^4;//正转
sbit KUAIZHENGKEY = P2^5;//快正转
sbit FANKEY = P2^6; //反转
sbit DIR = P0^1; //方向
sbit EN = P0^2; //使能
sbit CP = P0^3; // 脉冲
//***************************************************************
//变量定义
//***************************************************************
//***************************************************************
//函数定义
//***************************************************************
void sysinit(void);//初始化
void delayms(unsigned int Num);//延时函数
void T0_time(void);
//***************************************************************
//主函数
//***************************************************************
void main()
{
static bit temp;
ZHENGKEY = 1;
FANKEY = 1;
sysinit();
temp = 0;
CP = 1;
while(1)
{
jianshu();
if (ZHENGKEY == 0) //正转
{
delayms(10);
if (ZHENGKEY == 0)
{
EN = 1;
TR0=1;
DIR = 1;
}
}
else if (KUAIZHENGKEY == 0) //快正转
{
delayms(10);
if (KUAIZHENGKEY == 0)
{
EN = 1;
TR0=1;
DIR = 1;
}
}
else if (FANKEY == 0) //反转
{
delayms(10);
if (FANKEY == 0)
{
EN = 1;
TR0=1;
DIR = 02;
}
}
else
{
EN = 0;
TR0=0;
}
}
}
void sysinit(void)
{
TMOD = 0x02;
TH0=(65536-80)/256;
TL0=(65536-80)%256;
EA=1;
ET0=1;
TR0=0;
}
void T0_time()interrupt 1
{
TH0=(65536-80)/256;
TL0=(65536-80)%256;
}
void jianshu()
{
}
void delayms(unsigned int Num)
{
unsigned int i,j;
for(i=0;i<Num;i++)
{
for(j=0;j<300;j++);
};
}
|
|