定时器0电机控制PWM输出

/*立式不锈钢波纹管机控制板2021 2 26 pcb PAST******/
              #include     <REG52.H>
              #include     <intrins.H>
              #define      uint unsigned int  
              #define      uchar unsigned char
              #define      FOSC 11059200L
              #define      T1MS (65536-FOSC/1000)      //1T模式
              uchar           val;
              uchar           Speed;
              sbit         OUT1=P1^6;
              sbit         OUT2=P1^7;
              sbit         P_WM1=P3^5;
              sbit         P_WM2=P3^7;
              bit          MOTORX_RUN;                //X轴启动标志
              bit          MotorX_LowFlag;            //电机X轴低电平计数标志
              uint         MotorX_LowCounter;         //电机X轴低电平计数器
              uint         MotorX_HighCounter;        //电机X轴高电平计数器
/*---------------延时子程序----------------*/
              void delay1 (uint ms)
              {
              uint i,j;
              for(i=0;i<ms;i++)
              for(j=0;j<2000;j++)
              ;
              }
/****************************************/
              void timer0() interrupt 1
              {
               val++;
               if(val>2)
               {
               val=0;
               OUT1=~OUT1;                       //将测试口取反
               if(MOTORX_RUN==1)                 //X轴电机开启标志
               {
                P_WM1=0;                         //开X轴输出
                if(MotorX_LowFlag==1)            //低电平计数标志等于1
                {
                 MotorX_LowCounter++;
                 if(MotorX_LowCounter>=Speed)    //
                 {
                 MotorX_LowFlag=0;               //低电平计数标志等于0高电平开始计数
                 MotorX_HighCounter=102-Speed;   //赋高电平占空比值
                 }
                }
               else
               {
                P_WM1=1;                         //关X轴输出
                MotorX_HighCounter++;
                if(MotorX_HighCounter>=Speed)    //
                 {
                 MotorX_LowFlag=1;               //低电平计数标志等于1低电平开始计数
                 MotorX_LowCounter=Speed;        //低电平计数器
                 }
                }
               }
               }
              }
/*------------------主循环程序----------------*/      
               void   main( )                    /*主程序开始*/
               {  
               P1M0=0XC3; //
               P1M1=0X00;
               P3M0=0XF0; //
               P3M1=0X00;
               Speed=60;
               MOTORX_RUN=1;
               TMOD = 0x00;                      //设置定时器为模式0(16位自动重装载)
               TL0 = T1MS;                       //初始化计时值
               TH0 = T1MS >> 8;
               TR0 = 1;                          //定时器0开始计时
               ET0 = 1;                          //使能定时器0中断
               EA=1;
               while(1)
                {
                OUT2=0;
                delay1 (100);
                OUT2=1;
                delay1 (100);
                }
               }     //2024 6 13 L81 CODE196 PAST

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-13 20:06:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-13 20:06:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-13 20:06:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-13 20:06:03       20 阅读

热门阅读

  1. 在 Spring Boot 中实现文件上传功能

    2024-06-13 20:06:03       9 阅读
  2. TCP和UDP区别

    2024-06-13 20:06:03       4 阅读
  3. Android中蓝牙设备的状态值管理

    2024-06-13 20:06:03       6 阅读
  4. CSPM-3考试成绩已出!内附查询流程

    2024-06-13 20:06:03       7 阅读
  5. 缺陷 & 规避

    2024-06-13 20:06:03       7 阅读
  6. C++中变量的使用细节和命名方案

    2024-06-13 20:06:03       4 阅读
  7. MYSQL(事务)

    2024-06-13 20:06:03       6 阅读