📄 sin.c
字号:
/******************************************
Project :正弦波演示程序
Chip tyoe :MEGA16
Clock frequence :8.0000MHZ
Comments: :PWM的频率为8K,通过滤波网络,输出周期16ms的正弦波
******************************************/
#include <iom16v.h>
#include <macros.h>
/*****128点正弦波样本表*****/
unsigned char a[128]={64,67,70,73,76,79,82,85,88,
91,94,97,100,103,105,107,109,111,113,115,117,119,121,122,123,124,125,126,126,127,127,127,127,127,127,126,126,126,125,124,124,123,122,120,119,117,115,113,111,109,106,103,102,99,96,93,91,88,85,82,79,76,73,70,67,64,60,57,54,51,48,45,42,39,36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,1,0,0,0,0,1,1,1,2,2,3,4,6,8,10,12,14,16,18,20,22,25,28,31,34,37,40,43,46,49,52,55,58,161,64};
unsigned int i=0x00;
/*****端口初始化*****/
void port_init(void)
{
DDRD=0xff;
PORTD=0xff;
}
/*****定时器1初始化*****/
void timer1_init(void)
{
TCCR1A = 0x00;
TCCR1B = 0x00; //关定时器
TCNT1H = 0x00; //设置计数初值
TCNT1L = 0x00;
OCR1B = 0x0000;
TCCR1A = 0xa2;
//9位相位修正PWM,无预分频
TCCR1B = 0x01;
}
/*****中断服务程序*****/
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
if(i>127)
i=i-128;
OCR1B=a[i]*4;
i=i+1;
}
/*****主函数*****/
void main(void)
{
port_init();
timer1_init();
TIMSK = 0x04; // T/C1溢出中断允许
SEI(); // 使能全局中断
while(1)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -