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

📄 调速程序.c

📁 利用改变单片机定时参数来改变输出PWM波来调速
💻 C
字号:
//-----------------------函数声明,变量定义----------------------------------------------
#include <reg51.h>
#include <intrins.h>
#include<ABSACC.h>  
//-----------------------定义管脚--------------------------------------------------------
sbit LPWM=P1^7;
sbit RPWM=P1^6;            //PWM波形输出 

//sbit LDR=P1^4;            //方向控制
//sbit RDR=P1^3;            //方向控制

sbit tr=P1^7 ;			 //485通讯控制脚
//------------------------------------------------------------------------------------------------
#define uint unsigned int
#define uchar unsigned char
//------------------------------------------------------------------------------------------------
#define ADDRESS 0x01
#define  timer_data  (256-100) //定时器预置值,12M时钟是,定时0.1ms
#define  PWM_T 118     //定义LPWM的周期T为10ms 100	  周期越大速度越慢

unsigned char PWM_t;       //PWM_t为脉冲宽度(0~100)时间为0~10ms
unsigned char time_count;  //定时计数
uint l; //定义全局变量




//--------------------------------------------------------------------------------------------------
// 函数名称:timer_init
// 函数功能:初始化设施定时器
//--------------------------------------------------------------------------------------------------
void timer_init(void)
     {
      TMOD=0x22; //定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装) 
      PCON=0x00;
	  SCON=0xd8; //串行口模式3,TB8=1发送地址呼叫
	  EA=1;             //中断允许
	  ES=1;ET0=1;ET1=0;
      PS=1;PT0=0;	
      TF0=0;TF1=0;
	  //RI=0;TI=0;
      TH0=timer_data;   //保证定时时长为0.1ms
      TL0=TH0;
	  TH1=0xfd;        //产生9600波特率
	  TL1=0xfd; 
     // ET0=1;
      TR0=1;            //开始计数
     // ET1=1;
      TR1=1;            //开始计数
      tr=0;			   //设置为接收
   }

//--------------------------------------------------------------------------------------------------
// 函数名称:setting_PWM
// 函数功能:设置PWM的脉冲宽度
//--------------------------------------------------------------------------------------------------
void setting_PWM(uint x)
 {
   
     PWM_t=x;
     
   
 }

//--------------------------------------------------------------------------------------------------
// 函数名称:IntTimer0
// 函数功能:定时器中断处理程序
//--------------------------------------------------------------------------------------------------
void IntTimer0() interrupt 1	using 1
  {
     time_count++;	  
     //LDR=Ldirection; 
     if(time_count>=PWM_T)
      {
        time_count=0;
       
        setting_PWM(l);  //每输出一个PWM波调用一次
       } 
	 if(time_count<PWM_t)
         { LPWM=1; RPWM=1;}
     else 
          {LPWM=0; RPWM=0;}
   }



   
//主函数//------------------------------------------------------------------------------------------------
 
//中断接收程序

void sevice_serial(void)interrupt 4 using 1

{uchar rs;uchar i=0;   ES=0;
if(RI==1)
{RI=0;
tr=0;
while(RI==0);RI=0;
rs=SBUF;
if(rs==0xff) //是复位命令
{SM2=1;
ES=1;

}

else if(rs!=ADDRESS) //不是呼叫本机

{

ES=1;

}
else{
  SM2=0;

  tr=1;

  SBUF=ADDRESS; //用本机地址作为应答

  while(TI==0);

  TI=0;

  tr=0;

//下面开始接收
  
   while(RI==0);RI=0;
   l=SBUF;
    tr=1;
	SBUF=1;
	while(TI==0);TI=0;
  }
 
}
 ES=1;
}





void main(void)
{ //IE=0;
  timer_init();
  
  l=50;
  while(1);
}

⌨️ 快捷键说明

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