新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ATmega128(PWM—time 0)

        ATmega128(PWM—time 0)

        作者: 時間:2016-11-10 來源:網絡 收藏
        //atmega128的定時器實現快速PWM輸出示例程序,定時器0溢出中斷的方式

        //輸出PWM波形驅動發光二極管,亮度由暗到滅,呈閃爍狀態
        //樣值采取正弦波公式,示例如下
        //正弦波采樣值計算公式
        // f(x)=128+127*sin(2*3.1415*x/127) x=[0....127]
        //PWM輸出也可通過控制LED發光來直觀的看到效果,亮度持續的變化
        //可以通過選跳線帽選擇是通過LED直接查看還是通過濾波器查看實際波形
        //編譯環境 AVR Studio 4.17/AVR GCC
        //系統時鐘7.3728MHZ,設置熔絲位為外部高頻石英晶體振蕩,啟動時間4.1ms
        //***********************************************************************
        //包含文件
        //***********************************************************************

        本文引用地址:http://www.104case.com/article/201611/317437.htm

        #include
        #include
        #define F_CPU7372800// 單片機主頻為7.3728MHz,用于延時子程序
        #include
        #include
        #include
        #include //中斷信號頭文件

        //***********************************************************************
        //定義變量區
        //***********************************************************************
        #define f_count 254 //0CR0寄存器初始值
        #define timer_clk 0x07
        #define delay_us(x) _delay_us(x) //AVR GCC延時函數 x(us)
        #define delay_ms(x) _delay_ms(x) //AVR GCC延時函數 x(ms)

        #define uchar unsigned char
        #define uint unsigned int
        #define ulong unsigned long


        uchar auc_SinParam[128] = {
        128,134,140,147,153,159,165,171,177,182,188,193,198,204,208,213,
        218,222,226,230,233,237,240,242,245,247,249,251,252,253,254,254,
        254,254,253,252,251,250,248,246,244,241,238,235,232,228,224,220,
        215,211,206,201,196,191,185,179,174,168,162,156,150,144,137,131,
        125,119,112,106,100,94,88,82,77,71,65,60,55,50,45,41,
        36,32,28,24,21,18,15,12,10,8,6,5,4,3,2,2,
        2,2,3,4,5,7,9,11,14,16,19,23,26,30,34,38,
        43,48,52,57,63,68,74,79,85,91,97,103,109,116,122,128}; // 128點正弦波樣本值

        uchar x_SW = 8,X_LUT = 0;


        //*************************************************************************
        //初始化子程序
        //*************************************************************************
        void system_init() //IO口初始化
        {

        PORTB=0xff; //PB設置為輸出
        DDRB=0xff; //上拉電阻無效
        }

        void timer0_init() //定時器初始化
        {
        TCCR0=0x68|timer_clk; //快讀PWM模式,OC0輸出,分頻
        OCR0=128; //OCR0比較匹配寄存器值
        TIFR=0x01; //清中斷標志位
        TIMSK=0x01; //使能定時器0溢出中斷
        }


        //*************************************************************************
        //定時器0中斷服務子程序
        //*************************************************************************

        ISR(TIMER0_OVF_vect) //中斷服務程序
        {
        X_LUT += x_SW; // 新樣點指針
        if (X_LUT > 127) X_LUT -= 128; // 樣點指針調整
        OCR0 =auc_SinParam[X_LUT]; // 取樣點指針到比較匹配寄存器
        }

        //*************************************************************************
        //主程序
        //*************************************************************************

        int main(void)
        {
        system_init(); //系統初始化.PB3輸出PWM波形
        timer0_init(); //定時器0初始化,完成PWM相關配置
        SREG|=0x80; //開啟全局中斷
        while(1)
        {
        }
        }



        關鍵詞: ATmega128PWMtim

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 仙居县| 磴口县| 镶黄旗| 台安县| 图们市| 万荣县| 胶南市| 徐闻县| 于田县| 女性| 吴桥县| 鱼台县| 乐至县| 平定县| 龙井市| 吉安市| 南平市| 柘荣县| 苍梧县| 盖州市| 忻州市| 区。| 洮南市| 临漳县| 门头沟区| 霸州市| 巴中市| 武鸣县| 滨州市| 探索| 马龙县| 汝城县| 隆化县| 周口市| 黄龙县| 卢氏县| 高尔夫| 涞源县| 朝阳县| 乐平市| 南阳市|