Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all 3634 articles
Browse latest View live

求助,如何在MSP430F6736中编写通过UART发送命令的程序?

$
0
0

Ti的工程师,您好

我想求助,如何在MSP430F6736中编写通过UART发送字符的程序?

我在resource explorer中找到了一个参考程序,MSP430F673X_USCI_UART_STANDARD_TRANSCEIVER.c ,但是并不能使用。

程序描述为:

设备将在LPM0 / LPM3中等待(基于时钟源),直到收到UART字符。然后设备将回显收到的字符。里面没有涉及发送,无法运行成功。

我想知道我该学习些什么,才能实现基于UART的数据传输。或者您有没有其他的例程方便提供一下么?感激不尽!


进入LPM3后定时器选择SMCLK但仍然可以唤醒?

$
0
0

芯片:MSP430FR6972

问题描述:

我将一个定时器的时钟源配置为SMCLK,而SMCLK的时钟来源是DCO,然后我在主函数中进入LPM3,按照我的理解应该是进不去定时器中断的呀,但是我调试发现我仍然可以进入中断,所以想问一下是哪里配置有问题吗?

相关代码:

/*
* 函数名: MSP_Clock_Config
* 描述 : 时钟配置 ACLK=32.768KHz MCLK=DCO=16MHz SMCLK=1MHz
* 输入 : 无
* 返回 : 无
*/
void MSP_Clock_Config(void)
{
/* 外部晶振引脚配置 */
PJSEL0 |= BIT4 | BIT5;
FRCTL0 = FRCTLPW | NWAITS_1;
CSCTL0_H = CSKEY >> 8; /* Unlock CS registers */
CSCTL1 = DCORSEL | DCOFSEL_4; /* Set DCO to 16MHz */
CSCTL2 = SELA__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;/* Select clock source */
CSCTL3 = DIVA__1 | DIVS__16 | DIVM__1; /* Set divider */
CSCTL4 = HFXTOFF | LFXTDRIVE_0;
CSCTL4 &= ~LFXTOFF;
do
{
CSCTL5 &= ~LFXTOFFG;
SFRIFG1 &= ~OFIFG;
}while (SFRIFG1&OFIFG); /* Wait oscillate is ready*/
CSCTL0_H = 0; /* Lock CS registers */
}

/*
* 函数名: TimerA0_Init
* 描述 : 定时器A0初始化并启动
* 输入 : 无
* 返回 : 无
*/
void TimerA0_Init(void)
{
TA0CCTL0 = CCIE; /* TA0CCR0 interrupt enabled */
TA0CCR0 = 30000; /* 1s的定时 */
TA0CTL = TASSEL__SMCLK | MC__UP; /* ACLK, UP mode */
}

/*
* 函数名: Timer0_A0_ISR
* 描述 : 停止定时器A0通道0中断服务函数
* 输入 : 无
* 返回 : 无
*/
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0_ISR(void)
{
Device_Status.tim_test_flag=1;

LPM3_EXIT;
}

int main(void)
{
WDTCTL = WDTPW+WDTHOLD_L;
MSP_GPIO_Init();
MSP_Clock_Config();
#if USE_DEBUG
MSP_USCIA1_Init();
#endif
TimerA0_Init();
_EINT();
while(1)
{
if(Device_Status.tim_test_flag)
{
Device_Status.tim_test_flag=0;
Debug_LED1_Blink;/* 会进入到这里 */
}
LPM3;
}

}

MSP430F5529单片机ADC外部电压怎么设置成为参考电压

$
0
0

请问大佬们,我又两个问题,ADC中ADC12REF2_5v和ADC12SREF中选择参考电压源选择位,这两者是什么关系?

ADC里可以设置外部电压为参考电压,外部电压在哪个引脚输入,外部电压有没有限制?

谢谢大佬们!!!!!!  爱你们哦!!!!

MSP430G2上电瞬有大概率死机问题

$
0
0

系统由430和STM8L单片机组成,MSP430有两个IO口和ST单片机IO口通过电阻相连,系统上电瞬间有一定的概率造成430死机。如果把IO口断开则没出现死机的现象。因此怀疑是否是因为2个单片机先后初始化造成的死机问题。直接拉低430复位引脚430可以正常。

msp430 i2041中flash擦除问题?

$
0
0

我擦除的起始位0x1060

使用的段擦除,文档上面说是1kb。然后是13c0-13ff是校验位。

