MSP430单片机的通用IO接口_第1页
MSP430单片机的通用IO接口_第2页
MSP430单片机的通用IO接口_第3页
MSP430单片机的通用IO接口_第4页
MSP430单片机的通用IO接口_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第3章MSP430单片机的通用IO接口I/O口是单片机控制系统对外沟通的最基本部件,从基本的键盘、LED显示到复杂的外设芯片等,都是通过I/O口的输入、输出操作来进行读取或控制的。为满足单片机系统对外部设备控制的需要,MSP430提供了许多功能强大、使用方便灵活的输入/输出接口。为了减少芯片引脚的数量以降低芯片的成本,又提供更多功能的I/O口,现在许多单片机都采用了I/O口复用技术,即端口可作为通用的I/O口使用,也可作为某个特殊功能的端口使用,用户可根据系统的实际需要来定义使用。这样就为设计开发提供了方便,简化了单片机系统的硬件设计工作。

MSP430F249单片机的每组I/O口都有4个控制寄存器,分别为方向控制寄存器PxDIR、输入寄存器PxIN、输出寄存器PxOUT和功能选择寄存器PxSEL,此处,小写字母“x”表示6组I/O口的数字序号,x=1~6,即P1口的方向控制寄存器为P1DIR,P6口的方向控制寄存器为P6DIR。另外,P1和P2口还具有3个中断寄存器,分别为中断允许寄存器PxIE、中断沿选择寄存器PxIES和中断标志寄存器PxIFG,此处,x=1~2。Px口的每个引脚都可以单独配置成输入或者输出方向的控制。需要注意的是:MSP430系列单片机端口输出电流最大为6mA,当需要驱动比较大的负载的时候,需要利用三极管或者缓冲器来提高端口的驱动能力。MSP430单片机的I/O口为双向I/O口,因此在使用I/O口前首先要用方向选择寄存器来设置每个I/O口的方向,在程序运行中还可以动态改变I/O口的方向。例如P1.0、P1.1、P1.2接有按键,P1.4、P1.5、P1.6接有LED,通用I/O接口应用示例如图3.1所示。P1DIR|=BIT4+BIT5+BIT6;//P1.4、P1.5、P1.6设为输出P1DIR&=~(BIT0+BIT1+BIT2);//P1.0、P1.1、P1.2设为输入(可省略)图3.1通用I/O接口应用示例图P1OUT=BIT4+BIT5+BIT6;//P1.4~P1.6输出高电平//二极管阳极接高电平,二极管不发光if((P1IN&BIT0)==0)P1OUT|=BIT4;//P1.4输出低电平点亮LED实例3.1彩灯控制

任务要求:利用MSP430F249单片机的P1口控制8个发光二极管LED1~LED8,P1口接入三个开关K1~K3,当K1闭合时,LED1和LED4闪烁,闪烁时间1s;当K2闭合时,LED2和LED5闪烁,闪烁时间2s;当K3闭合时,LED1~LED8循环闪烁,闪烁时间1s。分析说明:发光二极管LED是一种半导体器件,当两端压降大于1V时,通过5mA左右的导通电流时即可发光。导通电流越大,亮度越高,但若电流过大,会烧毁二极管,一般我们控制在3~20mA。在这里,给发光二极管串联一个电阻的目的就是为了限制通过发光二极管的电流不要太大,因此这个电阻又称为“限流电阻”,通常取300~1000Ω。MSP430F249单片机的I/O口输出电流最大为6mA,所有电流之和不超过48mA。且当其I/O口输出“0”时,可以吸收最大40mA的电流。因此采用单片机I/O口控制发光二极管负极的设计。图3.2实例3-1彩灯控制硬件电路图#include<MSP430f249.h>#defineucharunsignedchar#defineuintunsignedint/*********软件延迟ms子程序*********/voiddelayus(uintt){

uinti;

while(t--)

