This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好,
我正在尝试将超声波传感器配置到MSP。 在P1IES之后,程序在中断内部循环。 我不确定是语法问题还是中断的设置。 我找到了用于MSPG系列的示例代码,我转换了语法上的一些内容,但可能并非所有内容都正确。 代码如下
谢谢你。
#include <MSP4S.h>
Int milliseconds;
内部距离;
长传感器;
Void主(void)
{
/CSCTL1 = DCOFSEL_0; //子主时钟1MHz
WDTCTL = WDTPW + WDTHOLD; //停止WDT
TA1CCTL0 = CCIE; // CCR0中断已启用
TA1CCR0 = 1000; // 1MHz时为1ms
TA1CTL = tassel_2 + MC_1; // SMCLK,upmode
//TA1CTL = tassel__ACLK | MC__continuous;
P1IFG = 0x00; //清除所有中断标志
P1DIR |= 0x01; // WFP 1.0 作为LED的输出
P1OUT &=~0x01; //关闭LED
__bis_sr_register (GIE);
//_BIS_SR (GIE); //全局中断启用
而(1){
P1IE &=~0x01; //禁用interupt
P1DIR |= 0x02; //触发引脚作为输出
P1OUT |= 0x02; //生成脉冲
__DELAY周期(10); //用于10us
P1OUT (输出)&=~0x02; //停止脉冲
P1DIR &=~0x04; //制作引脚WFP 1.2 输入(ECHO)
P1IFG = 0x00; //清除标记以防之前发生任何事情
P1IE |= 0x04; //在回波引脚上启用interupt
P1IES &=~0x04; //回波引脚上的上升沿
__DELAY周期(3万); //延时30毫秒(在此时间之后,如果没有检测到物体,回波超时)
距离=传感器/58; //将回波长度转换为cm
如果(距离< 20 &&距离!= 0) P1OUT |= 0x01; //如果距离小于20 cm 且距离不为0,则打开LED。
否则P1OUT &=~0x01;
}
}
#pragma vector=Port1_vector
__interrupt void Port_1 (void)
{
如果(P1IFG&0x04) //是否有中断待处理?
{
如果(!(P1IES&0x04)//这是上升边缘吗?
{
TA1CTL|=TALCLR; //清除定时器A
毫秒= 0;
P1IES |= 0x04; //下降边缘
}
否则
{
传感器=(长)毫秒*1000 +(长) TA1R; //计算回波长度
}
P1IFG &=~0x04; //清除标志
}
}
#pragma vector=TIMER0_A0_vector
__interrupt void Timer_A (void)
{
毫秒++;
}