zoukankan      html  css  js  c++  java
  • [KeilC51]软件简单PWM波生成

    应用在某些硬件资源不够用的情况下,不是很精确,频率的话也不是很好调节;

    原理就是“J满则溢”。

    1.中断1服务程序不改变占空比:

    2.终端1服务程序改变占空比:(明显可以看到波形随时间变化推移)

    例程代码如下:

     1 #include <reg52.h>
     2 // CPU  STC89C52RC 12T 11.0592M的晶振
     3 #define LED_PORT P0
     4 sbit P0_0 = LED_PORT^0;
     5 sbit P0_1 = LED_PORT^1;
     6 sbit P0_2 = LED_PORT^2;
     7 sbit P0_3 = LED_PORT^3;
     8 sbit P0_4 = LED_PORT^4;
     9 sbit P0_5 = LED_PORT^5;
    10 sbit P0_6 = LED_PORT^6;
    11 sbit P0_7 = LED_PORT^7;
    12 
    13 unsigned char sum_temp0,sum_temp1,sum_temp2,sum_temp3,sum_temp4,sum_temp5,sum_temp6,sum_temp7;
    14 unsigned char incre_step0,incre_step1,incre_step2,incre_step3,incre_step4,incre_step5,incre_step6,incre_step7;
    15 void main(void){
    16     TMOD = 0x21; 
    17     TCON = 0x00;
    18 
    19     TR1=0;
    20     TH1=(65536-50000)/256; 
    21     TL1=(65536-50000)%256; 
    22     TF1=0; 
    23     TR1=1;
    24     ET1=1;
    25     EA = 1;
    26  sum_temp0 = sum_temp1 = sum_temp2 = sum_temp3 = sum_temp4 = sum_temp5 = sum_temp6 = sum_temp7 = 0;
    27  incre_step0 = 0x10;
    28  incre_step1 = 0x30;
    29  incre_step2 = 0x50;
    30  incre_step3 = 0x70;
    31  incre_step4 = 0x90;
    32  incre_step5 = 0xb0;
    33  incre_step6 = 0xd0;
    34  incre_step7 = 0xf0;
    35     while(1){
    36         sum_temp0 += incre_step0;
    37         P0_0 = CY;
    38         sum_temp1 += incre_step1;
    39         P0_1 = CY;
    40         sum_temp2 += incre_step2;
    41         P0_2 = CY;
    42         sum_temp3 += incre_step3;
    43         P0_3 = CY;
    44         sum_temp4 += incre_step4;
    45         P0_4 = CY;
    46         sum_temp5 += incre_step5;
    47         P0_5 = CY;
    48         sum_temp6 += incre_step6;
    49         P0_6 = CY;
    50         sum_temp7 += incre_step7;
    51         P0_7 = CY;
    52         }
    53 }
    54 
    55 
    56 
    57 void Timer1_ISR(void) interrupt 3
    58 {
    59     static unsigned short int count = 0;
    60     unsigned char temp;
    61     TR1=0;
    62     TH1=(65536-50000)/256; 
    63     TL1=(65536-50000)%256; 
    64     TF1=0; 
    65     TR1=1;
    66     
    67     count++;
    68     
    69 #ifdef __NOTCHANGE__
    70     return ;
    71 #endif  //如果不管变就直接返回
    72     
    73     if(count == 500){
    74         temp = incre_step0;
    75         incre_step0 = incre_step1;
    76         incre_step1 = incre_step2;
    77         incre_step2 = incre_step3;        
    78         incre_step3 = incre_step4;
    79         incre_step4 = incre_step5;
    80         incre_step5 = incre_step6;
    81         incre_step6 = incre_step7;
    82         incre_step7 = temp;
    83         count = 0;
    84         
    85     }
    86 }
    soft_Pwm.c

    逻辑分析仪数据如下:

    https://files.cnblogs.com/alimy/softPWM_logicdata.zip

    ~不再更新,都不让我写公式,博客园太拉胯了
  • 相关阅读:
    eclipse中如何修改编码格式
    如何让Div中的Table居中
    EL表达式和标准标签库
    jQuery获取option的一些常用方法
    第三十五章——过滤器和监听器
    第三十四章——java web的注册登录和留言板的制作
    关于九大内置对象的补充——application
    第三十三章——javaweb初识和九大内置对象
    学习记录
    从 HTTP 到 HTTPS 再到 HSTS
  • 原文地址:https://www.cnblogs.com/alimy/p/3486084.html
Copyright © 2011-2022 走看看