久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: STC12單片機兩路PWM輸出(占空比可調)程序 [打印本頁]

作者: 大風吹過啊    時間: 2017-8-4 18:39
標題: STC12單片機兩路PWM輸出(占空比可調)程序
/****************************************************************************
*
*
*                                                     PWM輸出(可調)程序
*
*                                                                Don.2017.7
*
*****************************************************************************/

#include <STC12C5A60S2.h>
#include <intrins.h>

typedef unsigned char uchar8;

sbit PWM0_ADD = P2 ^ 0;
sbit PWM0_CUT = P2 ^ 1;
sbit PWM1_ADD = P2 ^ 2;
sbit PWM1_CUT = P2 ^ 3;


void PWM0_OUT( )
{
        CCON = 0x00;
        //PCA控制器清零
        
        CL = 0;
        CH = 0;
        //16位PAC計數器清零
        
/*
        TMOD = 0x42;
        //定時器0工作在模式2(8位自動重裝)
        TL0 = ;
        TH0 = ;
        //寫入初值
        //計算: 初值 = (256 - 外部晶振頻率 / PCA時鐘源頻率)H
        //PCA時鐘源頻率 = 256 * PWM頻率
        
        AUXR = 0X80;
        //T0工作在1T模式
        
        TR0 = 1;
        //T0開始工作
                    */
        
        CMOD = 0x08;
        //設置計數器時鐘源
        //0x00:系統時鐘/12, 0x02:系統時鐘/2
        //0x04: 定時器T0溢出脈沖, 0x06: P1.2引腳輸入的外部時鐘        
        //0x08:系統時鐘, 0x0a: 系統時鐘/4
        //0x0c: 系統時鐘/6, 0x0e: 系統時鐘/8
        //PWM波的頻率 = CMOD數值(10位)/256
        
        CCAPM0 = 0x42;
        //8位PWM P1.3輸出
        //0x42:無中斷;0x53:下降沿產生中斷;
        //0x63:上升沿產生中斷;0x73:跳變沿產生中斷
        
        CCAP0L = 0xc0;
        CCAP0H = 0xc0;
        //占空比設置:數值 / 256 * 100%
        //0xc0:占空比為25%,0x80:占空比為50%,0x40:占空比為75%
        
        CR = 1;
}

void PWM1_OUT( )
{
        CCON = 0x00;
        //PCA控制器清零
        
        CL = 0;
        CH = 0;
        //16位PAC計數器清零
        
        CMOD = 0x08;
        //設置計數器時鐘源
        //0x00:系統時鐘/12, 0x02:系統時鐘/2
        //0x04: 定時器T0溢出脈沖, 0x06: P1.2引腳輸入的外部時鐘        
        //0x08:系統時鐘, 0x0a: 系統時鐘/4
        //0x0c: 系統時鐘/6, 0x0e: 系統時鐘/8
        //PWM波的頻率 = CMOD數值(10位)/256
        
        CCAPM1 = 0x42;
        //8位PWM P1.3輸出
        //0x42:無中斷;0x53:下降沿產生中斷;
        //0x63:上升沿產生中斷;0x73:跳變沿產生中斷
        
        CCAP1L = 0xc0;
        CCAP1H = 0xc0;
        //占空比設置:數值 / 256 * 100%
        //0xc0:占空比為25%,0x80:占空比為50%,0x40:占空比為75%
        
        CR = 1;
}

void PWM0_Alter(uchar8 type0, uchar8 change0)
//type = 0減占空比,1增加占空比 change: 0x0c約5%,0x05約2%
{
        if(type0  ==  0)
        {
                    if(CCAP0L < 0xe6)   //<90%
                {
                        CCAP0L += change0;
                    CCAP0H += change0;
                }
        }
        else
        {        
                if(CCAP0L > 0x19)  //>10%
                    {
                        CCAP0L -= change0;
                           CCAP0H -= change0;
                }
        }  
}

void PWM1_Alter(uchar8 type1, uchar8 change1)
//type1 = 0減占空比,1增加占空比 change1: 0x0c約5%,0x05約2%
{
        if(type1  ==  0)
        {
                    if(CCAP1L < 0xe6)   //<90%
                {
                        CCAP1L += change1;
                    CCAP1H += change1;
                }
        }
        else
        {        
                if(CCAP1L > 0x19)  //>10%
                   {
                        CCAP1L -= change1;
                           CCAP1H -= change1;
                }
        }  
}

void PWM_Alter_Drive( )
{
        if(PWM0_ADD == 0)
        {
                _nop_( );_nop_( );_nop_( );_nop_( );               
                //按鍵消抖
                while(PWM0_ADD == 0);        
                //按鍵釋放才跳出執行下一步
                PWM0_Alter(1, 0x05);
        }
        if(PWM0_CUT == 0)
        {
                _nop_( );_nop_( );_nop_( );_nop_( );
                while(PWM0_CUT == 0);
                PWM0_Alter(0, 0x05);
        }

        if(PWM1_ADD == 0)
        {
                _nop_( );_nop_( );_nop_( );_nop_( );
                //按鍵消抖
                while(PWM1_ADD == 0);        
                //按鍵釋放才跳出執行下一步
                PWM1_Alter(1, 0x05);
        }
        if(PWM1_CUT == 0)
        {
                _nop_( );_nop_( );_nop_( );_nop_( );
                while(PWM1_CUT == 0);
                PWM1_Alter(0, 0x05);
        }
}

void main( )
{
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        //配置標準I/O口
        PWM0_OUT( );
        PWM1_OUT( );
        while(1)
        {               
                 PWM_Alter_Drive( );
         }
}


作者: 大風吹過啊    時間: 2017-8-4 19:49
可調占空比




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久国产高清 | 亚洲福利视频网 | 精品国产一区二区三区免费 | 日韩成人影院在线观看 | 欧美久久电影 | 亚州av| 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 黄片毛片 | 久久夜色精品国产 | 一区二区三区国产好的精 | 久久精品成人 | 99精品国自产在线观看 | 爱爱小视频 | 欧美一区二区综合 | 色噜噜狠狠色综合中国 | 欧美成人一区二区 | 黄色片网站国产 | 日韩精品一区二区三区中文字幕 | 亚洲日韩视频 | 午夜一级大片 | 国产精品久久久亚洲 | 国产中文字幕网 | 精品一区二区三区四区外站 | 久久精品色欧美aⅴ一区二区 | 午夜久久久 | 亚洲欧美日韩精品久久亚洲区 | 可以在线看的黄色网址 | 福利社午夜影院 | 亚洲精品免费视频 | 91精品国产91久久久久久最新 | 久久99网 | 国产精品一级 | 国产乱码精品1区2区3区 | 欧美一区二区三区电影 | 国产96在线| 中文字幕在线一区二区三区 | 久久亚洲综合 | 美女二区 | 日韩和的一区二区 | 亚洲午夜视频 | 午夜精品久久久久久久久久久久久 |