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

📄 df_timera.c

📁 430 单片机控制产生正玄波输出 周期频率可以调节
💻 C
字号:
/*****************************************************************************\
时器A定时,产生中断,输出锯齿波和正弦波
使用TACTL0
工作模式:增计数模式
定时器时钟源:MCLK 8MHz

\*****************************************************************************/


#include"math.h"




signed int* h;
unsigned int fr=60;



/*****************************************************************************
初始化
*****************************************************************************/
void TimerAInit()
{
	TACTL=TASSEL_2; //选择时钟源为 MCLK
	h=(signed int*)0xf100; //在此初始化正弦列表的头指针
	TACCTL0 = CCIE;            //允许定时器中断
}



/*****************************************************************************
打开或关闭定时器
doit: 0:停止   100:运行  ti: 定时时间
*****************************************************************************/
void GotimeDfA(unsigned char doit,unsigned int ti)
{
	if(doit==100)
	{      
	        TACCR0=ti;	   //设置定时时间
	    
		TACTL |= MC_1+TACLR;	//打开定时器
	}
	else if(doit==0)
	{
		TACTL &= ~MC0;		//关闭定时器
	}
}


/****************************************************************************************
向FLASH写入正弦列表
开头地址为 adrs ,写入一个周期共628个值
********************************************************************************************/
void write(unsigned int adrs)
{
    signed int* adr;
     int i;
     float k;
    FCTL2=FWKEY+FSSEL0+FN0; 
    adr=(signed int *)adrs;
    FCTL1=FWKEY+ERASE;
    FCTL3=FWKEY;
    *adr=0;
    FCTL1=FWKEY+WRT;
    k=0;
    for(i=0;i<629;i++)
    {
        *adr++=(signed int)((sin(k))*2048);
        k=k+0.01;  
    }
}
/*****************************************************************************
捕获/比较0中断
*****************************************************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0(void)   
{  
      
	
	//捕获/比较0中断

    if(h<(signed int*)0XF4E6)
    {
        h++;
    }			
    else
    {
	h=(signed int*)0xf000;
    }
    get_data=ftw_fm+(*h)*add_fm;
    send_data[2]=(unsigned char )get_data;
    send_data[3]=(unsigned char )(get_data>>8);
    send_data[4]=(unsigned char )(get_data>>16);
    send_data[5]=(unsigned char )(get_data>>24);
    send(6, FTW1,send_data);
    if(P2IFG&BIT4) 
    {
         GotimeDfA(0,100);
    }   
    P2IFG=0;
}
		
	




⌨️ 快捷键说明

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