• 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下载

  • 相关阅读:
    Hadoop3教程(二十七):(生产调优篇)HDFS读写压测
    力扣287. 寻找重复数
    商汤绝影车路协同“进城”!10+个智能网联应用,100+场景算法应用,感知范围扩大1000倍...
    Ansible概述以及模块
    金仓数据库KingbaseES数据库开发指南(5. 面向应用程序的高级功能)
    Python数据展示 - 生成表格图片
    Chewy 2023年9月 面经和题目以及总结
    Python武器库开发-flask篇之路由和视图函数(二十二)
    【C++基础入门】41.C++中父子间的冲突
    java 同学聚会AA制共享账单系统springboot 小程序022
  • 原文地址:https://blog.csdn.net/fengyuzhe13/article/details/127859498