• STC51单片机27——控制无刷电机


     编写程序控制电调

    #include

    sbit Ppm=P2^0;
    sbit Up=P2^1;
    sbit Down=P2^2;
    sbit Led_Up=P2^3;
    sbit Led_Down=P2^4;

    unsigned char k=0;                       
    unsigned char a=0;                
                      
    void Control()
    {
      if(Up==0&&k<99)
        k++;
      else if(Down==0&&k>0)      
        k--;
      else ;
    }

    void Led ()
    {
      if(k==99)                                //如果油门加到最大,灯亮
        Led_Up=0;
      else if(k==0)                            //如果油门减到最小,灯亮
        Led_Down=0;
      else
      {
        Led_Up=1;
        Led_Down=1;
      }
    }
    /**************************************************************
    函数功能:主函数
    **************************************************************/
    void main(void)
    {
        EA=1;                  //开总中断
        ET1=1;                 //定时器T1中断允许         
        TMOD=0x10;             //TMOD=0001 000B,使用定时器T1的模式1,16位
        TH1=0xfc-k*12/256;   //定时器T1的高8位赋初值    
        TL1=0x89-k*12%256;  //定时器T1的高8位赋初值
        TR1=1;                 //启动定时器T1
        while(1)//无限循环等待中断
        {
          while(TF1==0) ;
          TF1=0;
          Control();
          Led ();
        }   
     }
    /**************************************************************
    函数功能:定时器T1的中断服务程序
    在此函数中严重禁止使用如下格式赋值!!!!!!!!!!!!!!!
      TH1=(65536-k)/256;        //定时器T1的高8位赋初值
      TL1=(65536-(125-k))%256;  //定时器T1的高8位赋初值
    不然输出来的计时长度就会变长!!!!!!!!!!!!!!!!!!
    **************************************************************/
    void Time1(void) interrupt 3 using 0 //“interrupt”声明函数为中断服务函数
     {
       unsigned char b;
       TR1=0;                 //关闭定时器T1
       b=k;                      //防止在给TH1和TL1赋值时,k发生变动
       if(a==0)
       {
         a=1;
         Ppm=1;                        //高电平
         TH1=0xfc-k*12/256;   //定时器T1的高8位赋初值
         TL1=0x89-k*12%256;  //定时器T1的低8位赋初值
       }
       else if(a==1)
       {
         a=0;
         Ppm=0;                           //低电平
         TH1=0xb7+k*12/256;   //定时器T1的高8位赋初值    
         TL1=0x88+k*12%256;  //定时器T1的低8位赋初值
       }
       else ;
       TR1=1;                 //启动定时器T1
     }

    完整资料打包:

    STC51单片机27-控制无刷电机-单片机文档类资源-CSDN下载

  • 相关阅读:
    pair 是 C++ 标准库中的一个模板类,用于存储两个对象的组合
    Jmeter(十七):利用jmeter插件收集性能测试结果
    用CMake编译项目 & CMake和g++的区别
    【吴恩达机器学习笔记】十三、异常检测
    Gbase8s数据库ALTER INDEX 语句
    脚手架构建VUE项目
    算法与数据结构 --- 栈和队列的定义与特点,以及案例引入
    Kafka多维度调优
    Netty面试题(二)
    135:vue+openlayers添加海量点,使用WebGLPoints方法(示例代码)
  • 原文地址:https://blog.csdn.net/fengyuzhe13/article/details/127859498