下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 MSP430单片机入门基础例程1

MSP430单片机入门基础例程1.doc

MSP430单片机入门基础例程1

那颗心不只属于你
2017-11-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《MSP430单片机入门基础例程1doc》,可适用于IT/计算机领域

MSP单片机入门基础例程作者:DC微控技术论坛原创MSP单片机入门基础例程若想了解MSP单片机常用模块应用原理请下载<<MSPF常用模块应用原理>>由于IO应用原理比较简单所以我主要以MCF开发板的实例来讲解。新手用户可以参与其应用思路。计划推出几个有价值的参考例程:直接IO按键检测处理程序(非低功耗方式)IO口中断演示程序利用IO中断方式实现按键检测程序(低功耗方式)实验制作如下图新手用户轻松地在MCF开发板上实现。例程:MSPF直接IO口按键检处理程序*************************************************************************以下是结合MCF开发板来实现的按键检处理程序实验分别使用了采个三个按键接到MSP的通用IO口,按任意一个按键可以使板上的LED反转例程中,按键采用不断查询方式,以得到键值并没有使用到低功耗此程序结构比较适合用在非手持设备或非电池供电的设计中此程序结构比较通用,级用户可参与或套用修改应用目标板:wwwMicrocontrolcnMCF开发板*************************************************************************#include<mspxxh>初级用户要习惯采用宏定义,以方便的编写和修改#definekeyioxf定义按键IO口,PxPxIO口#definekeyxfe定义返回键值#definekeyxfd定义返回键值#definekeyxfb定义返回键值声明子程序unsignedcharkeychcek(void)voiddisplayupdate(unsignedchardta)voidkeyprocess(void)voidkeyprocess(void)voidkeyprocess(void)*************************************************************************将单片机初始化程序放在main()前面是方便查看单片机的初始化状态情况voidMCUint(void){默认MCLK主时钟频率为DCO=~KPOUT|=BIT设置LED,上电为灭电路可以查看MCF电路图PDIR|=BITP设置为输出MSP单片机IO口上电默认方向为输入,所以接按键的IO无需再设为输入}*************************************************************************voidmain(void){unsignedcharkeyvalue定义键值全局变是WDTCTL=WDTPWWDTHOLD关狗MCUint()初始化单片机while()主程序主循环{keyvalue=keychcek()检测,有键按下并松开,返回一个键值switch(keyvalue)对键值进行处理采switch语法结构查询{casekey:keyprocess()调用键处理程序breakcasekey:keyprocess()调用键处理程序breakcasekey:keyprocess()调用键处理程序breakdefault:调用键处理程序break}displayupdate(keyvalue)如果有需要可以在这里加上显示更新程序keyvalue=x最后清除键值将继续主循环}}*************************************************************************按键检测程序返回值:无符号字符型键值unsignedcharkeychcek(void){unsignedintiunsignedchartimp,activeactive=while(!active){while(xff==(PIN|keyio))一直等待有键按下timp=PIN|xf若有键接下了,则读入IO状态for(i=i<i)延时,是为了去按键抖动if(timp==(PIN|xf))经延时后,还是那键吗{active=是,则按键有效while(xff!=(PIN|keyio))一直等待按键松开}else{去按键抖动后读入的键值与之前不同则先效active=再循环检测}}returntimp返回一个键值}*************************************************************************voidkeyprocess(void)值处理,用户可以自己修改{POUT^=BIT}*************************************************************************voidkeyprocess(void)值处理,用户可以自己修改{POUT^=BIT}*************************************************************************voidkeyprocess(void)值处理,用户可以自己修改{POUT^=BIT}*************************************************************************voiddisplayupdate(unsignedchardta){用户可以根据需要来放置显示程序,如LCD,LED,DigitalLED灵活应用,}*************************************************************************例程:MSPFIO口中断演示程序*************************************************************************以下是结合MCF开发板来实现的按键检处理程序实验设置P为中断口,通过对IO的下边沿触发,使其中断,并将板上的DLED取反应用目标板:wwwMicrocontrolcnMCF开发板*************************************************************************#include<mspxxh>voidmain(void){WDTCTL=WDTPWWDTHOLD停止看门狗PDIR|=BIT设P为输出PIE|=BITP中断使能PIES|=BITPIO口边沿中断触发模式,下边沿有效PIFG=~BITP清IO中断标志位EINT()开总中断允许LPM进入低功耗模式,此时单片机功耗最低}*************************************************************************P口中断服务程序#pragmavector=PORTVECTORinterruptvoidPort(void){POUT^=BITP取反PIFG=~xP清除相应中断标志位}*************************************************************************使IO中断时新手们要了解以下几点:MSP的IO中,只有P,P才有IO中断功能P,P每组IO是多源中断源,PIGPIG或PIGPIG是共一个中断源的,用户可以通过查房方式来得到是那个IO产生了中断改变PIES或PIES中的位可能会引起相应中断标志位置位,与引脚电平有关PxIESxPxINxPxIFGx>不变>可能置位>可能置位>不变所以,改变PIES或PIES后,根据需要清除相关的PxIGx位PxIFGx所有中断标志位在置位后是需要人为清除的硬件不会自动清除该标位DC,::例程:MSPF利用IO中断方式实现按键检测程序*************************************************************************以下是结合MCF开发板来实现的按键检处理程序实验分别使用了采个三个按键接到MSP的通用IO口,按任意一个按键可以使板上的LED反转例程中,单片机一直处于最低功耗状态,用户可以通过按下按键后唤醒单片机单片机唤醒后再进行去抖动动作同时执行键处理程序处理完后再次进入LPM低功耗模式在本程序中用户可以灵活地修改程序来实现你相关的功能本程序适用在手持设备或电池供电的设计中此程序结构比较通用,级用户可参与或套用修改应用目标板:wwwMicrocontrolcnMCF开发板*************************************************************************#include<mspxxh>#definekeyx#definekeyx#definekeyx#definedelaysmall#definekeyxfe定义返回键值#definekeyxfd定义返回键值#definekeyxfb定义返回键值voidkeyprocess(void)voidkeyprocess(void)voidkeyprocess(void)voidkeycheck(void)unsignedcharkeyvalue定义键值全局变是*************************************************************************voidmain(void){WDTCTL=WDTPWWDTHOLD停止看门狗POUT|=BIT关LEDPDIR|=BIT设置P为输出以下设置是采用不同的编写方式,新手可以参考使用PIE|=BITBITBITPPIO口中断使能PIES|=xPPIO口边沿触发中断方式设置PIFG=~(keykeykey)PPIO口中断标志位清除EINT()中断允许或直接写成BISSR(LPMbitsGIE)LPM进入低功耗LPM,此时单片机功耗最低while(){PIE=~(BITBITBIT)PPIO口关闭中断允许PIFG=~xPPIO口中断标志位清除keycheck()switch(keyvalue)对键值进行处理采switch语法结构查询{casekey:keyprocess()调用键处理程序breakcasekey:keyprocess()调用键处理程序breakcasekey:keyprocess()调用键处理程序breakdefault:break}keyvalue=x键值清除PIE|=BITBITBITPPIO口中断使能PIFG=~xPPIO口中断标志位清除LPM}}*************************************************************************P中断服务程序#pragmavector=PORTVECTORinterruptvoidPort(void){switch(PIFG){casex:keyvalue=xfebreakcasex:keyvalue=xfdbreakcasex:keyvalue=xfbbreakdefault:PIFG=~xPPIO口中断标志位清除break}PIFG=~xPPIO口中断标志位清除LPMEXIT}*************************************************************************voidkeyprocess(void)值处理,用户可以自己修改{POUT^=BIT}*************************************************************************voidkeyprocess(void)值处理,用户可以自己修改{POUT^=BIT}*************************************************************************voidkeyprocess(void)值处理,用户可以自己修改{POUT^=BIT}**************************************************************************voidkeycheck(void){unsignedintifor(i=i<delaysmalli)延时去抖动if(xff!=(PINxf))是否有键存在{while(xff!=(PIN|xf))一直等待按键松开}elsekeyvalue=x延时去抖动无键按下,则清除键变量}**************************************************************************如果在按键电路中加RC滤波电路,实现按键去抖动的效果会更显著此DC,::已更新!jdgxcu,::顶对初学很实用不知怎么加入RC去抖DC,::按键与IO之间加一个RC电路:IO口与按键之前加一个电阻在IO口那端并一个电容下地。RC具体是多大我还没试有兴趣的网友可以自己试试或参考一下一些其它资料。mdzhit,::ID=mdzhit,::PIE=~(BITBITBIT)PPIO口关闭中断允许PIFG=~xPPIO口中断标志位清除为什么要把中断关掉,,,多谢回复我是新手!DC,::如果按键执行功能服务程序时还没处理完又再次发生中断怎么办。所以要将IO中断暂时关闭。待处理完功能服务程序后再次才允许。mdzhit,::嗯谢谢阿DC~~以后还有很多问题请教多多帮助~mdzhit,::请问执行完LPM后while()程序还会跑么,贝壳与海,::非常使用的程序例子。谢谢~,::顶起正在被迷惑第一个例程:while(xff==(PIN|keyio))一直等待有键按下为什么满足该判断条件时可以确定有按键安下呢,mengzhu,::if(xff!=(PINxf))是否有键存在{while(xff!=(PIN|xf))一直等待按键松开}elsekeyvalue=x延时去抖动无键按下,则清除键变量}我对这几句十分的费解有人给指点一下吗,先谢了cpworld,::if(xff!=(PINxf))当个键都没有按下时三个口都为高电平当有任何一个键按下后为低PIN与xF后不会等于xFF。while(xff!=(PIN|xf))同上有任意键按下后执行此条语句一直等待三个按键全部抬起为止。mengzhu,::楼上的谢谢了我还有点疑问要是三个按键全部抬起的话第二条语句不是应该为while(xff==(PIN|xf))才正确吗,

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/15

MSP430单片机入门基础例程1

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利