📄 df_timera.c
字号:
/*****************************************************************************\
时器A定时,产生中断,输出锯齿波和正弦波
使用TACTL0
工作模式:增计数模式
定时器时钟源:MCLK 8MHz
\*****************************************************************************/
#include <MSP430x16x.h>
#include "df_timera.h"
#include "dac12.h"
//unsigned int iOut0=0;
unsigned int* h;
unsigned int fr=60;
/*****************************************************************************
初始化
*****************************************************************************/
void TimerAInit()
{
TACTL=TASSEL_2+TACLR+MC_1; //选择时钟源为 MCLK
h=(unsigned int*)0xf000; //在此初始化正弦列表的头指针
TACCTL0 = CCIE; //允许定时器中断
}
/*****************************************************************************
设置定时时间
ti:要定时的时间,与时钟源的频率有关
*****************************************************************************/
void SetTime(unsigned int ti)
{
TACCR0=ti; //定时时间
}
/*****************************************************************************
打开或关闭定时器
doit: 0:停止 100:运行 ti: 定时时间
*****************************************************************************/
void GotimeDfA(unsigned char doit,unsigned int ti)
{
if(doit==100)
{
SetTime(ti); //设置定时时间
TACTL |= MC_1+TACLR; //打开定时器
}
else if(doit==0)
{
TACTL &= ~MC0; //关闭定时器
}
}
/*****************************************************************************
捕获/比较0中断
*****************************************************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0(void)
{
//捕获/比较0中断
// DAC通道0输出锯齿波
//if(iOut0<0xFFF)
// iOut0++;
// else
//iOut0=0;
//Dac12Write(iOut0,0);
//DAC通道1输出正弦波
if(h<(unsigned int*)0XF4E6)
h+=1;
// h=(unsigned int*)(h&0XF4E6);
else
h=(unsigned int*)0xf000;
Dac12Write(*h,1);
if((P2IFG&BIT2)&&(fr<0x3995)) {
fr=fr+10;
GotimeDfA(100,fr);
}
if((P2IFG&BIT1)&&(fr>50)) {
fr=fr-10;
GotimeDfA(100,fr);
}
P2IFG=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -