完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
void GPIO_Init(); void P1_IODect(); void P2_IODect(); void TURN_Left(); void TURN_Right(); void tiMER_A0_1(); void TIMER_A1_1(); int main(void) { WDTCTL = WDTPW | WDTHOLD; GPIO_Init(); TIMER_A0_1(); TIMER_A1_1(); _enable_interrupts(); } void GPIO_Init(){ P1DIR |= BIT0+BIT1; P1OUT |= BIT1; P1OUT &= ~BIT0; P1SEL |= BIT6; P1DIR |= BIT6; P2DIR |= BIT0+BIT1; P2OUT |= BIT1; P2OUT &= ~BIT0; P2SEL |= BIT2; P2DIR |= BIT2; P1REN |= BIT3; P1OUT |= BIT3; P1DIR &=~ BIT3; P1IES |= BIT3; P1IE |= BIT3; P2REN |= BIT3; P2OUT |= BIT3; P2DIR &=~ BIT3; P2IES |= BIT3; P2IE |= BIT3; } void TIMER_A0_1(){ TA0CTL=0; //清除以前的设置 TA0CTL |= TASSEL_1+MC_1; //使用子系统时钟,帧计数模式,不倍频 TA0CTL|=ID_0; //使用子系统时钟,帧计数模式,不倍频 TA0CCTL1 = OUTMOD_7; TA0CCR0 = 1000; //时钟频率为32768HZ,100HZ TA0CCR1 = 400; //占空比CCR1/CCR0=1/3 TA0CTL |= TACLR; } void TIMER_A1_1(){ TA1CTL=0; //清除以前的设置 TA1CTL |= TASSEL_1+MC_1; //使用子系统时钟,帧计数模式,不倍频 TA1CTL|=ID_0; //使用子系统时钟,帧计数模式,不倍频 TA1CCTL1 = OUTMOD_7; TA1CCR0 = 1000; //时钟频率为32768HZ,100HZ TA1CCR1 = 400; //占空比CCR1/CCR0=1/3 TA1CTL |= TACLR; } #pragma vector = PORT1_VECTOR __interrupt void PORT1_ISR(void) { P1_IODect(); P1IFG=0; } void P1_IODect() { unsigned int Push_Key=0; Push_Key=P1IFG&(~P1DIR); if((P1IN&Push_Key)==0) { switch(Push_Key){ case BIT3: TURN_Right(); P1IN ^= BIT3; break; default: break; } } } #pragma vector = PORT2_VECTOR __interrupt void PORT2_ISR(void) { P2_IODect(); P2IFG=0; } void P2_IODect() { unsigned int Push_Key=0; Push_Key=P2IFG&(~P2DIR); if((P2IN&Push_Key)==0) { switch(Push_Key){ case BIT3: TURN_Left(); P2IN ^=BIT3; break; default: break; } } } void TURN_Left(){ unsigned int MILL1=400; unsigned int MILL2=400; while((P2IN&0x04)==0){ MILL1=MILL1+40; MILL2=MILL2-40; TA0CCR1=MILL1; TA1CCR1=MILL2; } } void TURN_Right(){ unsigned int MILL1=400; unsigned int MILL2=400; MILL1=MILL1-40; MILL2=MILL2+40; while((P1IN&0x04)==0){ MILL1=MILL1-40; MILL2=MILL2+40; TA0CCR1=MILL1; TA1CCR1=MILL2; } } |
|
相关推荐
7个回答
|
|
进入低功耗模式试试
|
|
|
|
中断里用了太多的while,那么只要条件符合,肯定就跳不出来了,不过,当while的条件不符合的时候,也应该能跳出来才对。
所以,对你的问题不是很明白,而且中断所起的作用也没有说明。 |
|
|
|
__interrupt void PORT1_ISR(void)
{ P1_IODect(); P1IFG=0; } __interrupt void PORT2_ISR(void) { P2_IODect(); P2IFG=0; } 没有对对应中断标志位清零,要找到这两个中断源的控制寄存器,然后找到对应位,对其置1·即可跳出中断了 |
|
|
|
__interrupt void PORT1_ISR(void)
{ P1_IODect(); P1IFG=0; } __interrupt void PORT2_ISR(void) { P2_IODect(); P2IFG=0; } 没有对对应中断标志位清零,要找到这两个中断源的控制寄存器,然后找到对应位,对其置1·即可跳出中断了 |
|
|
|
__interrupt void PORT1_ISR(void)
{ P1_IODect(); P1IFG=0; } __interrupt void PORT2_ISR(void) { P2_IODect(); P2IFG=0; } 没有对对应中断标志位清零,要找到这两个中断源的控制寄存器,然后找到对应位,对其置1·即可跳出中断了 |
|
|
|
定一个标志位
|
|
|
|
P1IFG=0这样不行么? |
|
|
|
只有小组成员才能发言,加入小组>>
3056个成员聚集在这个小组
加入小组2985 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3710 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2367 浏览 1 评论
4834 浏览 1 评论
2595 浏览 1 评论
1632浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3715浏览 2评论
2987浏览 1评论
1828浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 00:19 , Processed in 1.405661 second(s), Total 93, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号