我把起始位移到0xFC0,擦除不成功。使用1060擦除一段,程序异常无法启动,一直在low_level_init.c中运行,tlv不通过。请问这个flash读写应该如何操作。

关于MSP430F6736芯片的UART示例程序的疑问

$
0
0

您好,我想请教大家一个技术问题。

已知图示UART程序,可以实现从“电脑虚拟串口”中接收数据并发送出去的功能。

其中红框框选的部分实现了从UCA0模式的RxBuf到TxBuf的数据传送。

我猜想过程如下:

“电脑虚拟串口”——》RxBuf——》TxBuf(等待数据被读取)

我想请问,如何实现从“MSP430F6736”中接收数据并发送出去的功能

MSP430F6736”——》RxBuf——》TxBuf(等待数据被读取)(尤其是“MSP430F6736”——》RxBuf过程不明白

不懂的地方

一、RxBuf为16字节,如果单次传输的数据大于16字节,如何处理? 

二、如何接收TxBuf中的数据?

三、请问哪里可以看到解决我提出的问题的示例代码?

四、我应该在什么位置添加这些代码?是不是在Main函数的末端?括号之前

简单讲讲逻辑就行,代码我可以自己写。但是如果能提供示例代码就更好了   ^_^。

我在网上找到了一些过时的代码,运行起来有很多bug,用不上,还看了TI的培训教程,还是不理解。所以最终来请教大家。

msp430 i2041 温度计算?sd24

$
0
0

sd24采样温度,应该如何计算转换为温度。

我得到的原始值是460W。应该如何换算为温度。文档上面没看明白。

电压计算文档还是描述的很清楚

MSP430F5529ADC的中断怎么配置

$
0
0

大佬们,MSP430F5529的ADC中有一个ADC12OVIE与ADC12TOVIE,不管配置哪个,程序到了__bis_SR_register(LPM4_bits + GIE);    都会直接跳到中断里#pragma vector = ADC12_VECTOR。 怎样让他只有达到了ADC最大值4095 再中断?       我在中断中配置了ADC12IE|=ADC12IE0;    

还有请问这个ADC12OVIE的意思就是达到了ADC12MEMx的最大值4095,就进入中断的意思吗?   还有那个ADC12TOVIE转换时间溢出是什么意思? 

谢谢大佬们  爱你们哦!!!!!


MSP430FR2353 批量下载程序

$
0
0

尊敬的TI技术支持你好!

       我们公司现在项目已经开发结束,想进行批量下载程序,不提供源码,通过bin、txt、hex都可以,网上查找了很多下载工具都不支持,这款芯片,MSP430FR2353,不知道咱们有好的建议没?通过调试工具能否完成下载,不提供源码,以及下载工具,

关于MSP430F6736芯片的UART示例程序的疑问

$
0
0

您好,我想请教大家一个技术问题。

已知图示UART程序,可以实现从“电脑虚拟串口”中接收数据并发送出去的功能。

其中红框框选的部分实现了从UCA0模式的RxBuf到TxBuf的数据传送。

我猜想过程如下:

“电脑虚拟串口”——》RxBuf——》TxBuf(等待数据被读取)

我想请问,如何实现从“MSP430F6736”中接收数据并发送出去的功能

MSP430F6736”——》RxBuf——》TxBuf(等待数据被读取)(尤其是“MSP430F6736”——》RxBuf过程不明白

不懂的地方

一、RxBuf为16字节,如果单次传输的数据大于16字节,如何处理? 

二、如何接收TxBuf中的数据?

三、请问哪里可以看到解决我提出的问题的示例代码?

四、我应该在什么位置添加这些代码?是不是在Main函数的末端?括号之前

简单讲讲逻辑就行,代码我可以自己写。但是如果能提供示例代码就更好了   ^_^。

我在网上找到了一些过时的代码,运行起来有很多bug,用不上,还看了TI的培训教程,还是不理解。所以最终来请教大家。

MSP430F149+CC1101,在接受信号时偶尔会出现内存溢出现象,请问怎样来解决?

$
0
0

程序结构是,CC1101空中唤醒模式,主程序LPM3模式,CC1101接受到信号产生中断1,唤醒MSP430,在主程序中进行信号接受处理,接受完毕后再次休眠,CC1101有在定时器中定时校准频率,现在出现的问题是,大部分时间程序运行很正常,但是在运行几天以后,偶尔在接受信号以后,程序里的全局变量数据错乱,这几个全局变量是写在FLASH中的,发生错乱以后,再从FLASH中重新读出数据,数据是正确的,判断错乱应该是内存溢出导致,请问有没有什么方法可以解决这个溢出问题?

////////////////////////////////////////以下是部分代码

INT8U leng =35; 
INT8U ModeChangeFlg=0;
INT8U RxBuf[27]; 

INT8U CC1101_TxBuf[33]; ///////////////////////////发送接收数组定义,这个大小会导致溢出吗????

//////////////////////

const RF_SETTINGS rfSettings =   /////////////////////////////////////////// CC1101设定
{
0x00,
0x08, // FSCTRL1 Frequency synthesizer control.
0x00, // FSCTRL0 Frequency synthesizer control.
0x10, // FREQ2 Frequency control word, high byte.
0xA7, // FREQ1 Frequency control word, middle byte.
0x62, // FREQ0 Frequency control word, low byte.
0x5B, // MDMCFG4 Modem configuration.
0xF8, // MDMCFG3 Modem configuration.
0x03, // MDMCFG2 Modem configuration.
0x22, // MDMCFG1 Modem configuration.
0xF8, // MDMCFG0 Modem configuration.

0x00, // CHANNR Channel number.
0x47, // DEVIATN Modem deviation setting (when FSK modulation is enabled).
0xB6, // FREND1 Front end RX configuration.
0x10, // FREND0 Front end RX configuration.
0x18, // MCSM0 Main Radio Control State Machine configuration.
0x1D, // FOCCFG Frequency Offset Compensation Configuration.
0x1C, // BSCFG Bit synchronization Configuration.
0xC7, // AGCCTRL2 AGC control.
0x00, // AGCCTRL1 AGC control.
0xB2, // AGCCTRL0 AGC control.

0xEA, // FSCAL3 Frequency synthesizer calibration.
0x2A, // FSCAL2 Frequency synthesizer calibration.
0x00, // FSCAL1 Frequency synthesizer calibration.
0x11, // FSCAL0 Frequency synthesizer calibration.
0x59, // FSTEST Frequency synthesizer calibration.
0x81, // TEST2 Various test settings.
0x35, // TEST1 Various test settings.
0x09, // TEST0 Various test settings.
0x0B, // IOCFG2 GDO2 output pin configuration.
0x06, // IOCFG0D GDO0 output pin configuration. Refer to SmartRF?Studio User Manual for detailed pseudo register explanation.

//0x04, // PKTCTRL1 Packet automation control.
//0x07,//PKTCTRL1by sheng 170913增加地址过滤d1-0为11,地址检查和0(0x00)和255(0xFF)广播
0x0f,//PKTCTRL1by sheng 170913增加地址过滤d1-0为11,地址检查和0(0x00)和255(0xFF)广播,2017108增加 CRC过滤d3为1时
0x05, // PKTCTRL0 Packet automation control.
0xf0, // ADDR Device address.//摇控器地址始终为0x01 bysheng20171009
0xff // PKTLEN Packet length.最大
};

void halRfWriteRfSettings(void) 
{
halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL2);//自已加的
// Write register settings
halSpiWriteReg(CCxxx0_FSCTRL1, rfSettings.FSCTRL1);
halSpiWriteReg(CCxxx0_FSCTRL0, rfSettings.FSCTRL0);
halSpiWriteReg(CCxxx0_FREQ2, rfSettings.FREQ2);
halSpiWriteReg(CCxxx0_FREQ1, rfSettings.FREQ1);
halSpiWriteReg(CCxxx0_FREQ0, rfSettings.FREQ0);
halSpiWriteReg(CCxxx0_MDMCFG4, rfSettings.MDMCFG4);
halSpiWriteReg(CCxxx0_MDMCFG3, rfSettings.MDMCFG3);
halSpiWriteReg(CCxxx0_MDMCFG2, rfSettings.MDMCFG2);
halSpiWriteReg(CCxxx0_MDMCFG1, rfSettings.MDMCFG1);
halSpiWriteReg(CCxxx0_MDMCFG0, rfSettings.MDMCFG0);
halSpiWriteReg(CCxxx0_CHANNR, rfSettings.CHANNR);
halSpiWriteReg(CCxxx0_DEVIATN, rfSettings.DEVIATN);
halSpiWriteReg(CCxxx0_FREND1, rfSettings.FREND1);
halSpiWriteReg(CCxxx0_FREND0, rfSettings.FREND0);
halSpiWriteReg(CCxxx0_MCSM0 , rfSettings.MCSM0 );
halSpiWriteReg(CCxxx0_FOCCFG, rfSettings.FOCCFG);
halSpiWriteReg(CCxxx0_BSCFG, rfSettings.BSCFG);
halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
halSpiWriteReg(CCxxx0_FSCAL3, rfSettings.FSCAL3);
halSpiWriteReg(CCxxx0_FSCAL2, rfSettings.FSCAL2);
halSpiWriteReg(CCxxx0_FSCAL1, rfSettings.FSCAL1);
halSpiWriteReg(CCxxx0_FSCAL0, rfSettings.FSCAL0);
halSpiWriteReg(CCxxx0_FSTEST, rfSettings.FSTEST);
halSpiWriteReg(CCxxx0_TEST2, rfSettings.TEST2);
halSpiWriteReg(CCxxx0_TEST1, rfSettings.TEST1);
halSpiWriteReg(CCxxx0_TEST0, rfSettings.TEST0);
halSpiWriteReg(CCxxx0_IOCFG2, rfSettings.IOCFG2);
halSpiWriteReg(CCxxx0_IOCFG0, rfSettings.IOCFG0); 
halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
//halSpiWriteReg(CCxxx0_ADDR, rfSettings.ADDR);//by sheng 20171110
halSpiWriteReg(CCxxx0_PKTLEN, rfSettings.PKTLEN);


halSpiWriteReg(CCxxx0_WOREVT1, 0x6F); //高位 0x0f
//halSpiWriteReg(CCxxx0_WOREVT1, 0x6f); //高位 0x0f
halSpiWriteReg(CCxxx0_WOREVT0, 0xc5); //低位,即0X08C5, TEVENT0=0.116 S, 116.3ms 
halSpiWriteReg(CCxxx0_WORCTRL, 0x48); //RC_PD=0;EVENT1=4;RC_CAL=1;WOR_RES=00;
halSpiWriteReg(CCxxx0_MCSM2, 0x01); //只侦测同步词汇,RX终止定时116.3*12.5%=14.53ms ,//这里没有测RSSI,省电效电差by sheng170916
//halSpiWriteReg(CCxxx0_MCSM2, 0x17); //只侦测同步词汇,RX终止定时116.3*12.5%=14.53ms ,//这里有测RSSI,省电效果好,但试验不行by sheng170921
}

////////////////////////////////////////////////////////////////////////////////////

INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length) //                       CC1101接受程序
{
WDTCTL = WDT_ARST_1000;
INT8U status[3];
INT8U packetLength;
INT8U i=leng*4;
halSpiStrobe(CCxxx0_SRX);
// WDTCTL = WDTPW + WDTHOLD;
// halWait(2000);
delay(2); 
while(P1IN & 0x10)

{

delay(2);

--i;

if(i<1)

return 0;

}
WDTCTL = WDTPW + WDTHOLD;
if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
{
packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
if (packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
{

halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //当第一个字节为节点地址时,读出所有接收到的数据
*length = packetLength; //把接收数据长度的修改为当前数据的长度


if(RxBuf[0]==halSpiReadReg(CCxxx0_ADDR)||RxBuf[0]==0xFF&&RxBuf[2]>=0x02&&RxBuf[2]<=0x20)//by sheng171008读入节点地址 
{
halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
RSSI_FIFO=status[0];
//RSSI_G=halSpiReadReg(CCxxx0_RSSI);
RSSI_G=status[0];
halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
return (status[1] & CRC_OK); //如果校验成功返回接收成功
}
}
else 
{
*length = packetLength;
halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
return 0;
}

else
return 0;

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#pragma vector=PORT1_VECTOR// 有无线信号进入中断1,唤醒主程序
__interrupt void Port_1(void)
{

//LPM3_EXIT;//退出LPM3
_DINT();//关总中断 
if (P1IFG & BIT4)
{

P1IE &= ~(BIT4);//关P1.4 中断
P1IFG &= ~(BIT4);

RXFlag=1; 

LPM3_EXIT;
}
_EINT(); 
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////

 if(RXFlag==1)//在main函数while1中进行收信号,接受完以后进入LPM3休眠状态,CC1101设置为空中唤醒模式

{

if( halRfReceivePacket(RxBuf,&leng))
{


if( (RxBuf[2]==0x17 )&&Mode==0)

LED1_1;
YLFlg=1;
if(COUNT<10)

COUNT=COUNT+1;
}
else
{COUNT=0;}

}

··········

halSpiStrobe(CCxxx0_SIDLE);
halSpiStrobe(CCxxx0_SRX);//进入接收状态
halSpiStrobe(CCxxx0_SWOR);//进入空中唤醒状态
// _EINT();
P1IFG &= ~(BIT4);
P1IE |= BIT4 ; 
if(Mode==0)

__bis_SR_register(LPM3_bits + GIE); 
} // Enter LPM3 w/interrupt
delay_ms(10);

、、、、、、、、、、、、、

#pragma vector=TIMERB0_VECTOR// 定时计数器B中每一小时校准一次天线
__interrupt void Timer_B (void)
{
_DINT();//关总中断
SIDCount++;
if(SIDCount>=3600)
{
SIDCount=0;
halSpiStrobe(CCxxx0_SIDLE);
halSpiStrobe(CCxxx0_SRX);//进入接收状态
halSpiStrobe(CCxxx0_SWOR);//进入空中唤醒状态
}

/////////////////////////////////////////////

MSP430F6736写FLASH失败

$
0
0

HI TI team:

      在使用F6736做产品时出现故障,通过无线工具读出来写入FLASH的值对发现为FLASH没有写进去的问题。请问下哪些问题能造成写FLASH失败呢?供电电压问题排除。

代码如下:

CCS下载程序,不提供源码的情况下,仅仅提供bin、txt、hex文件通过MSP430 FET430UIF下载有办法实现吗

$
0
0

我想通过CCS软件、以及在线调试工具(MSP430 usb-Debug-interface LSD-fet430UIF)以及提供的bin、txt、hex完成程序的下载,有办法实现吗?就是不提供源码给客户,仅仅提供二进制文件

MSP430F5529LPADC多通道转换,怎么设置?

$
0
0

我在ADC12CONSEQ中选择序列通道重复转换模式,我给A0、A1送入了电压,但ADC12MEM2和ADC12MEM3也有数值,与ADC12MEM1里的数值相近。我给A0、A2送入电压,ADC12MEM1和ADC12MEM3里的数值也与ADC12MEM2里的数值相似,这是为什么?

还有我设置ADC12INCH选择模拟输入通道什么用都没有,我看没有效果,这是为什么?

还有ADC12CSTARTADDx不用按照Ax来设置吧,就是A0不是一定对应ADC12CSTARTADD0吧!  还有在单次转换里,用A0和A1,好像只使用一个ADC12CSTARTADDx就可以,不用每个A0和A1都使用一个存储寄存器吧?

  谢谢大佬们,爱你们哦!!!!!

MSP430G2332 燒錄失敗

$
0
0

之前的提問, 不過並沒有得到解決, 請協助!! 謝謝~


RF430F5144 DataSheet

$
0
0

官网里没有 RF430F5144Datasheet,我该如何获得    540769792@qq.com谢谢。 

关于MSP430F2131的flash区写数据写入错误的问题讨论

$
0
0

现在我做了一款产品,使用的是TI的MSP430F2131作为主控MCU,出现了在flash中写入64个字节的固定数组时,内存区的数据在写的时候MEMORY内的数据不对或者出现上电后进行重新读写相同的数据到flash后,数据会变。后面换一块MCU后,发现不会出现这种情况。

上面是要写的数据:

上面是写数据的代码:

flash:

写数据的时候已经上锁了,但是内存区的数据还是会改变,如红色的01;按道理说上锁之后这部分的内存是不会有变化的。

在后面样机更换一个新的MCU后就没有这种情况发生,所以我得出的结论是MCU坏了。但是现在的问题是要找到会是什么原因导致MCU损坏,到底是MCU的质量问题还是由于本身样机的问题导致的。希望大神能够帮忙分析和指点@

msp 430fr5994烧录问题

MSP430G2553,I/O動作異常

$
0
0

我使用MSP430G2553 LaunchPad

將P2.3作為輸出,無論程序怎麼改變,P2.3都需要保持high。

但P2.3會在中斷程序發生時,瞬間變成low,不知道是不是設置有誤?

程序如下:

#include"msp430g2553.h"

#define PERIOD 200

#define naturalF 118800

 

int flag_IE=1;

int count=2;

 

void delayus(int us)

{

int i;

for(i=0;i<us;i++)

{

   __delay_cycles(1);

}

}

 

void main(void)

{

  

   WDTCTL=WDTPW+WDTHOLD;

    

   DCOCTL|=DCO1+DCO0;

   BCSCTL1|=RSEL3;

   CACTL1 =CAON+ CAREF_0+CAIE + CAIES;

   CACTL2 = P2CA1 + P2CA0 + CAF;    

 

     P1DIR |= BIT0+BIT1+BIT4+BIT5+BIT6+BIT7;

     P1SEL2= 0;

     P1SEL = 0;

     P1REN=0;

      P2DIR |= BIT5+BIT1+BIT2+BIT3+BIT4+BIT7;

     P2SEL = 0;

     P2SEL2= 0;

     P2REN=0;

    

     P1OUT&=~BIT4+BIT5+BIT6+BIT7;

     P2OUT&=~BIT2+BIT4;

     P2OUT|=BIT5+BIT1+BIT3;

    

     __enable_interrupt();

}

 

#pragma vector=COMPARATORA_VECTOR

__interrupt void comp(void)

{

   //P1IE=0;

   CACTL1 &=~ CAIE;

   P2OUT|=BIT5+BIT3;

               if(flag_IE==1)

               {

                 P1OUT&=~BIT5+BIT6;

                 P2OUT&=~BIT1+BIT2;

                 P1OUT|=BIT4+BIT7;

                P2OUT|=BIT5+BIT4+BIT3;

                 delayus(26); //9.947us

                 //P2OUT|=BIT3+BIT7;

                 P2OUT&=~BIT1;

                 P2OUT|=BIT5+BIT2+BIT3;

                 P1OUT&=~BIT3+BIT4+BIT5+BIT6+BIT7;

                 delayus(22);

                 // P2OUT|=BIT3+BIT7;

                 P1OUT&=~BIT4+BIT7;

                 P1OUT|=BIT5+BIT6;

                 P2OUT&=~BIT1+BIT2;

                 P2OUT|=BIT5+BIT3;

                 delayus(26);

                 //P2OUT|=BIT3+BIT7;

                 P1OUT&=~BIT3+BIT4+BIT5+BIT6+BIT7;

                 P2OUT|=BIT5+BIT1+BIT3;

                 P2OUT&=~BIT2+BIT4;

                 flag_IE=0;

                 CACTL1 &=~ CAIES;

 

               }

              else          

               {

                 P1OUT&=~BIT4+BIT7;

                 P1OUT|=BIT5+BIT6;

                 P2OUT&=~BIT1+BIT2;

                 P2OUT|=BIT5+BIT3+BIT4;

                 delayus(26);

                 P2OUT&=~BIT1;

                 P2OUT|=BIT5+BIT2+BIT3+BIT4;

                 P1OUT&=~BIT3+BIT4+BIT5+BIT6+BIT7;

                 delayus(22);

                 P1OUT&=~BIT5+BIT6;

                 P2OUT&=~BIT1+BIT2;

                 P1OUT|=BIT4+BIT7;

                  P2OUT|=BIT5+BIT3+BIT4;

                 delayus(26);

                 P1OUT&=~BIT3+BIT4+BIT5+BIT6+BIT7;

                 P2OUT|=BIT5+BIT3+BIT1+BIT4;

                 P2OUT&=~BIT2+BIT4;

                 flag_IE=1;

                 CACTL1 |= CAIES;

                 // P1IES|=BIT0;                

               }

   CACTL1|= CAIE;

     CACTL1 &=~ CAIFG;

}

 

 

黃色為輸入訊號(介於P1.0 & P1.1)

藍色為P2.3的輸出訊號

放大之後如下:

 

  我該怎麼調整呢?

MSP430F5529定时器中断怎么,一个按键选择两个中断。

$
0
0

我希望MSP430F5529里,一个P1.1按键,能进入两个循环。就是点一下P1.1进入一个按键中断里,同时开启了计时器中断,在计时器中断里,我想在里面再按一下P1.1再进入一个中断,请问能做到吗?

两个中断向量,我用的PORT2_VECTOR和PORT1_VECTOR这两个中断向量,还有请问这两个中断向量都是共源中断,请问如果都使用的话,怎么区分,哪个中断对应哪个中断向量??

谢谢大佬们,爱你们哦!!!!!!

Viewing all 3634 articles
Browse latest View live