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

📄 main.lst

📁 8051中利用时钟控制实现PWM输出的简单模拟程序,用LED灯的亮度来模拟显示脉宽
💻 LST
字号:
C51 COMPILER V7.10   MAIN                                                                  01/26/2007 08:52:41 PAGE 1   


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

line level    source

   1          #include <reg52.h>
   2          #include <stdio.h>
   3          
   4          #define UCHAR unsigned char
   5          #define UINT unsinged int
   6          
   7          sbit IN0 = P3^2;
   8          sbit IN1 = P3^3;
   9          sbit PWM = P3^4;
  10          
  11          UCHAR PWMRegH, PWMRegL;
  12          
  13          void Delay(UCHAR i);
  14          UCHAR keyscan(void);
  15          
  16          UCHAR key, i = 1;
  17          
  18          void ld_int0 (void) interrupt 0 using 1         //外部中断0响应函数
  19          {
  20   1              EX0 = 0;
  21   1              Delay(10);
  22   1      
  23   1              PWM = 0;                                //使能PWM
  24   1              TR1 = 1;
  25   1              printf("enable");
  26   1      
  27   1              i = 1;
  28   1              PWMRegH = (800 - 25 * 8 )/256;
  29   1              PWMRegL = (800 - 25 * 8 )%256;
  30   1              P1 = ~0x01;
  31   1      
  32   1              while(IN0 == 0)Delay(10);
  33   1              EX0 = 1;
  34   1      }
  35          
  36          void Tim0_int(void) interrupt 1 using 1         //定时器0响应函数
  37          {
  38   1              PWM = 0;                                //输出低电平
  39   1              TR0 = 0;                                //定时器停止计数
  40   1      }
  41          
  42          void ld_int1 (void) interrupt 2 using 1         //外部中断1响应函数
  43          {
  44   1              EX1 = 0;                                
  45   1              Delay(10);
  46   1      
  47   1              PWM = 1;                                //关闭PWM
  48   1              TR1 = 0;
  49   1              printf("disable");
  50   1      
  51   1              while(IN1 == 0)Delay(10);
  52   1              EX1 = 1;
  53   1      }
  54          
  55          void Tim1_int(void) interrupt 3 using 1
C51 COMPILER V7.10   MAIN                                                                  01/26/2007 08:52:41 PAGE 2   

  56          {
  57   1              PWM = 1;                                //PWM输出高电平
  58   1      
  59   1              TH0 -= PWMRegH;                         //设定占空比
  60   1              TL0 -= PWMRegL;
  61   1              TR0 = 1;
  62   1      
  63   1              TH1 -= 800/256;
  64   1              TL1 -= 800%256;
  65   1      
  66   1      }
  67          
  68          main()
  69          {       
  70   1              SCON  = 0x50;                           //初始化寄存器                  
  71   1          TMOD |= 0x11;               
  72   1          TH1   -= 800/256;
  73   1              TL1   -= 800%256;               
  74   1              TH0   -= PWMRegH;
  75   1              TL0   -= PWMRegL;
  76   1          TR1   = 0;                  
  77   1              TR0   = 0;
  78   1              TI    = 1;                           
  79   1              IE    = 0x8F;
  80   1      
  81   1              RCAP2H = 0xFF;                          //设置串口波特率
  82   1              RCAP2L = 0xDB;                          //9600 @ 11.0592
  83   1              T2CON = 0x34; 
  84   1      
  85   1              PWMRegH = (800 - 25 * 8)/256;
  86   1              PWMRegL = (800 - 25 * 8)%256;
  87   1      
  88   1              printf("start");
  89   1      
  90   1              for(;;)
  91   1              {
  92   2                      key = keyscan();                //键扫描
  93   2      
  94   2                      if(key == 0x11)                 //根据键值调整占空比
  95   2                      {
  96   3                              if(i <= 8)
  97   3                              {
  98   4                                      i++;
  99   4                                      PWMRegH = (800 - 25 * (8 - i))/256;
 100   4                                      PWMRegL = (800 - 25 * (8 - i))%256;
 101   4                                      P1 = ~(0x01 << (i-1));
 102   4                              } 
 103   3                              key = 0;
 104   3                      }
 105   2      
 106   2                      if(key == 0x21)
 107   2                      {
 108   3                              if(i > 0)
 109   3                              {
 110   4                                      i--;
 111   4                                      PWMRegH = (800 - 25 * (8 - i))/256;
 112   4                                      PWMRegL = (800 - 25 * (8 - i))%256; 
 113   4                                      P1 = ~(0x01 << (i-1));
 114   4                              }
 115   3                              key = 0;
 116   3                      }
 117   2              }       
C51 COMPILER V7.10   MAIN                                                                  01/26/2007 08:52:41 PAGE 3   

 118   1      }
 119          
 120          void Delay(UCHAR i)
 121          {
 122   1              UCHAR j;
 123   1              for(i; i > 0; i--)
 124   1                      for(j = 200; j > 0; j--);
 125   1      }
 126          
 127          UCHAR keyscan(void)                             //键扫描程序
 128          {
 129   1              UCHAR sccode,recode;
 130   1              P2 = 0xF0;
 131   1              if((P2 & 0xF0) != 0xF0)
 132   1              {
 133   2                      Delay(3);
 134   2                      if((P2 & 0xF0) != 0xF0)
 135   2                      {
 136   3                              sccode = 0xFE;
 137   3                              while((sccode & 0x10) != 0)
 138   3                              {
 139   4                                      P2 = sccode;
 140   4                                      if((P2 & 0xF0) != 0xF0)
 141   4                                      {
 142   5                                              recode = (P2 & 0xF0) | 0x0F;
 143   5                                              while((P2 & 0xF0) != 0xF0)Delay(3);
 144   5                                              return((~sccode) + (~recode));
 145   5                                      }
 146   4                                      else
 147   4                                              sccode = (sccode << 1) | 0x01;
 148   4                              }
 149   3                      }
 150   2              }
 151   1      
 152   1              return 0;
 153   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    466    ----
   CONSTANT SIZE    =     21    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4    ----
   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 + -