⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwmnew.c

📁 利用52单片机通过8254定时器实现控制电机的PWM调速程序
💻 C
字号:
#include <reg52.h>
#include <absacc.h>

#define uint unsigned int
#define uchar unsigned char
#define CT0 XBYTE[0x0000]//8254计数器地址
#define CT1 XBYTE[0x1000]
#define CT2 XBYTE[0x2000]
#define CTW XBYTE[0x3000]

sbit WDI=P2^7;
sbit stop=P3^3;//S1
sbit zhengzhuan=P2^3;//S2
sbit fanzhuan=P2^2;//S3
sbit speedup=P2^1;//S4
sbit speeddown=P2^0;//S5
sbit en=P1^0; 
sbit zheng=P1^1;
sbit fan=P1^2;


uint speed=50;
uint v=5;
uint b;
uchar count = 0;
uint mark=0xf0;


void PWM8254()
{
WDI=!WDI;
CTW=0x16;//计数器0,只写低字节,方式3
CT0=100;//周期
CTW=0x92;//计数器2,只写低字节,方式1
CT2=speed; //可调整占空比,speed越大,速度越慢
}

void Up()
{
    speed=speed-v;
	if(speed<=5) speed=5;
	CTW=0x92;
    CT2=speed;
}

void Down()
{
    speed=speed+v;
	if(speed>=95) speed=95;
	CTW=0x92;
    CT2=speed; 
}

void Stop()
{
   en=1;
}

void delay()
{
     TR2=1;
	 do{ }while(count<=3);
     TR2=0;
	 count = 0;
}

void main()
{
PWM8254();
WDI=!WDI;

RCAP2H=0x10;
RCAP2L=0x00;
TR2=0;
ET2=1;
EA=1;

while(1)
  {
  WDI=!WDI;
  if(!zhengzhuan)
    {
	for(b=0;b<1000;b++);
    while(!zhengzhuan);
    for(b=0;b<1000;b++);
	if(mark==0x5a)
	  {
	  Stop();
	  delay();
	  }
	en=0;
	zheng=1;
	fan=0;
	mark=0xa5;
	}
  if(!fanzhuan)
    {
	for(b=0;b<1000;b++);
    while(!fanzhuan);
    for(b=0;b<1000;b++);
	if(mark==0xa5)
	  {
	  Stop();
	  delay();
	  }
    en=0;
	fan=1;
	zheng=0;
	mark=0x5a;
	}
  if(!stop)
    {
	for(b=0;b<1000;b++);
    while(!stop);
    for(b=0;b<1000;b++);
	en = 1;
	mark=0xf0;
	}
  if(!speeddown)
    {
	for(b=0;b<1000;b++);
    while(!speeddown);
    for(b=0;b<1000;b++);
	Down();
	}
  if(!speedup)
    {
	for(b=0;b<1000;b++);
    while(!speedup);
    for(b=0;b<1000;b++);
	Up();
	}
  }
}
timer2() interrupt 5
{
static uchar t=0;
TF2=0;
t++;
if(t>=15)  
  {
  t=0;
  count++;
  }
WDI=!WDI;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -