完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
功能:用tiMERA0实现1s中断,在中断函数里做一个3S到达判断,然后对P2端口状态取反(LED显示)
运行结果:当直接在中断函数内对端口对端口状态取反时,运行正常。(注:在主函数内执行了P2OUT = 0XFF;这句时,LED灯亮的时间极短,远不到一秒)当在中断函数内添加了IF判断语句后,端口无反应。 找了几天也没有找到原因,求援助啊 #include "MSP430X14X.h" //1s定时初始化 void D1S_Init() { TACTL = TASSEL_1+TACLR;//ACLK clr TAR TACTL |= TAIE;//中断允许 //设置定时时间 TACCTL0 &= ~CCIFG;//CLR CCIFG TACCR0 = 32767;//ACLK=32.768 1S定时 TACCTL0 = CCIE;//捕获/比较中断允许 TACTL |= MC_1;//增计数模式,启动定时器 //_EINT(); } void LED_Out() { static unsigned char i; //P2OUT ^= 0XFF;//中断(1s)LED闪烁 i++; if(i==3) { P2OUT ^= 0XFF;//中断(1s)LED闪烁 i=0; } } void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P2DIR = 0XFF;//输出 led //P2OUT = 0XFF;//编译加上这句,中断时LED只亮一瞬间(亮时远不足一秒) D1S_Init(); _EINT(); while(1); } #pragma vector = TIMERA0_VECTOR __interrupt void TIMERA0_ISR() { LED_Out(); } 难道就没有大神能解决这个问题了吗我只是定时1S中断,再在定时中断函数你加了一个if判断有三次中断就让端口状态取反,为什么为什么就执行不正常了。。。。。。求援助! |
|
相关推荐
6个回答
|
|
你的i没有定义初始值,而且你要是用增计数模式的话好像CCR0重新加载初值,你的那个判断3s好像没意义,不知道说的对不对,我这几天也是刚入手430,说的不对的地方还请多多保函,共同学习吧
|
|
|
|
你是不是用的仿真,但是看不到图片,你最好把图片再上传上来
|
|
|
|
对430不太熟,感觉应该是i设置成了静态变量的缘故。你可以把static去掉试试。另外主函数最后一句最好开启430睡眠模式,这样才能体现430低功耗的价值,不然就和51无差别了。个人观点,不对的还请包涵。
|
|
|
|
|
|
|
|
写了一个空的TIMERA1_VECTOR 中断函数就正常了
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3038个成员聚集在这个小组
加入小组2937 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3615 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2348 浏览 1 评论
4811 浏览 1 评论
2577 浏览 1 评论
1335浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3615浏览 2评论
2937浏览 1评论
1522浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 04:11 , Processed in 1.433377 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号