完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/*
* dcomain.c * * Created on: 2015-7-25 * Author: fengtianxu */ #include "MSP430f5529.h" void P2_IODect(); void P21_Onclick(); void GPIO_Init(); void main(void) { |
|
相关推荐
8个回答
|
|
回帖奖励 +1 分积分 |
|
|
|
void main() {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0 to output direction for(;;) { volatile unsigned int i; // volatile to prevent optimization P1OUT^ = 0x01; // Toggle P1.0 using exclusive-OR i = 10000; // SW Delay do i--; while(i != 0); } } 这样有错么? |
|
|
|
|
|
|
|
从2553那拷贝过来的 改了下IO口 可以直接用
/* * Interrupt_Key_LED.c * 硬件描述:Launchpad G2553开发板上P1.3接了一个按键,P1.0和P1.6各接了1个LED(用跳线帽连接)。 * 功能描述:按键按下的瞬间,两个LED切换亮灭状态 * Author: Administrator */ #include "MSP430f5529.h" //-----在main函数前提前申明函数----- void P2_IODect() ; void P21_Onclick(); void GPIO_init(); void main(void) { WDTCTL = WDTPW + WDTHOLD; //关狗 GPIO_init(); //IO初始化 _enable_interrupts(); //使能总中断 _bis_SR_register(LPM3_bits); //休眠 } /****************************************************************************************************** * 名 称:GPIO_Init() * 功 能:设定按键和LED控制IO的方向,启用按键IO的上拉电阻 * 入口参数:无 * 出口参数:无 * 说 明:无 * 范 例:无 ******************************************************************************************************/ void GPIO_init() { //-----设定P1.0和P1.6的输出初始值----- P1DIR |= BIT0; //设定P1.0和P4.7为输出 P4DIR |= BIT7; P1OUT |= BIT0; //设定P1.0初值 P4OUT &= ~BIT7; //设定4.7初值 //-----配合机械按键,启用内部上拉电阻----- P2REN |= BIT1; //启用P2.1内部上下拉电阻 P2OUT |= BIT1; //将电阻设置为上拉 //-----配置P1.3中断参数----- P2DIR &= ~BIT1; // P2.1设为输入(可省略) P2IES |= BIT1; // P2.1设为下降沿中断 P2IE |= BIT1 ; // 允许P2.1中断 } /****************************************************************************************************** * 名 称:PORT1_ISR() * 功 能:响应P1口的外部中断服务 * 入口参数:无 * 出口参数:无 * 说 明:P1.0~P1.8共用了PORT1中断,所以在PORT1_ISR()中必须查询标志位P1IFG才能知道 * 具体是哪个IO引发了外部中断。P1IFG必须手动清除,否则将持续引发PORT1中断。 * 范 例:无 ******************************************************************************************************/ #pragma vector = PORT2_VECTOR __interrupt void PORT2_ISR(void) { //-----启用Port1事件检测函数----- P2_IODect(); //检测通过,则会调用事件处理函数 P2IFG=0; //退出中断前必须手动清除IO口中断标志 } /****************************************************************************************************** * 名 称:P2_IODect() * 功 能:判断具体引发中断的IO,并调用相应IO的中断事件处理函数 * 入口参数:无 * 出口参数:无 * 说 明:该函数兼容所有8个IO的检测,请根据实际输入IO激活“检测代码”。 * 本例中,仅有P2.1被用作输入IO,所以其他7个IO的“检测代码”没有被“激活”。 * 范 例:无 ******************************************************************************************************/ void P2_IODect() { unsigned int Push_Key=0; //-----排除输出IO的干扰后,锁定唯一被触发的中断标志位----- Push_Key=P2IFG&(~P2DIR); //-----延时一段时间,避开机械抖动区域----- __delay_cycles(10000); //消抖延时 //----判断按键状态是否与延时前一致----- if((P2IN&Push_Key)==0) //如果该次按键确实有效 { //----判断具体哪个IO被按下,调用该IO的事件处理函数----- switch(Push_Key){ // case BIT0: P10_Onclick(); break; case BIT1: P21_Onclick(); break; // case BIT2: P12_Onclick(); break; // case BIT3: P13_Onclick(); break; // case BIT4: P14_Onclick(); break; // case BIT5: P15_Onclick(); break; // case BIT6: P16_Onclick(); break; // case BIT7: P17_Onclick(); break; default: break; //任何情况下均加上default } } } /****************************************************************************************************** * 名 称:P13_Onclick() * 功 能:P1.3的中断事件处理函数,即当P1.3键被按下后,下一步干什么 * 入口参数:无 * 出口参数:无 * 说 明:使用事件处理函数的形式,可以增强代码的移植性和可读性 * 范 例:无 ******************************************************************************************************/ void P21_Onclick() { //-----翻转IO电平----- P1OUT ^= BIT0; P4OUT ^= BIT7; } |
|
|
|
|
|
|
|
楼主这程序粘的无敌了
|
|
|
|
|
|
|
|
给你个例子参考下:
通过配置P1.1口按键为下降沿触发中断 ,进入中断后改变LED2的状态,然后进入Timer0中断,改变LED1的状态。 #include void delay(unsigned int i) { volatile unsigned int j; for(;i>0;i--) for(j=0;j<2000;j++); // 延时 } int main(void) { volatile unsigned int i ; WDTCTL = WDTPW+WDTHOLD; // 关闭看门狗 P1DIR |= BIT0; // P1.0 输出 P4DIR |= BIT7; // P4.7 输出 P1DIR &=~BIT1; //设置P1.1为输入 P1OUT |= BIT1; //上拉,有时候不上拉可以,有时候不可以,所以最好上拉 P1REN |= BIT1; //设为输入时必须加上此寄存器配置 P1IE |= BIT1; //打开P1.1口中断 P1IES &=~BIT1; //触发方式为下降沿 P1IFG &=~BIT1; //清中断标志位 __enable_interrupt(); while(1); //__bis_SR_register(LPM0_bits+GIE); // 进入低功耗模式0,使能中断 } #pragma vector=TIMER0_A0_VECTOR __interrupt void TIMER0_A0_ISR(void) { P1OUT ^= BIT0; // 反转 P1.0状态 delay(20); TA0CCTL0 = ~(CCIE); } #pragma vector = PORT1_VECTOR __interrupt void Port1(void) { P4OUT ^= BIT7; //P4.7为输出取反 P1IFG &=~BIT1; //清中断标志位 delay(200); TA0CCTL0 = CCIE; // CCR0中断使能 TA0CCR0 = 50000; TA0CTL = TASSEL_2 + MC_1 +TACLR; // SMCLK,增计数模式,清除TAR } |
|
|
|
只有小组成员才能发言,加入小组>>
3038个成员聚集在这个小组
加入小组2937 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3615 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2348 浏览 1 评论
4811 浏览 1 评论
2577 浏览 1 评论
1335浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3615浏览 2评论
2938浏览 1评论
1522浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 04:48 , Processed in 1.390631 second(s), Total 65, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号