完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
最近才开始玩MSP430G2335,在写串口代码的时候遇到了这样一个问题:在我同时开启USCI_A0的发送和接收中断时,并且在发送和接收中断函数中都添加了标志位置0的语句后,就进不了接收中断了,以下为我的代码:
void USCI_A0_init() { BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; P1SEL |=BIT1+BIT2; P1SEL2 |= BIT1+BIT2;// P1=RXD P2=TXD //UCA0CTL0就用初始状态全为0,默认设置为校验禁止,8位数据,1位停止位,UART模式,异步模式,因此不用对UCA0CTL0进行操作 UCA0CTL1 |= UCSWRST; //选择产生波特率的时钟 UCA0CTL1 |= UCSSEL_2; UCA0MCTL = UCBRF_0 + UCBRS_1; UCA0MCTL = UCBRS0; UCA0BR0 = 104;//设置波特率为9600 UCA0BR1 = 0; UCA0CTL1 &=~UCSWRST; IE2 |= UCA0RXIE+UCA0TXIE;//使能接收和发送中断 _enable_interrupts(); } void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= BIT6+BIT0; P1OUT &=~ BIT6; P1OUT &=~ BIT0; USCI_A0_init(); while(1); } //发送中断函数 #pragma vector=USCIAB0TX_VECTOR __interrupt void USCI0TX_ISR_HOOK(void) { IFG2 &=~ UCA0TXIE; P1OUT ^= BIT0; } //接收中断函数 #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR_HOOK(void) { IFG2 &=~ UCA0RXIE; while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? UCA0TXBUF = UCA0RXBUF; UART_RX(); } 这段代码能进发送中断,因为主函数让P1.0拉低,运行后LED还是会亮,说明进入了发送中断.(不知道这样理解有没有错...)但是发送数据给单片机就进不了接收中断。但是如果我把发送中断函数的 IFG2 &=~ UCA0TXIE这句话不要的话就能进入接收中断了,这里就很不懂为什么复位发送中断标志位会影响接收中断。希望有会的兄弟能教教我,解决后定有重谢! |
|
相关推荐
2个回答
|
|
楼主你这个问题解决了吗?我也遇到了类似的问题想请教一下啊
|
|
|
|
只有小组成员才能发言,加入小组>>
2628个成员聚集在这个小组
加入小组MSP430FR5994 使用库函数 定时器触发AD问题请教
866 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2162 浏览 1 评论
4540 浏览 1 评论
2358 浏览 1 评论
1698 浏览 1 评论
689浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
880浏览 2评论
921浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 05:52 , Processed in 0.859722 second(s), Total 49, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号