完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
新手求助,我的程序如下,用的是iar。想使用定时器A控制2.0,2.1,2.2三个端口的输出,从而控制后面接的一个八选一模拟开关的输出。不知道为什么感觉连中断都进不了...我在定时器中断里switch(TAIV) 这一步加了断点,程序也没停下。查看Count和Second的值,有时候是0x02和0x04,大多时候都是0x00。开发板只有led1一直亮着...
自己实在搞不定了,只好来求教大家,拜谢!!! /******************************************************************** //DM430-L型开发板使用tiMERA进行UP定时模式实验,最大定时104秒 //控制八选一模拟开关 ********************************************************************/ #include #include "Config.h" //开发板配置头文件,主要配置IO端口信息 uchar Flag=0; //标志位 uchar Count=0; //时间计数变量 uchar Second=0; //秒时间变量 //*********************************************************************** // MSP430IO口初始化 //*********************************************************************** void Port_Init() { P2SEL |= BIT0 + BIT1 + BIT2; //P12口输出PWM信号 P2DIR |= BIT0 + BIT1 + BIT2; //P12口接入一个LED发光二极管 P2OUT |= 0x00; LED8DIR = 0xff; //设置IO口方向为输出 LED8 = 0xFF; //P6口初始设置为FF } //*********************************************************************** // TIMERB初始化,设置为UP模式计数 //*********************************************************************** void TIMERA_Init(void) //UP模式计数,计数周期为CCR0+1 { TACTL |= TASSEL_2 + TACLR + ID0 + ID1 + MC0 + TAIE; //SMCLK做时钟源,8分频,增加计数模式,开中断 TACCR0 = 9999; //CCR0=9999,10ms中断一次 } //*********************************************************************** // TIMERA中断服务程序,需要判断中断类型 //*********************************************************************** #pragma vector = TIMERA0_VECTOR __interrupt void Timer_A(void) { switch(TAIV) //需要判断中断的类型 { case 2:break; case 4:break; case 10:Count++;break; //设置标志位Flag } if(Count==100) //100次为1秒 { Second++; Count=0; P6OUT = ~(P6OUT&BIT1); //P61取反闪烁 } while(Second>104)Second=0; //最大计数99秒 } /******************************************************************** 八选一模拟开关函数 ********************************************************************/ void on_off(unsigned char on_NUM) { switch(on_NUM) { case 0: P2OUT = 0x01; LED8 &= ~(1<<0); //点亮D1灯 break; case 1: P2OUT = 0x02; LED8 &= ~(1<<1); //点亮D2灯 break; case 2: P2OUT = 0x03; LED8 &= ~(1<<2); //点亮D3灯 break; case 3: P2OUT = 0x04; LED8 &= ~(1<<3); //点亮D4灯 break; case 4: P2OUT = 0x05; LED8 &= ~(1<<4); //点亮D5灯 break; case 5: P2OUT = 0x06; LED8 &= ~(1<<5); //点亮D6灯 break; case 6: P2OUT = 0x07; LED8 &= ~(1<<6); //点亮D7灯 break; case 7: P2OUT = 0x08; LED8 &= ~(1<<7); //点亮D8灯 break; default: P2OUT = 0x00; LED8 = 0x00; //点亮所有的LED灯 break; } } //************************************************************************* // 主函数 //************************************************************************* void main(void) { WDT_Init(); //看门狗设置 Clock_Init(); //系统时钟设置 Port_Init(); //端口初始化 TIMERA_Init(); //设置TIMERA,P12输出PWM信号 _EINT(); //开中断 while(1) { LED8 = 0xFF; if(Second%13==0) { on_off(Second/13); } else if(Second%13==3) { P2OUT = 0x00; LED8 = 0x00; } } } |
|
相关推荐
1个回答
|
|
当然我没玩过430,但是程序还是能看懂的,这要感谢C语言的通用性。其次,你说的中断没进去,我怀疑中断没有打开或者没有设置,不知道430有没有中断总开关这一说。你是打开了开关,而且设置了定时器初始值,不知道进入中断之后初始值需不需要从新设置,还是自动重装载。我只能提这么多了。你看看有没有帮助。
|
|
|
|
只有小组成员才能发言,加入小组>>
3039个成员聚集在这个小组
加入小组2940 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3617 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2351 浏览 1 评论
4817 浏览 1 评论
2579 浏览 1 评论
1337浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3618浏览 2评论
2940浏览 1评论
1526浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 12:54 , Processed in 1.300353 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号