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

📄 main.lst

📁 模拟PWM输出 keil c代码 51单片机上运行。适合等效电压用
💻 LST
字号:
C51 COMPILER V7.00  MAIN                                                                   06/09/2006 21:08:03 PAGE 1   


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

stmt level    source

   1          # include <reg51.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          void keyscan(void);
   5          uint a,b,c,d;
   6          /*a为舵机1的脉冲宽度,b为舵机2的脉冲宽度,单位1/1000 ms */
   7          /*c、d为中间变量*/
   8          /*以下定义输出管脚*/
   9          sbit p12=P1^2;
  10          sbit P13=P1^3;
  11          sbit p16=P1^6;
  12          sbit p15=P1^5;
  13          sbit p17=P1^7;
  14          void delay(void);
  15          /*以下两个函数为定时器中断函数*/
  16          /*定时器1,控制舵机1,输出引脚为P12,可自定义*/
  17          void timer0(void) interrupt 1 using 1
  18          {p12=!p12; /*输出取反*/
  19   1      c=18432-c; /*20000代表20 ms,为一个周期的时间*/
  20   1      TH0=-(c/256); TL0=-(c%256); /*重新定义计数初值*/
  21   1      if(c>=470&&c<=2300)c=a;
  22   1      else c=18432-a; /*判断脉宽是否在正常范围之内*/
  23   1      }
  24          /*定时器2,控制舵机2,输出引脚为P13,可自定义*/
  25          void timer1(void) interrupt 3 using 1
  26          {P13=!P13;
  27   1      d=18432-d;
  28   1      TH1=-(d/256); TL1=-(d%256);
  29   1      if(d>=470&&d<=2304)d=b;
  30   1      else d=18432-b;
  31   1      }
  32          /*主程序*/
  33          void main(void)
  34          {TMOD=0x11; /*设初值*/
  35   1      p12=1;
  36   1      P13=1;p17=1;
  37   1      a=2000;
  38   1      b=566; /*数值1500即对应1.5ms,为舵机的中间90度的位置*/
  39   1      c=a;d=b;
  40   1      TH0=-(a/256); TL0=-(a%256);
  41   1      TH1=-(b/256); TL1=-(b%256); /*设定定时器初始计数值*/
  42   1      EA=1;
  43   1      ET0=1; TR0=1;EX0=1;EX1=1;
  44   1      ET1=1; TR1=1;
  45   1      PX0=0;PX1=0;PT1=1;PT0=1;/*设定中断优先级*/
  46   1      for(;;)
  47   1      {
  48   2      keyscan();
  49   2      
  50   2      } 
  51   1      }
  52          /*在这个for循环中,可以根据程序需要
  53          在任何时间改变a、b值来改变脉宽的输
  54          出时间,从而控制舵机*/
  55          void keyscan(void)
C51 COMPILER V7.00  MAIN                                                                   06/09/2006 21:08:03 PAGE 2   

  56          {
  57   1              if(p16==0)
  58   1              {
  59   2              delay();
  60   2              if(p16==0)
  61   2                      {
  62   3          if(500<=a&&a<=2100)a+=50;
  63   3          p17=!p17;
  64   3              while(p16==0);
  65   3                       }
  66   2              }
  67   1              if(p15==0)
  68   1         {
  69   2              delay();
  70   2              if(p15==0)
  71   2                      {
  72   3          if(550<=a&&a<=2150)a-=30;
  73   3          p17=!p17;
  74   3          while(p15==0);
  75   3              }
  76   2               }   
  77   1      }
  78          void delay (void)
  79          {
  80   1         uint uidata;
  81   1         for(uidata=1;uidata<=500;uidata++);
  82   1      }


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


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

⌨️ 快捷键说明

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