完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小弟在玩开发板时发现了一个问题,我的芯片是msp430f169.
在使用IO中断,P1口作为独立按键使用时发现无法实现中断触发。按键的图如下: 我写了如下的程序: #include #include #define EA_L P5OUT &=~BIT0 #define EA_H P5OUT |=BIT0 #define EB_L P5OUT &=~BIT1 #define EB_H P5OUT |=BIT1 #define EB_GND_Key do{P5OUT |=BIT2;P5OUT |=BIT3;} while(0) #define EB_VCC_Key do{P5OUT &=~BIT2;P5OUT &=~BIT3;} while(0) #define EA_AC_Key do{P5OUT |=BIT4;P5OUT |=BIT5;} while(0) #define EA_DC_Key do{P5OUT &=~BIT4;P5OUT &=~BIT5;} while(0) int A=0; void Init_CLK(void) { unsigned int iq0; BCSCTL1&=~0X00; //打开XT2振荡器 do { IFG1 &= ~OFIFG; // 清除振荡器失效标志 for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振 } while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振 BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2 } //timer_A初始化-------------------- void Init_TimerA() { TACTL = TASSEL_1+MC_1+TACLR; //timerA CLK="ACLK",增计数模式 CCR0 =327; CCTL0 = CCIE; } void Init_Key_IO() { //控制模拟开关 P5DIR=0xff; P5SEL=0; //按键设置 P1DIR &=~(BIT0+BIT1+BIT2+BIT3); //按键控制,IO中断方式 P1SEL=0; // P1REN |=BIT0+BIT1+BIT2+BIT3; P1IE=0; P1IES=0; P1IES |=BIT0+BIT1+BIT2+BIT3; P1IFG=0; P1IE |=BIT0+BIT1+BIT2+BIT3; } void AC_Chose() { EA_L; EB_H; EA_AC_Key; } void DC_Chose() { EA_L; EB_L; EA_DC_Key; } void Delay() { uchar i; for(i=100;i>0;i--); } void OFF_Set() { EA_H; EB_H; } int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; Init_CLK(); Init_TimerA(); Init_Key_IO(); _EINT(); P1DIR=BIT7; for(;;) { switch(A) { case 0: DC_Chose(); break; case 1: AC_Chose(); break; case 2: OFF_Set(); break; case 3: break; } } } #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A(void) { if(P1OUT&BIT7) { P1OUT &=~(BIT7); EB_GND_Key; } else { P1OUT |=BIT7; EB_VCC_Key; } } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { if(P1IFG&BIT0) { P1IFG &=~(BIT0); Delay(); if(!(P1IN&BIT0)) A=0; //默认为交变电场。 } if(P1IFG&BIT1) { P1IFG &=~(BIT1); Delay(); if(!(P1IN&BIT1)) A=1; //选择为静电场。 } if(P1IFG&BIT2) { P1IFG &=~(BIT2); Delay(); if(!(P1IN&BIT2)) A=2; //选择关闭模拟开关 } if(P1IFG&BIT3) { P1IFG &=~(BIT3); Delay(); if(!(P1IN&BIT3)) A=3; } } 在网上查了下,貌似有的430有P1REN上拉下拉电阻使能寄存器,但是msp430f169没有。硬件已经是这样了,试了试使用 中断触发,但是无法触发中断,不知道PIN&BIT0默认是什么电平?是否会自动置位? 有人建议我用查询,我觉得查询也不行,也是无法读取有按键按下的标志位。 其实加上上拉电阻可以使用中断和扫描的。我想知道如果没有上拉电阻能否就我的板子实现独立按键? 谢谢大家啦!希望大家能提出自己的见解 |
|
相关推荐
2 个讨论
|
|
看不到你的电路图。。。。。 另外2系列的开始才有上拉下拉电阻.....我觉得最好有上下拉电阻,消除影响,要是没有,肯定也是可以进入中断的,不过有干扰而已......
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3035个成员聚集在这个小组
加入小组2931 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3608 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2344 浏览 1 评论
4809 浏览 1 评论
2574 浏览 1 评论
1334浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3613浏览 2评论
2935浏览 1评论
1521浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 09:39 , Processed in 1.511742 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号