微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 大神们帮我看看这程序错在哪

大神们帮我看看这程序错在哪

时间:10-02 整理:3721RD 点击:
我想要实现的是,按下正转或反转键,定时器T0按table1的数据来输出周期越来越小的脉冲,最后周期稳定在20US,按键一直按着电机转,按键松开电机不转。松开按键,关闭T0,开T1,按table2的数据输出周期越来越大的脉冲,直至停止。大神们帮忙看看这段程序错在哪里了?谢谢啦

#include <REGX52.H>
#define uchar unsigned char
#define uint unsigned int
sbit CLK=P1^0;
sbit DIR=P1^1;
sbit ENA=P1^2;
sbit CW=P2^0;      //正转按键
sbit CCW=P2^1;      //反转按键
bit cw_up=0;   //正转按键释放标志
bit ccw_up=0;  //反转按键释放标志
uint clock;   //周期变量
uint a,b;   //a为T0的table1变量,b为T1的table2变量
uchar code table1[]={     //匀加速启动速率表
10000,6666,3333,1000,
500,200,100,60,30,10};  
uchar code table2[]={     //匀减速停止速率表
100,500,1000,3333,
6666,10000};     
void delayms(uint xms)       //延时子程序
{
   uint i,j;
   for(i=xms;i>0;i--)
      for(j=110;j>0;j--);
}
void discontinue(void)      //定时器中断子程序
{
   IE=0X8A;                 //开总中断,开T0,T1中断
   TMOD=0X11;             //设置定时器0和1位工作方式1
   TH0=(65536-clock)/256;     //T0装初值
   TL0=(65536-clock)%256;
   TH1=(65536-clock)/256;     //T1装初值
   TL1=(65536-clock)%256;
}
void sys_init()     // 系统初始化
{
   P2=0XFF;
   ENA=0;
}
void keyscan()   //案件扫描
{
   if(!CW)         //正转
   {
     delayms(10);       //消抖
     if(!CW)
     {
       ENA=1;
       DIR=0;
       TR0=1;        //开T0,加速启动
       while(!CW);    //等待按键释放,若不释放,程序一直停在while(!CW)语句处
       cw_up=1;         //按键释放后,置 1
       if(cw_up==1)
       {
         cw_up=0;     //清零
         TR1=1;         //开T1,减速停止
         if(b==7)     //b=7时,关闭T1
         {
           TR1=0;
         }
       }
     }
   }
   else if(!CCW)       //反转
   {
     delayms(10);
     if(!CCW)
     {
       ENA=1;
       DIR=1;
       TR0=1;
       while(!CCW);    //等待按键释放
       ccw_up=1;
       if(ccw_up==1)
       {
         cw_up=0;
         TR1=1;
         if(b==7)
         {
           TR1=0;
         }
       }
     }
   }
}
void main()             //主函数
{
   discontinue();
   sys_init();
   while(1)
   {
      keyscan();
   }
}
void T0_time() interrupt 1
{
   for(a=0;a<10;a++)
   {
     clock=table1[a];
     TH0=(65536-clock)/256;     //重装初值
     TL0=(65536-clock)%256;
     CLK=~CLK;
   }
}
void T1_time() interrupt 3
{
   for(b=0;b<=7;b++)
   {
     clock=table2;
     TH1=(65536-clock)/256;     //重装初值
     TL1=(65536-clock)%256;
     CLK=~CLK;
   }
}

这个看不太懂啊

哪里看不懂,我可以说一下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top