您的位置 首页 观点

实时记载MSP430编程问题

编程中遇到了一个及其诡异的问题,发送缓存与接收缓存的LISTEN控制字为零同时两端未用线路连接的情况下,对发送缓存设置值时接收缓存也同时…

编程中遇到了一个及其怪异的问题,发送缓存与接纳缓存的LISTEN操控字为零一起两头未用线路衔接的状况下,对发送缓存设置值时接纳缓存也一起改变了,正在各种查看中,假如处理了会贴出处理方法。

问题处理了:单片机坏了!!!内部的LISTEN估量被连上了,这块单片机只能用来做为发送端了。
别的,今天还遇到了中止子程序不效果的状况,网上各种寻觅后发现程序中短少 _EINT();导致无法运转中止程序,奇怪的是TI给的演示程序里边都没有_EINT(),我猜测是因为IAR版别或许所用调试程序不同的原因吧。
现在两块单片机现已可以进行简略的单工通讯了,明日再来完善程序。
即:UCA1RXBUF = UCA1TXBUF

附上问题程序:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
Init_Keypad();
Init_LCD();
write_command(0x3f); //翻开显现
clear_LCD();
P5SEL = 0xC0; // P5.6,7 = USCI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL__ACLK; // ACLK
UCA1BR0 = 0x0D; // 2400
UCA1BR1 = 0; //
UCA1MCTL |= UCBRS_6 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE + UCTXIE; // Enable USCI_A0 RX,TX interrupt
while(1)
{
Key_Event(); //读取键值
if(key_Flag == 1)
{
key_Flag = 0;
UCA1TXBUF=key_val;
display_16_8((uchar *)&LCD_16_8[UCA1RXBUF][0],2,lie+72);//for debugger
display_16_8((uchar *)&LCD_16_8[UCA1RXBUF][0],4,lie+72);//for debugger
}
}
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(__even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 – no interrupt
case 2: // Vector 2 – RXIFG
display_16_8((uchar *)&LCD_16_8[UCA1RXBUF][0],4,lie+72); // TX -> RXed character
break;
case 4:break; // Vector 4 – TXIFG
default: break;
}
}
成功的程序:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
Init_Keypad();
Init_LCD();
write_command(0x3f); //翻开显现
clear_LCD();
P5SEL = 0xC0; // P5.6,7 = USCI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL__ACLK; // ACLK
UCA1BR0 = 0x0D; // 2400
UCA1BR1 = 0; //
UCA1MCTL |= UCBRS_6 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE + UCTXIE; // Enable USCI_A0 RX,TX interrupt
_EINT();

while(1)
{
Key_Event(); //读取键值

if(key_Flag == 1)
{
key_Flag = 0;
UCA1TXBUF=key_val;
}
}
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch(UCA1IV)
{
case 0:break; // Vector 0 – no interrupt
case 2: // Vector 2 – RXIFG
if((UCA1RXBUF>=0)&&(UCA1RXBUF<10))
display_16_8((uchar *)&LCD_16_8[UCA1RXBUF][0],4,lie+72); // TX -> RXed character
break;
case 4:
if((UCA1TXBUF>=0)&&(UCA1TXBUF<10))
display_16_8((uchar *)&LCD_16_8[UCA1TXBUF][0],6,lie+72);
break; // Vector 4 – TXIFG
default: break;
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/272873.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部