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

📄 sin.c

📁 单片机产生正玄波
💻 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 + -