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

📄 pwm.c

📁 atmega16 用pwm 产生正弦波 示波器观察ok
💻 C
字号:
#include <iom16.h>
#include <intrinsics.h>

__flash unsigned char auc_SinParam[128] = {
128,134,140,147,153,159,165,171,177,182,188,193,199,204,209,213,
218,222,226,230,234,237,240,243,245,248,250,251,253,254,254,255, 
255,255,254,254,253,251,250,248,245,243,240,237,234,230,226,222,
218,213,209,204,199,193,188,182,177,171,165,159,153,147,140,134,
128,122,116,109,103,97,91,85,79,74,68,63,57,52,47,43, 38,34,30,
26,22,19,16,13,11,8,6,5,3,2,2,1, 1,1,2,2,3,5,6,8,11,13,16,19,22
,26,30,34, 38,43,47,52,57,63,68,74,79,85,91,97,103,109,116,122}; // 128点正弦波样本值

unsigned char x_SW = 8,X_LUT = 0;
// T/C0 溢出中断服务

#pragma vector =  TIMER0_OVF_vect
__interrupt void TIMER0_OVF()
{
    X_LUT += x_SW; // 新样点指针
    if (X_LUT > 127) X_LUT -= 128; // 样点指针调整
    OCR0 = auc_SinParam[X_LUT]; // 取样点指针到比较匹配寄存器
    // OCR0+=1;
}
void main(void)
{
    DDRB=0x08; // PB3输出方式,作为OC0输出PWM波
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 4000.000 kHz
    // Mode: Fast PWM top=FFh
    // OC0 output: Non-Inverted PWM
    TCCR0=0x69;  //快速pwm  比较匹配发生时OC0A 清零 计数到TOP 时OC0 置位 无预分频
    OCR0=128;
    TIMSK=0x01; // 允许T/C0溢出中断
    __enable_interrupt();
    while(1);
}

⌨️ 快捷键说明

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