金牌会员
- 积分
- 1600
- 威望
- 746
- 贡献
- 464
- 兑换币
- 490
- 注册时间
- 2012-12-9
- 在线时间
- 195 小时
|
3贡献
/***********************************************************************************************************
* Description : 测量从IC0输入的信号的频率
***********************************************************************************************************/
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <stdio.h>
#define TIMCLK 8000000
static unsigned int cnt[2], freq;
/***********************Functions Prototype*************************/
/**********************************************************************************************************
* Function Name : SCI_Init
* Description : Initialize SCI
**********************************************************************************************************/
void SCI_Init(void)
{
SCI0BD = 52; //9600 bps
SCI0CR1 = 0x00;
SCI0CR2 = 0x0c; //允许使用SCI发送器和SCI接收器
}
/**********************************************************************************************************
* Function Name : IcInit
**********************************************************************************************************/
void IcInit(void)
{
TIOS_IOS0 = 0; //选取0作为IC
TIE_C0I = 1; //使能通道0中断
TCTL4_EDG0A = 1;
TCTL4_EDG0B = 0; //检测上升沿
TSCR1_TEN = 1;
}
/**********************************************************************************************************
* Function Name : InputCapture
* Description : 中断服务程序,计算信号频率
**********************************************************************************************************/
#pragma CODE_SEG NON_BANKED
void interrupt 8 InputCapture(void)
{
static unsigned char i = 0;
char freqence[16];
char counter[16];
TFLG1_C0F = 1;
cnt[i++] = TC0;
if (i == 1)
{
freq = TIMCLK / (cnt[1] - cnt[0]);
sprintf(counter,"cnt[0] = %d\n",cnt[0]);
putstr(counter);
sprintf(counter,"cnt[1] = %d\n",cnt[1]);
putstr(counter);
sprintf(freqence,"Source freqence:%d\n\n",freq);
putstr(freqence);
DisableInterrupts;
}
}
#pragma CODE_SEG DEFAULT
/**********************************************************************************************************
* Function Name : main
**********************************************************************************************************/
void main(void)
{
freq = 0;
SCI_Init();
IcInit();
putstr("\nNow start input capture:\n");
EnableInterrupts;
}
程序可以测出cnt[0],但是测出的cnt[1]一直是0,大家可以帮忙看看吗?
|
|