工具/软件:WEBENCH设计工具
我正在尝试测量从一个上升沿到下一个上升沿的脉冲计数、为此、我在外部为 MCU 的一个引脚提供1Hz 脉冲。 我已经设置了一个计时器、也进行了端口设置、但我无法为脉冲计数建立逻辑。 我尝试了各种逻辑、但仍然无法找到计数。 我还在下面附上我的代码。 忽略我已声明但未在代码中使用的内容。
#include "io430f6779a.h"
#define ENABLE_GIE _ bis_SR_register (GIE)
#define FLAG_STOP 0
#define BIT_true (A、B) ((A)和(0x01<<(B)))
#define INPUT_PIN_STATUS BIT_TRUE (P1OUT、6)
#define OUTPUT PIN_STATUS BIT_TRUE (P1IN、6)
unsigned int OFFcount、total、off_set、count、CNT;
unsigned char Flag_Count;
字符 Flag_Stop;
读取无符号字符;
unsigned char Stat;
unsigned int High1[2]、Low1[2];
unsigned int old_off_set;
void Clock_Init();
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
Clock_Init();//时钟初始化
ENABLE_GIE;
P1IE |= BIT6;//Port1中断使能
P1SEL0 &=~ BIT6;//位选择
P1DIR &=~BIT6;//位方向
P1IN &=~BIT6;
P1IES &=~(BIT6);//边沿选择低到高
// P2IES |= BIT2;//边沿选择从高到低
TA0CCTL0= CCIE;//捕捉/比较中断使能
TA0CCR0 = 1050;// 1ms 秒
TA0CCTL1 = OUTMOD_7;//通过外部连接控制 TA
TA0CTL = tassel_2 | TACLR | MC_1;// SMCLK,向上计数模式
TA0EX0 = TAIDEX_7;//分频器
无符号长整型低电平、高电平;
Flag_Count = 1;
while (1)
{
WDTCTL = WDT_ARST_1000;//清除看门狗
if (Flag_Count = 1)
{
if (bit_true (P1IN、6))
{
High++;
}
其他
{
low++;
}
}
// Flag_Count =0;
}
}
//定时器溢出中断
#pragma vector=TIMER0_A0_VECTOR
_interrupt void TIMER0_A0_ISR (void)//8ms
{
// CNT++;
// OFFcount++;
// if (OFFcount>999)
if (OFF_SET)
{
OFFcount++;
}
// old_off_set=off_set;
// if (TAIFG)
//{
// Flag_Stop=1;
// OFFcount++;
//// total ++;
//// P1OUT ^= BIT6;
//}
//否则
//{
// OFFcount=0;
//
//}
}
//端口2中断
#pragma vector = Port1_vector
_interrupt void InterruptVectorPort1 ()
{
OFF_SET++;
P1IFG &=~(BIT6);
}
//Clock Initialli
空 Clock_Init()
{
UCSCTL6 &=~(XT1OFF);// XT1打开
UCSCTL6 |= XCAP_3;//内部负载电容
UCSCTL3 |= SELREF_XT1CLK;//设置 DCO FLL 基准= REFO
// PMMCTL0_H=PMMPW_H;
// PMMCTL0_L|=PMMCOREV_3;
操作
{
UCSCTL7 &=~XT1LFOFFG;//清除 XT1故障标志
} while (UCSCTL7 & XT1LFOFFG);//测试 XT1故障标志
// UCSCTL3 |= SELREF_2;//设置 DCO FLL 基准= REFO
UCSCTL4 |= SELA_2;//设置 ACLK = REFO
_bis_SR_register (SCG0);//禁用 FLL 控制循环
UCSCTL0 = 0x0000;//设置可能的最低 DCOx、MODx
UCSCTL1 = DCORSEL_6;//选择 DCO 范围16MHz 运行
UCSCTL2 = FLLD_0 | 510;//将 DCO 乘法器设置为8MHz
//(N + 1)* FLLRef = Fdco
UCSCTL6 = XT1DRIVE_1;//(243 + 1)* 32768 = 8MHz
//设置 FLL Div = fDCOCLK/2
_BIC_SR_register (SCG0);//启用 FLL 控制环路
// DCO 范围位已经存在时、DCO 的最坏情况稳定时间
//已更改 n x 32 x 32 x f_MCLK / f_FLL_reference。 请参阅5xx 中的 UCS 一章
// UG 进行优化。
// 32 x 32 x 8 MHz/32、768Hz = 250000 = MCLK 周期、DCO 才能稳定
_DELAY_CYCLES (250000);
//循环直到 XT1、XT2和 DCO 故障标志被清除
操作
{
UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG;//清除故障标志
} while (SFRIFG1 & OFIFG);//测试振荡器故障标志
}