for(i=1300;i>0;i--);}voidmain(void){

uintmask=0x01;WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR=0xFF;//设置方向为输出

P1SEL=0x00;//设置为普通I/O口

P1OUT=0xFF;//LED输出全部关闭

while(1){if((P2IN&0x07)==0x06)//K1开关闭合

{P1OUT^=(BIT0+BIT4);//LED0,LED4闪烁delayus(100);//延迟0.1s}elseif((P2IN&0x07)==0x05)//K2开关闭合

{P1OUT^=(BIT1+BIT5);//LED1,LED5闪烁

delayus(200);//延迟0.2s}elseif((P2IN&0x07)==0x03)//K3开关闭合

{P1OUT=~mask;//LED逐个点亮

delayus(100);//延迟0.1smask+=mask;//mask的值从0x01,0x02,0x04...0x80,对应8个LED

if(mask==0x100)//恢复到0x01mask=0x01;}if((P2IN&0x07)==0x07)P1OUT=0xFF;//无键按下,关闭全部LED}}在output选file项中,勾选Overridedefault选项,输入文件名和类型,选择other单选按钮,在Output选项中可以有很多种不同的输出格式选择。我们可以选择其中三种格式,一种是即intelstandard(intel公司标准),此时文件名应该为flash.hex,这个输出格式可以供proteus进行仿真,但是不能源码调试,或者作为单片机下载的二进制文件;一种是即TI公司对MSP430系列单片机利用BSL方式进行烧写的一种格式,此时文件名应该为flash.txt;还有一种是这是proteus对MSP430系列单片机实现源码级调试一种文件格式,此时文件名应该为flash.d90,为以后程序调试方便,可以选择最后一种。其他的输出文件格式就不一一介绍了。实例3-2花样彩灯控制任务要求:利用MSP430F249单片机的P1口控制8个发光二极管LED1~LED8,点亮顺序如表3-9所示,每个发光二极管点亮时间为0.5s。#include<MSP430f249.h>#defineucharunsignedchar#defineuintunsignedint#defineSHIFT_NUM8//移位循环次数8enumLED_MODE{LEFT_SHIFT_ON,//单个LED左移模式

RIGHT_SHIFT_ON,//单个LED右移模式

LEFT_SHIFT_OFF,//多个LED左移模式

RIGHT_SHIFT_OFF,//多个LED右移模式};enumLED_MODEmode;/*********软件延迟ms子程序*********/voiddelayus(uintt){

uinti;

while(t--)

for(i=1300;i>0;i--);}voidmain(void){

uintmask=0x01;

uchari;

ucharmode=LEFT_SHIFT_ON;WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR=0xFF;//设置方向为输出

P1SEL=0x00;//设置为普通I/O口

P1OUT=0xFF;//LED输出全部关闭

while(1){

for(i=0;i<SHIFT_NUM;i++){

switch(mode){caseLEFT_SHIFT_ON://单个LED左移模式

mask<<=1;

if(mask==0x100)//下一个状态的初始值

mask=0x80;break;caseRIGHT_SHIFT_ON://单个LED右移模式

mask>>=1;

if(mask==0x00)//下一个状态的初始值

mask=0x01;break;caseLEFT_SHIFT_OFF://多个LED左移模式

mask<<=1;mask|=1;

if(mask==0x1FF)//下一个状态的初始值

mask=0x7F;break;caseRIGHT_SHIFT_OFF://多个LED右移模式

mask>>=1;mask&=~0x80;

if(mask==0x00)//下一个状态的初始值

mask=0x01;break;}P1OUT=~mask;//LED输出

delayus(100);//延迟0.1s}mode++;//显示模式变换

mode%=4;}}实例3-3

带按键选择的花样灯任务要求:利用MSP430F249单片机的P1口控制8个发光二极管LED1~LED8,发光二极管根据P0口的接入的开关K1~K5完成不同的显示花样变换。当K1闭合时,LED1和LED2点亮,延迟0.1s之后LED2和LED3点亮,最后是LED7和LED8点亮后重新开始;当K2闭合时,LED1~LED8相当于8位二进制数,延迟0.1s之后加一并点亮对应的LED;当K3闭合时,先LED1~LED4点亮,延迟0.1s后LED5~LED8点亮;随后LED1~LED2、和LED5~LED6点亮,延迟0.1s后LED3~LED4、LED7~LED8逐次点亮,最后LED1、LED3、LED4、LED6点亮,延迟0.1s后LED2、LED4、LED6、LED8点亮后重新开始;当K4闭合时,显示如图3.xxxx,图中0部分为发光的LED。即先点亮P1.0~P1.3引脚连接的4个LED,然后让LED从右向左移动,当P1.7引脚连接的LED点亮后,下一步重新点亮P1.0,依次循环。图3.14实例3-3硬件电路图#include<MSP430f249.h>#defineucharunsignedchar#defineuintunsignedint/*********软件延迟ms子程序*********/voiddelayus(uintt){

uinti;

while(t--)

for(i=1300;i>0;i--);}voidmain(void){

uchari;

ucharval=0;ucharmask1=0x80;

ucharmask2=0x01;ucharmode=4;staticunsignedcharLEDs=0x0f;//静态变量用于存储LEDs发光状态WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR=0xFF;//设置方向为输出

P1SEL=0x00;//设置为普通I/O口

P1OUT=0xFF;//LED输出全部关闭

while(1){if((P2IN&0x1F)==0x01E)//K1开关闭合

{val=0x03;for(i=0;i<8;i++)//两位LED同时移动

{P1OUT=~val;val<<=1;delayus(1000);}}elseif((P2IN&0x1F)==0x1D)//K2开关闭合{P1OUT=~(val++);//LED按照二进制数据累加显示

delayus(1000);}elseif((P2IN&0x1F)==0x1B)//K3开关闭合

{switch(mode){case4://每四个一组LED间隔显示

P1OUT=0xF0;delayus(1000);P1OUT=0x0F;delayus(1000);break;case2://每两个一组LED间隔显示

P1OUT=0xCC;delayus(1000);P1OUT=0x33;delayus(1000);break;case1://每一个LED间隔显示

P1OUT=0x55;delayus(1000);P1OUT=0xAA;delayus(1000);break;}mode/=2;

if(mode==0)mode=4;}elseif((P2IN&0x1F)==0x17)//K4开关闭合

{P1OUT=~(mask1|mask2);//两个LED对向移动显示

mask1>>=1;mask2<<=1;delayus(1000);if((mask1|mask2)==0x00){mask1=0x80;mask2=0x01;}}elseif((P2IN&0x1F)==0x0F)//K5开关闭合

{P1OUT=LEDs;//四个LED循环显示

delayus(1000);if(((LEDs&0x01)==0X01)&&(LEDs!=0x0F)){

LEDs=LEDs<<1;

LEDs+=1;}else

LEDs=LEDs<<1;

if(LEDs==0xE0)

LEDs+=1;}P1OUT=0xFF;//关闭全部LED}}实例3-416个花样灯控制任务要求:利用MSP430F249单片机的P1和P4口控制16个发光二极管LED1~LED16,发光二极管有8种花样显示,显示速度可调,由P2口三个按键K1~K3控制,分别是模式按键、加速和减速按键。这三个按键和前面所用的开关不同,按键在按下后会在内部弹性元件的作用下自动弹起。模式按键按下一次,花样显示模式变换一次,按下8次后循环到第一种模式,加速和减速按键可以控制LED的闪烁速度。图3.1616个LED花样灯硬件电路图3.3LED数码管显示显示字符P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0共阴极段码共阳极段码hgfedcba0001111113FHC010000011006F92010110115BA43010011114FB040110011066995011011016D926011111017D8270000011107F88011111117F809011011116F90A011101117788b011111007C83C0011100139C6d010111105EA1E011110017986F01110111718E实例3-5

单个数码管显示任务要求:使用MSP430F249单片机实现单个8段共阴极数码管的显示,依次循环显示0~15的十六进制数,即“0~F”。#include<MSP430x24x.h>unsignedcharconstled_tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共阴数码管编码表0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelayus(unsigned

intt){unsignedinti;

while(t--)

for(i=1330;i>0;i--);}voidmain(void){unsignedchari;WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR=0xFF;//设置方向为输出

P1OUT=0x00;while(1){

温馨提示

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

评论

0/150

提交评论