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

📄 main.lst

📁 用编码盘来控制舵机的程序
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  03/24/2008 23:07:28 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil51\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"reg51.h"//包涵头文件
   2          //#define ctlout        P1//定义P1口为控制输出口
   3          #define minangle 500//定义最小脉宽
   4          #define maxangle 1800//定义最大脉宽
   5          #define Initangle 1100//初始角度-单位均为μm
   6          //#define endangle 2200//终止角度
   7          #define stepangle 50//定义步进脉宽
   8          #define circle    20000//定义舵机周期20ms
   9          #define T0MAX     65535//定义定时器定时的最大值
  10          void Initinterupt(void);//中断初始化函数
  11          sbit ctlout=P1^0;//定义P1.0口为控制输出口
  12          
  13          //全局变量
  14          unsigned int angle=Initangle ;//角度
  15          bit angleflag=0;//正负向标志为,0标志舵机正向转动,1标志负向转动
  16          bit voltflag=0;//输出高低电平(占空)标志位,0标志输出高电平(占),1标志低电平(空)
  17          //主函数开始
  18          void main(void)
  19          {  
  20   1         Initinterupt();//中断初始化函数
  21   1         while(1);//等待中断
  22   1      }
  23          //外部中断负跳变检测函数
  24          void INT0process(void) interrupt 0 
  25          { 
  26   1         EX0=0;//关闭外部中断0 
  27   1         IE0=0;//外部中断标志清0
  28   1         TR0=0;//关定时器0
  29   1         if(!angleflag)//若果舵机正向转动
  30   1         {
  31   2            angle=angle+stepangle;//输出角度增加一个不进角
  32   2                if(angle>=maxangle)//若果旋转角度大于或等于终止角度
  33   2            angleflag=1;//标志负向旋转标志位
  34   2         }
  35   1         else //否则舵机反向旋转
  36   1         {
  37   2            angle=angle-stepangle;//输出角度减小一个不进角
  38   2                if(angle<=minangle)//如果旋转角度小于或等于起始角度
  39   2                angleflag=0;//标志正向旋转标志
  40   2         }
  41   1         ET0=1;//开定时器T0允许
  42   1         TR0=1;
  43   1         EX0=1;
  44   1         ctlout=0;
  45   1         voltflag=1;
  46   1      }
  47          //中断初始化函数
  48          void Initinterupt(void)
  49          {
  50   1         IT0=1;//将外部中断0设置为下降沿触发方式
  51   1         TMOD=0x01;//设置定时器T0工作方式为2计时
  52   1         TH0=(T0MAX-(circle-angle))>>8;//送出高8位
  53   1         TL0=(T0MAX-(circle-angle))&0x00ff;//送出低八位
  54   1         EA=1;//开总中断允许
  55   1         ET0=1;//开定时器T0允许
C51 COMPILER V7.50   MAIN                                                                  03/24/2008 23:07:28 PAGE 2   

  56   1         EX0=1;//开放外部中断0
  57   1         ctlout=0;
  58   1         voltflag=1;
  59   1         TR0=1;
  60   1      }
  61          //定时中断处理程序,
  62          void Time0process(void) interrupt 1 
  63          { 
  64   1        
  65   1        TR0=0;//关闭T0中断允许
  66   1        TF0=0;//清除中都T0标志位
  67   1        if(!voltflag)//如果是高电平输出标志
  68   1        {
  69   2           ctlout=0;//输出空
  70   2               voltflag=1;//标志成低电平标志
  71   2           TH0=(T0MAX-(circle-angle))>>8;//送出高8位
  72   2           TL0=(T0MAX-(circle-angle))&0x00ff;//送出低八位
  73   2              
  74   2        }
  75   1        else//否则输出搞电平
  76   1        {
  77   2           ctlout=1;//输出占
  78   2               voltflag=0;//标志成高电平标志
  79   2               TH0=(T0MAX-angle)>>8;//送出高8位
  80   2           TL0=(T0MAX-angle)&0x00ff;//送出低八位
  81   2        }
  82   1        TR0=1;//启动T0中断
  83   1      }
  84          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    297    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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