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

📄 direct_motor.lst

📁 提供一个用 SST89E564RD 芯片控制直流电机转速的参考程序
💻 LST
字号:
C51 COMPILER V7.06   DIRECT_MOTOR                                                          12/15/2004 18:36:53 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DIRECT_MOTOR
OBJECT MODULE PLACED IN direct_motor.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE direct_motor.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //p1.0接J16的2脚,p1.1接J16的1脚
   2          #include<reg52.h>
   3          #include<absacc.h>
   4          #include<stdio.h>
   5          
   6          #define COM8279  XBYTE[0x8041]
   7          #define DATA8279 XBYTE[0x8040]
   8          #define uchar unsigned char 
   9          #define uint unsigned int
  10          #define up 1
  11          #define down 0
  12          
  13          sbit p10=P1^0;
  14          sbit p11=P1^1;
  15          sbit StatusBit= ACC^7; 
  16          
  17          uint time_up=20;  //高电平的延时时间
  18          uchar time_down=45;//低电平的延时时间
  19          uchar time_count=0;//计时间个数
  20          bit up_down=up;  //控制正反转
  21          uint freqency; //频率
  22          uint speed;//转速
  23          
  24          uchar code tab[23]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,      // 0 1 2 3 4 5  //
  25                              0x7d,0x07,0x7f,0x6f,0x77,0x7c};    // 6 7 8 9 A b  //
  26          
  27          
  28          void delay_up(uint time_up)//高电平的延时
  29          {
  30   1        uchar j;
  31   1        for(j=0;j<time_up;j++)
  32   1          {
  33   2            ;
  34   2          }
  35   1      }
  36          
  37          void delay_down(uchar time_down)  //低电平的延时
  38          {
  39   1        uchar j;
  40   1        for(j=0;j<time_down;j++)
  41   1          {
  42   2            ;
  43   2          }
  44   1      }
  45          
  46          void deasil(void)  //顺时针旋转
  47          {
  48   1        p10=1;
  49   1        delay_up(time_up);
  50   1        p10=0;
  51   1        delay_down(time_down);
  52   1      }
  53          
  54          void reverse(void)//逆时针旋转
  55          {
C51 COMPILER V7.06   DIRECT_MOTOR                                                          12/15/2004 18:36:53 PAGE 2   

  56   1        p11=1;
  57   1        delay_up(time_up);
  58   1        p11=0;
  59   1        delay_down(time_down);
  60   1      }
  61          
  62          void control(up_down)//控制正反转
  63          {
  64   1        if(up_down==up)
  65   1          {
  66   2                deasil();
  67   2                p11=1;
  68   2              }
  69   1        else
  70   1          {
  71   2                reverse();
  72   2                p10=1;
  73   2              }
  74   1      }
  75          
  76          void initial_8279(void)//8279初始化
  77          {
  78   1        COM8279=0x00;
  79   1        COM8279=0x5c;
  80   1        COM8279=0x2a;
  81   1        COM8279=0x94;
  82   1        COM8279=0xd1;
  83   1      } 
  84          
  85          void initial_interrupt(void)//中断初始化
  86          {
  87   1        TMOD=0x51;
  88   1        TH0=0X1E;
  89   1        TL0=0X58;
  90   1        TH1=0;
  91   1        TL1=0;
  92   1        ET1=1;
  93   1        TR1=1;
  94   1        ET0=1;
  95   1        TR0=1;
  96   1        EX1=1;
  97   1        EA=1;
  98   1      }
  99          
 100          void disp(uint num,uchar index)             //显示
 101          {
 102   1        uint up_time;
 103   1        COM8279=0X90+index;
 104   1        //freqency=TH1*256+TL1;
 105   1       // speed=freqency*30;
 106   1        COM8279=0xd1;
 107   1        do                     
 108   1              {                     
 109   2                      ACC=COM8279;        
 110   2              }while(StatusBit==1);
 111   1        while(num>0)
 112   1          {
 113   2            DATA8279=tab[num%10];
 114   2                num=num/10;
 115   2              }
 116   1              up_time=time_up;
 117   1         COM8279=0X94;
C51 COMPILER V7.06   DIRECT_MOTOR                                                          12/15/2004 18:36:53 PAGE 3   

 118   1         DATA8279=tab[up_time%10];
 119   1         up_time=up_time/10;
 120   1         COM8279=0X95;
 121   1         DATA8279=tab[up_time%10];
 122   1         up_time=up_time/10;
 123   1         COM8279=0X96;
 124   1         DATA8279=tab[up_time%10];
 125   1      }
 126          
 127          void time_0(void) interrupt 1//内部中断0
 128          {
 129   1        uchar i; 
 130   1        
 131   1        i++;
 132   1        if(i==20)
 133   1          { 
 134   2                ET0=0;
 135   2            TR1=0;
 136   2                EA=0;
 137   2                i=0;
 138   2                freqency=TH1*256+TL1;
 139   2            speed=freqency*30;
 140   2                disp(speed,0);
 141   2                TH1=0;
 142   2            TL1=0;
 143   2                ET0=1;
 144   2            TR1=1;
 145   2                EA=1;
 146   2              }
 147   1        
 148   1        
 149   1        TH0=0X1E;
 150   1        TL0=0X58;
 151   1      }
 152          
 153          void int_1(void) interrupt 2//外部中断1
 154          {
 155   1        EA=0;
 156   1        switch(DATA8279)
 157   1          {
 158   2                case 0xd9: //8键++
 159   2                  {
 160   3                        time_up++;
 161   3                      }break;
 162   2                case 0xd8://4键--
 163   2                  {
 164   3                        time_up--;
 165   3                      }break;
 166   2                case 0xc3://13键控制方向
 167   2                  {
 168   3                        up_down=~up_down;
 169   3                      }break;
 170   2                default:;
 171   2              }
 172   1        EA=1;
 173   1      }
 174          /***********************************************
 175                    主程序
 176          ***********************************************/
 177          void main(void)
 178          { 
 179   1        initial_8279();
C51 COMPILER V7.06   DIRECT_MOTOR                                                          12/15/2004 18:36:53 PAGE 4   

 180   1        initial_interrupt();
 181   1        
 182   1        while(1)
 183   1          {
 184   2                control(up_down);
 185   2              }
 186   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    505    ----
   CONSTANT SIZE    =     23    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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