MSP430单片机入门基础例程1.doc_第1页
MSP430单片机入门基础例程1.doc_第2页
MSP430单片机入门基础例程1.doc_第3页
MSP430单片机入门基础例程1.doc_第4页
MSP430单片机入门基础例程1.doc_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

作者:DC 微控技术论坛原创 MSP430单片机入门基础例程 若想了解MSP430单片机常用模块应用原理,请下载 /datasheet/msp430/msp430base/MSP430register_guide.pdf 由于IO应用原理比较简单,所以我主要以MC430F14开发板的实例来讲解。新手用户可以参与其应用思路。 计划推出几个有价值的参考例程: 1直接IO按键检测处理程序(非低功耗方式) 2IO口中断演示程序 3利用IO中断方式实现按键检测程序(低功耗方式) 实验制作如下图,新手用户轻松地在MC430F14开发板上实现。 例程1: /MSP430F14-直接IO口按键检处理程序 /*/ /以下是结合MC430F14开发板来实现的按键检处理程序实验. /分别使用了采个三个按键接到MSP430的通用IO口,按任意一个按键可以使板上的LED反转. /例程中,按键采用不断查询方式,以得到键值.并没有使用到低功耗.此程序结构比较适合 /用在非手持设备或非电池供电的设计中.此程序结构比较通用,级用户可参与或套用修改. /应用目标板:www.M MC430F14开发板 /*/ #include /初级用户要习惯采用宏定义,以方便的编写和修改 #define keyio 0xf8 /定义按键IO口,Px0-Px2 IO口. #define key_1 0xfe /定义返回键值1 #define key_2 0xfd /定义返回键值2 #define key_3 0xfb /定义返回键值3 /声明子程序 unsigned char key_chcek(void); void display_update(unsigned char dta); void key_process_0(void); void key_process_1(void); void key_process_2(void); /* /将单片机初始化程序放在main()前面是方便查看单片机的初始化状态情况. void MCU_int(void) /默认MCLK主时钟频率为DCO=800K P1OUT |= BIT1; /设置LED,上电为灭.电路可以查看MC430F14电路图. P1DIR |= BIT1; /P1.1设置为输出. /MSP430单片机IO口上电默认方向为输入,所以接按键的IO无需再设为输入. /* void main (void) unsigned char key_value; /定义键值全局变是 WDTCTL = WDTPW + WDTHOLD; /关狗 MCU_int(); /初始化单片机 while(1) /主程序主循环 key_value=key_chcek(); /检测,有键按下并松开,返回一个键值. switch (key_value) /对键值进行处理.采switch语法结构查询 case key_1: key_process_0(); /调用键处理程序1 break; case key_2: key_process_1(); /调用键处理程序2 break; case key_3: key_process_2(); /调用键处理程序2 break; default: ; /调用键处理程序4 break; display_update(key_value); /如果有需要可以在这里加上显示更新程序. key_value=0x00; /最后清除键值.将继续主循环. /* /按键检测程序 /返回值: 无符号字符型键值 unsigned char key_chcek(void) unsigned int i; unsigned char timp,active; active=0; while(!active) while(0xff =( P2IN | keyio); /一直等待有键按下 timp = P2IN | 0xf8; /若有键接下了,则读入IO状态. for(i=0;i7000;i+); /延时,是为了去按键抖动. if (timp =(P2IN | 0xf8) /经延时后,还是那键吗? active = 1; /是,则按键有效. while(0xff !=( P2IN | keyio); /一直等待按键松开 else /去按键抖动后读入的键值与之前不同.则先效. active = 0; /再循环检测. return timp; /返回一个键值. /* void key_process_0(void) /值处理,用户可以自己修改. P1OUT = BIT1; /* void key_process_1(void) /值处理,用户可以自己修改. P1OUT = BIT1; /* void key_process_2(void) /值处理,用户可以自己修改. P1OUT = BIT1; /* void display_update(unsigned char dta) ; /用户可以根据需要来放置显示程序,如LCD,LED,Digital-LED. /灵活应用, /* 例程2: /MSP430F14-IO口中断演示程序 /*/ /以下是结合MC430F14开发板来实现的按键检处理程序实验. /设置P2.0为中断口,通过对IO的下边沿触发,使其中断,并将板上的D2 LED取反. /应用目标板:www.M MC430F14开发板 /*/ #include void main(void) WDTCTL = WDTPW + WDTHOLD; / 停止看门狗 P1DIR |= BIT1; / 设P1.1为输出 P2IE |= BIT0; / P2.0中断使能 P2IES |= BIT0; / P2.0 IO口边沿中断触发模式,下边沿有效 P2IFG &= BIT0; / P2.0 清IO中断标志位 _EINT(); /开总中断允许 LPM4; /进入低功耗模式4,此时单片机功耗最低. /* / P2口中断服务程序 #pragma vector=PORT2_VECTOR _interrupt void Port_2(void) P1OUT = BIT1; / P1.1取反 P2IFG &= 0x01; / P2.0清除相应中断标志位 /* /使IO中断时新手们要了解以下几点: /1- MSP430的IO中,只有P1,P2才有IO中断功能. /2- P1,P2每组IO是多源中断源,P1IG0-P1IG7或P2IG0-P2IG7是共一个中断源的,用户可以 /通过查房方式来得到是那个IO产生了中断. /3- 改变P1IES或P2IES中的位可能会引起相应中断标志位置位,与引脚电平有关. / PxIES.x PxIN.x PxIFG.x / 0-1 0 不变 / 0-1 1 可能置位 / 1-0 0 可能置位 / 1-0 1 不变 /所以,改变P1IES或P2IES后,根据需要清除相关的PxIG.x位. /4- PxIFG.x所有中断标志位在置位后是需要人为清除的.硬件不会自动清除该标位. DC,2007-01-27 02:47:12例程3:/MSP430F14-利用IO中断方式实现按键检测程序/*/以下是结合MC430F14开发板来实现的按键检处理程序实验./分别使用了采个三个按键接到MSP430的通用IO口,按任意一个按键可以使板上的LED反转./例程中,单片机一直处于最低功耗状态,用户可以通过按下按键后唤醒单片机.单片机唤醒/后再进行去抖动动作.同时执行键处理程序.处理完后再次进入LPM4低功耗模式./在本程序中用户可以灵活地修改程序来实现你相关的功能./本程序适用在手持设备或电池供电的设计中.此程序结构比较通用,级用户可参与或套用修改./应用目标板:www.M MC430F14开发板/*/#include #define key1 0x01#define key2 0x02#define key3 0x04#define delay_small 200#define key_1 0xfe /定义返回键值1#define key_2 0xfd /定义返回键值2#define key_3 0xfb /定义返回键值3void key_process_0(void);void key_process_1(void);void key_process_2(void);void key_check (void);unsigned char key_value; /定义键值全局变是/*void main(void)WDTCTL = WDTPW + WDTHOLD; / 停止看门狗P1OUT |= BIT1; /关LED P1DIR |= BIT1; / 设置P1.1为输出 /以下设置是采用不同的编写方式,新手可以参考使用 P2IE |= BIT0+BIT1+BIT2; / P2.0-P2.2 IO口中断使能 P2IES |= 0x07; / P2.0-P2.2 IO口边沿触发中断方式设置 P2IFG &= (key1+key2+key3); / P2.0-P2.2 IO口中断标志位清除 _EINT(); /中断允许 / 或直接写成 _BIS_SR(LPM4_bits + GIE); LPM4; / 进入低功耗LPM4,此时单片机功耗最低while(1) P2IE &= (BIT0+BIT1+BIT2); / P2.0-P2.2 IO口关闭中断允许 P2IFG &= 0x07; / P2.0-P2.2 IO口中断标志位清除 key_check (); switch (key_value) /对键值进行处理.采switch语法结构查询 case key_1: key_process_0(); /调用键处理程序1 break; case key_2: key_process_1(); /调用键处理程序2 break; case key_3: key_process_2(); /调用键处理程序2 break; default: break; key_value=0x00; /键值清除 P2IE |= BIT0+BIT1+BIT2; / P2.0-P2.2 IO口中断使能 P2IFG &= 0x07; / P2.0-P2.2 IO口中断标志位清除 LPM4; /*/P2中断服务程序#pragma vector=PORT2_VECTOR_interrupt void Port_2(void) switch (P2IFG) case 0x01: key_value=0xfe; break; case 0x02: key_value=0xfd; break; case 0x04: key_value=0xfb; break; default: P2IFG &= 0x07; / P2.0-P2.2 IO口中断标志位清除 break; P2IFG &= 0x07; / P2.0-P2.2 IO口中断标志位清除 LPM4_EXIT;/*void key_process_0(void) /值处理,用户可以自己修改.P1OUT = BIT1; /*void key_process_1(void) /值处理,用户可以自己修改.P1OUT = BIT1; /*void key_process_2(void) /值处理,用户可以自己修改.P1OUT = BIT1; /*void key_check (void) unsigned int i;for(i=0;idelay_small;i+); /延时去抖动if(0xff !=(P2IN & 0xf8) /是否有键存在? while(0xff !=( P2IN | 0xf8); /一直等待按键松开 else key_value = 0x00; /延时去抖动无键按下,则清除键变量./*/如果在按键电路中加RC滤波电路,实现按键去抖动的效果会更显著此.DC,2007-01-30 00:37:31已更新! jdgxcu,2007-02-04 22:03:10顶,对初学很实用,不知怎么加入RC去抖 DC,2007-02-04 22:39:45按键与IO之间加一个RC电路:IO口与按键之前加一个电阻,在IO口那端并一个电容下地。RC具体是多大我还没试,有兴趣的网友可以自己试试或参考一下一些其它资料。 mdz_hit,2007-02-10 15:45:19/mcbbs/Announce/Announce.asp?BoardID=112&ID=9030 mdz_hit,2007-02-10 15:46:08P2IE &= (BIT0+BIT1+BIT2); / P2.0-P2.2 IO口关闭中断允许 P2IFG &= 0x07; / P2.0-P2.2 IO口中断标志位清除 为什么要把中断关掉?多谢回复我是新手! DC,2007-02-10 15:52:21如果按键执行功能服务程序时还没处理完,又再次发生中断怎么办。所以要将IO中断暂时关闭。待处理完功能服务程序后再次才允许。 mdz_hit,2007-02-10 16:52:11嗯谢谢阿DC!以后还有很多问题请教 多多帮助! mdz_hi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论