MSP430单片机的通用IO接口解读
第三章 MSP430F149通用数字端口
PxOUT 寄存器每一位是相应引脚配置为通用 O 输出时的输出值。
0 PxOUT.0
PxOUT.x=0,输出低电平
PxOUT.x=1,输出高电平
例:
P2DIR |=BIT0+BIT2+BIT4;//将 P2.0/P2.2/P2.4 设置为输出
P2OUT |=BIT0+BIT2+BIT4;//P2.0/P2.2/P2.4 输出高电平
P6DIR |=BIT0;//P6.0 设置为输出 P6OUT |=BIT0;//P6.0 输出高电平关闭 LED 灯
P1IES &=~BIT0;//P1.0 中断上升沿触发 P1IFG &=~BIT0;//清除 P1.0 中断标志 P1IE |=BIT0;//允许 P1.0 中断 _EINT();//开放系统中断 while(1) {
P6OUT ^=(BIT0+BIT2+BIT4+BIT6);//P6.0/2/4/6 端口 LED 闪烁 for(i=0;i<50000;i++);//延时 } }
应用二:软件定时,使 P6.0 输出方波使 LED 灯闪烁。程序如下:
#include <msp430x14x.h> void main( void ) {
PxIFG.x=0,没有中断发生
PxIFG.x=1,有中断发生
注意:写 PxOUT.x、PxDIR.x 将导致相应标志位 PxIFG.x 置位;I/O 脚上的中断事件
必须保持 1.5 倍 MCLK 周期以上才能保证中断被识别并使相应标志位置位。
(7)中断触发沿选择寄存器 PxIES(x=1,2)
7 PxIES.7
应用三:在 P3.0 上产生方波,将 P3.0 与 P1.0 相连,P1.0 接收中断,在中断程序中
430串口通信的资料
1 MSP430单片机I/O端口控制特点与8031单片机相比,MSP430的I/O端口的功能要强大的多,其控制的方法也更为复杂。
MSP430的I/O端口可以实现双向的输入、输出;完成一些特殊功能如:驱动LCD、A/D转换、捕获比较等;实现I/O 各种中断。
MSP430采用了传统的8位端口方式保证其兼容性,即每个I/O端口控制8个I/O引脚。
为了实现对I/O端口每一个引脚的复杂控制,MSP430中的每个I/O口都对应一组8位的控制寄存器(如图1)。
寄存器中的每一位对应一个I/O引脚,实现对该引脚的独立控制。
寄存器的功能和数目是由该I/O口所能完成的功能以及类型确定的。
[2]图1为MSP430的一个I/O端口的控制结构示意图。
对于最基本的只能完成输入、输出功能的I/O端口其控制寄存器只有3个。
其中,输入寄存器保存输入状态;输出寄存器保存输出的状态,方向寄存器控制对应引脚的输入、输出状态。
本文中用来实现I2C总线接口的P6.6、P6.7都属于这类的端口。
此外,有些I/O端口不但可以用作基本的输入输出,而且可以用作其他用途,比如可以作为LCD的驱动控制引脚。
这类端口的控制功能寄存器实现引脚功能状态的切换。
再者,有一类端口不但可以完成上述两种端口的功能,而且可以实现中断功能。
该类端口拥有图1中所有的寄存器,中断触发的方式以及中断的屏蔽性都可以通过相应的寄存器控制。
本文中使用的P2.0就属于该类端口,利用它来接收LM92发出的中断。
通过上述的控制结构,MSP430的I/O端口可以实现很丰富的功能。
不仅如此,其中一些I/O口还可以与MSP430中的特殊模块相结合完成更为复杂的工作。
如与捕获比较模块相结合可以实现串行通信,与A/D 模块结合实现A/D转换等。
此外,MSP430 I/O端口的电器特性也十分突出,几乎所有的I/O口都有20mA 的驱动能力,对于一般的LED、蜂鸣器可以直接驱动无需辅助电路。
许多端口内部都集成了上拉电阻,可以方便与外围器件的接口。
MSP 430基础IO口
学习过51单片机的同学都知道,IO口的操作是所有单片机系统的基本操作,单片机作为一个核心的运算和处理器件必须能够对外部的信号做出反应,那么如何让MSP430得知外部信号变化和做出反应就是我们今天要学习的主要内容这里还是以MSP430G2553单片机为例MSP430单片机的IO口都有以下几个相关的寄存器:1、PnDIR:输入输出方向寄存器0-输入1-输出2、PnOUT:输出寄存器0-低电平1-高电平3、PnIN:输入寄存器这是一个只读寄存器用来读取外部电平状态4、PnIFG:中断标志寄存器0-没有中断请求1-有中断请求该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位外部中断时间的时间必须>=1.5倍的MCLK时间以保证中断请求被接受5、PnIE:中断启用寄存器0-不启用中断1-启用中断6、PnIES:中断触发边沿选择寄存器0-上升沿中断1-下降沿中断7、PnSEL:功能选择寄存器0-选择引脚为普通IO口1-选择引脚为外围模块功能(第二功能引脚)8、PnSEL2:功能选择寄存器2和PnSEL共同作用选择不同功能,当选择引脚作为普通IO口使用时PnSEL和PnSEL2都应该清零(默认)9、PnREN:上拉/下拉电阻使能寄存器0-禁止1-使能OK,以上就介绍完了和IO口相关的寄存器,是不是觉得好多,头晕?不过头晕之余看看描述,还是能够理出一些思绪的。
本篇我们只讨论IO作为普通输入输出口使用所以像PnSEL、PnSEL2、PnIE寄存器就直接写入0x00就好了,或者说可以默认不作修改。
像PnIFG 和PnIES寄存器那就和我们本篇完全无关了。
让我们看看MSP430G2553这个单片机的管脚是如何分布的吧,好让大家有个IO口的存在概念:图片太小?符号密密麻麻看不清?OK,cloud用表格给大家划分一下最简单的引脚图:VCC MSP430G2553GNDP1.0P2.6 / XINP1.1P2.7 / XOUTP1.2TESTP1.3/RSTP1.4P1.7P1.5P1.6P2.0P2.5P2.1P2.4P2.2P2.3看了这张图大家应该都明白了我们的MSP430G2553单片机只引出了P1口和P2口。
MSP430模块系列之一:IO操作
MSP430模块系列之一:IO操作4/15/2013 BY francis_haoyinghao1991@ 在淘宝上买的一块开发板,先秀一下:我很喜欢这块开发板,喜欢它的颜色。
看起来很专业。
好了,开始学习了。
好像每一块单片机都是从点亮小灯开始的。
那这个5438也这么做。
首先查看关于IO的寄存器:这是P1口和P2口的寄存器,这两个IO比较特殊,可以作为中断使用,但是目前先不去管中断。
从最简单的开始。
只看能让小灯点亮的寄存器:输入寄存器输入寄存器是只读的,能够读取相应管脚的电平。
但是首先要设置方向寄存器,使其设置为输入。
输出寄存器向引脚写高低电平,下面的关于上/下拉电阻的暂时不用考虑,与输入寄存器一样,如果要实现输出功能必须先设置方向寄存器使之设置为输出。
方向寄存器这就是前面说的方向寄存器,不多解释。
功能选择寄存器手册里没有详细图示这个寄存器。
PXSEL相应位设置为0时,引脚设置为IO口。
PXSEL相应位设置为1时,引脚设置为外围模式,具体功能参见手册。
我们要点亮小灯,就是要输出高低电平。
理论上将功能选择寄存器设置为IO口,方向寄存器选择为输出,之后在输出寄存器中写入0或1就可以输出高低电平,从而点亮小灯了。
但是,我们必须考虑到开发板上电路,因为你要知道哪个管脚和小灯是连接的。
这个是开发板的原理图:这里的LED PWR有开关的作用,低电平有效,低电平时才能给LED供电,而DIGx是单片机的引脚。
在单片机上对应的是这个:LED PWR为P7.3。
DIG1~4分别为P9.0~P0.3。
DIG5~8分别为P1.4~P1.7。
LED PWR为LED模块的开关,还有一个总开关POWER高电平有效。
所以在程序中还要设置这些位。
下面是我的程序:流水灯因为怕程序的格式乱了,以图片的形式展示了。
msp430 通用IO口
通用IO口3.2.1 IO口IO口是微处理器系统对外界沟通的最基本部件,从基本的键盘、LED到复杂的外设芯片等,都是通过IO口的输入输出操作来进行的。
在MSP430系列中,不同的单片机IO口数量不同。
体积最小的MSP430F20xx系列中只有10个IO口,适合在超小型设备中应用;功能最丰富的MSP430FG46xx系列中多达80多个IO 口,足够应付外部设备繁多的复杂应用。
在MSP430G2553单片机中,共有16个IO口,属于IO口较少的系列。
3.2.2 IO寄存器和大部分单片机类似,MSP430系列单片机也是将8个IO口编为一组。
每个IO口有四个控制寄存器,P1和P2还有额外的3个中断寄存器。
寄存器情况可参见表3.2。
PxDIR寄存器用于设置每一位的IO口方向MSP430单片机的IO口是双向IO口:0=输入 1=输出。
在使用IO口时首先要选择寄存器来设置每个IO口方向。
例如下面的语句:P1DIR |= BIT1+BIT3+BIT4;P1DIR |= ~(BIT5+BIT6+BIT7);以上语句将P1.1,P1.3和P1.4的方向置为输出,P1.5,P1.6和P1.7的方向置为输入。
PxDIR寄存器在复位的过程中会被清零,没有被设置的IO口方向均为输入状态,所以第二句可以省略。
注意,将未用的IO口置为输出可减小漏电流。
对于所有已经设成输出的IO口可通过PxOUT寄存器设置其输出电平;对于所有已经被设成输入的IO口,可通过PxIN寄存器读回其输入电平。
PxSEl寄存器用于设置每一位IO口的功能:0=普通IO口,1=第二功能。
在MSP430系列单片机中,很多内部功能模块也需要和外界进行数据交换,为了不增加芯片的管脚数量,大部分都和IO口管脚复用,这就导致MSP430系列单片机的大多数IO管脚都具有第二功能。
通过PxSEL可以指定某些IO口作为第二功能使用。
如MSP430G2553中P1.1和RXD,P1.2和TXD复用。
MSP430引脚功能介绍和寄存器详细分类
MSP430引脚功能介绍和寄存器详细分类引脚功能引脚名称序号I/O 说明Avcc 64 模拟供电电源正端.只为ADC和DAC的模拟部分供电Avss 62 模拟供电电源负端.只为ADC和DAC的模拟部分供电DVcc 1 数字供电电源正端.为所有数字部分供电DVss 63 数字供电电源负端.为所有数字部分供电P1.0/TACLK 12 I/O 通用数字I/O引脚/定时器A时钟信号TACLK 输入P1.1/TA0 13 I/O 通用数字I/O引脚/定时器A捕捉:CCI0A输入,比较:OUT0输出P1.2/TA1 14 I/O 通用数字I/O引脚/定时器A捕捉:CCI1A输入,比较:OUT1输出P1.3/TA2 15 I/O 通用数字I/O引脚/定时器A捕捉:CCI2A输入,比较:OUT2输出P1.4/SMCLK 16 I/O 通用数字I/O引脚/SMCLK信号输出P1.5/TA0 17 I/O 通用数字I/O引脚/定时器A,比较:OUT0输出P1.6/TA1 18 I/O 通用数字I/O引脚/定时器A,比较:OUT1输出P1.7/TA2 19 I/O 通用数字I/O引脚/定时器A,比较:OUT2输出P2.0/ACLK 20 I/O 通用数字I/O引脚/ACLK输出P2.1/TAINCLK 21 I/O 通用数字I/O引脚/定时器A,INCLK上的时钟信号P2.2/CAOUT/TA0 22 I/O 通用数字I/O引脚/定时器A捕获:CCI0B输入/比较器输出P2.3/CA0/TA1 23 I/O 通用数字I/O引脚/定时器A,比较:OUT1输出/比较器A输入P2.4/CA1/TA2 24 I/O 通用数字I/O引脚/定时器A,比较:OUT2输出/比较器A输入P2.5/Rosc 25 I/O 通用数字I/O引脚,定义DCO标称频率的外部电阻输入P2.6/ADC12CLK/ 26 I/O 通用数字I/O引脚,转换时钟-12位ADC,DMA通道0外部触发器P2.7/TA0 27 I/O 通用数字I/O引脚/定时器A比较:OUT0输出P3.0/STE0 28 I/O 通用数字I/O引脚,USART0/SPI模式从设备传输使能端P3.1/SIMO0/SDA 29 I/O 通用数字I/O引脚,USART0/SPI模式的从入/主出,I2C数据P3.2/SOMI0 30 I/O 通用数字I/O引脚,USART0/SPI模式的从出/主入P3.3/UCLK0/SCL 31 I/O 通用数字I/O引脚,USART0/SPI模式的外部时钟输入,USART0 P3.4/UTXD0 32 I/O 通用数字I/O引脚,USART0/UART模式的传输数据输出P3.5/URXD0 33 I/O 通用数字I/O引脚,USART0/UART模式的接收数据输入P3.6/UTXD1 34 I/O 通用数字I/O引脚,USI1/UART模式的发送数据输出P3.7/URXD1 35 I/O 通用数字I/O引脚,USI1/UART模式的接收数据输入P4.0/TB0 36 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR0P4.1/TB1 37 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR1P4.2/TB2 38 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR2P4.3/TB3 39 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR3P4.4/TB4 40 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR4P4.5/TB5 41 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR5P4.6/TB6 42 I/O 通用数字I/O引脚,捕获I/P或者PWM输出端口-定时器B7 CCR6P4.7/TBCLK 43 I/O 通用数字I/O引脚,输入时钟TBCLK-定时器B7P5.0/STE1 44 I/O 通用数字I/O引脚,USART1/SPI模式从设备传输使能端P5.1/SIMO1 45 I/O 通用数字I/O引脚,USART1/SPI模式的从入/主出P5.2/SOMI1 46 I/O 通用数字I/O引脚,USART1/SPI模式的从出/主入P5.3/UCLK1 47 I/O 通用数字I/O引脚,USART1/SPI模式的外部时钟输入,USART0/SPI 模式的时钟输出- 8 -P5.4/MCLK 48 I/O 通用数字I/O引脚,主系统时钟MCLK输出P5.5/SMCLK 49 I/O 通用数字I/O引脚,子系统时钟SMCLK输出P5.6/ACLK 50 I/O 通用数字I/O引脚,辅助时钟ACLK输出P5.7/TboutH/ 51 I/O 通用数字I/O引脚,将所有PWM数字输出端口为高阻态-定时器B7P6.0/A0 59 I/O 通用数字I/O引脚,模拟量输入A0-12位ADC P6.1/A1 60 I/O 通用数字I/O引脚,模拟量输入A1-12位ADC P6.2/A2 61 I/O 通用数字I/O引脚,模拟量输入A2-12位ADC P6.3/A3 2 I/O 通用数字I/O引脚,模拟量输入A3-12位ADC P6.4/A4 3 I/O 通用数字I/O引脚,模拟量输入A4-12位ADC P6.5/A5 4 I/O 通用数字I/O引脚,模拟量输入A5-12位ADCP6.6/A6/DAC0 5 I/O 通用数字I/O引脚,模拟量输入A6-12位ADC,DAC.0输出P6.7/A7/DAC1/ 6 I/O 通用数字I/O引脚,模拟量输入A7-12位ADC,DAC.1输出,SVS输入RST/NMI 58 I 复位输入,不可屏蔽中断输入端口或者Bootstrap Lload启动(FLASHTCK 57 I 测试时钟,TCK是芯片编程测试和bootstrap loader启动的时钟输入端口TDO/TDI 54 I/O 测试数据输出端口,TDO/TDI数据输出或者编程数据输出引脚TMS 56 I 测试模式选择,TMS用作芯片编程和测试的输入端口VeREF+ 10 I/P 外部参考电压的输入VREF+ 7 O 参考电压的正输出引脚VREF-/VeREF- 11 O 内部参考电压或者外加参考电压的引脚XIN 8 I 晶体振荡器XT1的输入端口,可连接标准晶振或者钟表晶振XOUT/TCLK 9 I/O 晶体振荡器XT1的输出引脚或测试时钟输入XT2IN 53 I 晶体振荡器XT2的输入端口,只能连接标准晶振XT2OUT 52 O 晶体振荡器XT2的输出引脚时钟模块DCO.0-DCO.4 定义8 种频率之一,可以分段调节DCOCLK 频率,相邻两种频率相MOD.0-MOD.4 定义在32 个DCO 周期中插入的Fdco+1 周期个数,而在下的DCO 周期中为Fdco 周期,控制改换DCO 和DCO+1 选择的两种频率。
430IO口介绍
MSP430 单片机IO 端口介绍收藏MSP430的端口有P1、P2、P3、P4、P5、P6、S和COM(型号不同,包含的端口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含全部上述端口),它们都可以直接用于输入/输出。
MSP430系统中没有专门的输入/输出指令,输入/输出操作通过传送指令来实现。
端口P1`P6的每一位都可以独立用于输入/输出,即具有位寻址功能。
常见的键盘接口可以直接用端口进行模拟,用查询或者中断方式控制。
由于MSP430的端口只有数据口,没有状态口或控制口,在实际应用中,如在查询式输入/输出传送时,可以用端口的某一位或者几位来传送状态信息,通过查询对应位的状态来确定外设是否处于“准备好”状态。
端口的功能。
(1)P1,P2端口:I/O,中断功能,其他片内外设功能如定时器、比较器;(2)P3,P4P5P6端口:I/O,其他片内外设功能如SPI、UART模式,A/D转换等;(3)S,COM端口:I/O,驱动液晶。
MSP430各端口具有丰富的控制寄存器供用户实现相应的操作。
其中P1,P2具有7个寄存器,P3~P6具有4个寄存器。
通过设置寄存器我们可以实现:(1)每个I/O位独立编程;(2)任意组合输入,输出和中断;(3)P1,P2所有8个位全部可以用作外部中断处理;(4)可以使用所以指令对寄存器操作;(5)可以按字节输入、输出,也可按位进行操作。
端口P1,P2的功能可以通过它们的7个控制寄存器来实现。
这里,Px代表P1或P2。
(1)PxDIR:输入/输出方向寄存器。
8位相互独立,可以分别定义8个引脚的输入/输出方向。
8位再PUC后都被复位。
使用输入/输出功能时,应该先定义端口的方向。
作为输入时只能读,作为输出时,可读可写。
0:输入模式;1:输出模式。
如:P1DIR|=BIT4; //P1.4输出,P2DIR=0XF0; //高4位输出,低4位输入。
msp430单片机应用技术第4讲-IO
int main(void) { P1SEL &= ~(BIT0); P1SEL &= ~(BIT1); P1DIR &= ~(BIT0); P1DIR |= BIT1; P1OUT |= BIT1; //将中断寄存器清零 P1IE &= ~(BIT0); P1IFG &= ~(BIT0); P1IE |= BIT0; P1IES &= ~(BIT0); _EINT(); while (1); }
PnOUT.x P1OUT.0 P1OUT.1
P1Sel.2
P1Sel.3 P1Sel.4 P1Sel.5 P1Sel.6
P1DIR.2
P1DIR.3 P1DIR.4 P1DIR.5 P1DIR.6
P1DIR.2
P1DIR.3 P1DIR.4 P1DIR.5 P1DIR.6
P1OUT.2
P1OUT.3 P1OUT.4 P1OUT.5 P1OUT.6
独立按键
4*4按键
• 实例练习: • 随意按下4*4按键 ,将键值送到单片机的P2口上
数码管
LED显示器是单片机应用系统中常用的输出器 件。它是由若干个发光二极管组成的,当发光 二极管导通时,相应的一个点或一个笔画发亮 。 可分共阳极(公共端接高电平或+5V电压)和 共阴极(共低电平或接地)两种数码管
//将P1.0设置成基本I/O功能 //将P1.1设置成基本I/O功能 //将P1.0设置为输入方式 //将P1.1设置为输出方式 //让P1.1输出高电平,LED灭
//管脚P1.0使能中断 //对应管脚由低到高电平的跳变使相应标志置位 //开总中断
注:由于P1.和P2端口的所有引脚的中断使用一个中断向量,所以在中断处理程序中1. 判断具体是那个引脚触发了中断;2. 需要软件清除中断标志。
单片机IO口介绍
单片机IO口介绍单片机(Microcontroller)是一种集成了微处理器、存储器和各种I/O接口的芯片。
其中,I/O口是单片机与外部设备进行数据交换的通道,它是单片机最重要的功能之一、本文将详细介绍单片机的I/O口。
一、I/O口的基本概念在单片机中,I/O口是单片机与外部设备进行数据交换的接口。
它通过I/O线与外部设备相连接,可以实现数据的输入和输出。
单片机的I/O口可以分为通用I/O口和特殊功能I/O口两种类型。
通用I/O口是单片机常用的一种I/O口,它可以通过软件编程实现不同的功能,包括数字输入、数字输出和模拟输入输出等。
通用I/O口可以根据实际需求进行设置,提供灵活的数据交换方式。
特殊功能I/O口是单片机固定的一些特殊功能接口,通常用于特定的应用,如定时器、比较器、串行通信等。
特殊功能I/O口具有特殊的功能和特殊的操作要求,需要根据具体的应用进行设置。
二、通用I/O口的工作原理通用I/O口是单片机最常用的一种I/O口,它可以通过软件编程实现不同的功能。
通用I/O口的工作原理如下:1.输入模式:通用I/O口可以设置为输入模式,接收来自外部设备的输入信号。
在输入模式下,通用I/O口通常通过上拉或下拉电阻来实现输入的稳定性,并通过软件读取输入信号的状态。
2.输出模式:通用I/O口可以设置为输出模式,向外部设备输出信号。
在输出模式下,通用I/O口可以输出高电平或低电平信号,并通过软件控制输出的状态。
通用I/O口的状态可以通过软件进行设置和读取,可以实现灵活的数据交换。
通用I/O口的应用非常广泛,可以用于控制开关、驱动显示、读取按键等。
三、特殊功能I/O口的工作原理特殊功能I/O口是单片机固定的一些特殊功能接口,通常用于特定的应用。
特殊功能I/O口具有特殊的功能和特殊的操作要求,需要根据具体的应用进行设置。
下面介绍一些常见的特殊功能I/O口。
1.定时器/计数器:定时器/计数器是特殊功能I/O口中最常用的一个。
MSP430F149的IO口
PxDIR 0 输入,1 输出;
PxSEL 0 I/O口,1 第二功能;
PxOUT,PxIN;
PxIES 设置中断触发方式 0上升沿,1下降沿;
PxIE 设置中断触发允许0禁止,1允许;
PxIFG 中断标志寄存器,需要软件清零。
PxOUT/PxIN 输出/输入寄存器
时钟貌似要配置三个寄存器DCOCTL BCSCTL1 BCSCLK2
MSP430F149共有6组IO口,每组8bit, IO口的设置包括设置IO功能、方向、输入输出寄存器初值。
对IO口不做设置,默认情况下为第一功能,输入模式。
2 常用寄存器
PxDIR 0 输入,1 输出;
PxSEL 0 I/O口,1 第二功能;
PxOUT,PxIN;
PxIES 设置中断触发方式0上升沿,1下降沿;
PxIE 设置中断触发允许0禁止,1允许;
PxIFG 中断标志寄存器,需要软件清零。
3 用法
IO口中断:
P1,P2口总共有16个IO口均能引发中断,相关寄存器为PXIE(中断允许):0不允许,1允许。
PXIES(中断触发岩选择)0上升沿、1下降沿。
PXIFG(中断标志寄存器),I0口满足中断时相应位置一,只能通过软件清零。
P1和P2分别公用两个中断入口
PORT1_VECTOR,PORT2_VECTOR。
注意IO口中断模式输入仍为第一功能,PXSEL=0。
MSP430单片机的通用IO接口
{
P1OUT ^= (BIT1 + BIT5); //LED1,LED5闪烁
delayus(200);
//延迟0.2s
}
else if((P2IN&0x07) == 0x03) //K3 开关闭合
{
P1OUT = ~mask;
//LED逐个点亮
delayus(100); //延迟0.1s
mask += mask;
59 60 61
2 3 4 5 6
P6.0/A0 P6.1/A1 P6.2/A2 P6.3/A3 P6.4/A4 P6.5/A5 P6.6/A6 P6.7/A7/SVSIN
P3.0/UCB0STE/UCA0CLK P3.1/UCB0SIMO/UCB0SDA P3.2/UCB0SOMI/UCB0SCL
P1.0/TACLK/CAOUT P1.1/TA0 P1.2/TA1 P1.3/TA2
P1.4/SMCLK P1.5/TA0 P1.6/TA1 P1.7/TA2
12 13 14 15 16 17 18 19
44 45 46 47 48 49 50 51
P5.0/UCB1STE/UCA1CLK
P2.0/ACLK/CA2
XT2OUT XT2IN
RST/NMI TCK
TDI/TCLK TDO/TDI
TMS
52 53 58 57 55 54 56
MSP430F249
R4 R5 R6
10k 10k 10k
K1 K2 K3
R1 330
D1
R2 330
D2
R3 330
D3
6
第3章 MSP430
P1OUT = BIT4+BIT5 +BIT6;
msp430io口的配置和使用
msp430io口的配置和使用msp430 io口的配置和使用一 I/O的简介1、各种复用和各种设置(可以作为简单IO功能也可以作各种第二功能;可控制为输入、输出、接上拉电阻、接下拉电阻、接受中断等各种情况);2、IO口常用寄存器有:PXDIR、PXIN、PXOUT、PXREN、PXSEL、PXDS;其中,X可以是1~8,也可以是A~D,因为P1、P2可以合称为PA。
例如(PAREN=0x0480)就等价于(P2REN=0x04、P1REN=0x80)。
IO口中断相关寄存器:PXIV、PXIFGX、PXIE、PXIES;由于IO 中断仅存在于P1口和P2口,因此X只能为1或2,而且不可以为A。
3、msp430f5529.h中定义了BIT0~BITF,方便用户进行位操作。
例如要设置P1.7和P2.2为输入,代码可如下:PADIR &= ~(BITA + BIT7)。
二 IO口常用寄存器配置1、PxDIR,Px口方向寄存器0 端口配置为输入(默认)1 端口配置为输入2、PxOUT,Px口输出寄存器(输入、输出两种模式)当IO口配置为输出模式时:0 输出低电平1 输出高电平当IO口配置为输入模式并且置高/ 置低使能时:0置低1置高3、PxIN,Px 口输入寄存器只读4、PxREN,Px口置高/ 置低使能寄存器0关闭置高/ 置低1使能置高/ 置低5、PxSEL,Px功能选择寄存器(IO中断只有在普通IO下才能使用)0普通的I/O(默认)1有连接外围电路的特殊用途6、PxDS,Px 口输出驱动能力寄存器(我都是用的默认)0减弱输出驱动能力(默认)1全力输出驱动能力三普通IO使用举例说明:本例程是流水灯加按键控制,每次S1按下,便在等待S2按下,否则,所有LED一直闪烁。
若无按键按下,则八盏灯以流水灯方式显示。
#include ;#define uint8_t unsigned char#define uint16_t unsigned int//********* 控制LED的IO口宏定义************* #define LED145678_PORT_DIRP1DIR#define LED145678_PORT_OUTP1OUT#define LED23_PORT_DIRP8DIR#define LED23_PORT_OUTP8OUT//************ LED的IO口宏定义 ************* #define LED1 0x01#define LED20x02#define LED30x04#define LED40x08#define LED50x10#define LED60x20#define LED70x40#define LED80x80#define LED_ALL0xFF//************ 按键的IO口宏定义************* #define BUTTON_S1(P1IN & BIT7)#define BUTTON_S2(P2IN & BIT2)//*********************************************** ***********//*函数: void delay(uint16_t x_ms)//*功能:延时程序//*参数: x_ms(单位:ms)//*返回:无//*备注:无//*********************************************** ***********void delay(uint16_t x_ms){uint16_t i=0,j=0;for(i=x_ms;i>;0;i--)for(j=110;j>;0;j--);}//*********************************************** ***********//*函数: void LED_Init()//*功能: LED的IO口方向初始化//*参数:无//*返回:无//*备注:无//*********************************************** ***********void LED_Init(){LED145678_PORT_OUT &= ~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5);LED145678_PORT_DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5;LED23_PORT_OUT &= ~(BIT1 + BIT2);LED23_PORT_DIR |= BIT1 + BIT2;}//*********************************************** ***********//*函数: void Board_ledOn(uint8_t ledMask)//*功能:打开输入的那盏灯//*参数: ledMask//*返回:无//*备注:无//**********************************************************void Board_ledOn(uint8_t ledMask){if (ledMask & LED1) LED145678_PORT_OUT |= BIT0; if (ledMask & LED2) LED23_PORT_OUT |= BIT1;if (ledMask & LED3) LED23_PORT_OUT |= BIT2;if (ledMask & LED4) LED145678_PORT_OUT |= BIT1; if (ledMask & LED5) LED145678_PORT_OUT |= BIT2; if (ledMask & LED6) LED145678_PORT_OUT |= BIT3; if (ledMask & LED7) LED145678_PORT_OUT |= BIT4; if (ledMask & LED8) LED145678_PORT_OUT |= BIT5; }//*********************************************** ***********//*函数: void Board_ledOff(uint8_t ledMask)//*功能:关闭输入的那盏灯//*参数: ledMask//*返回:无//*备注:无//*********************************************** ***********void Board_ledOff(uint8_t ledMask){if (ledMask & LED1) LED145678_PORT_OUT &= ~BIT0; if (ledMask & LED2) LED23_PORT_OUT &= ~BIT1;if (ledMask & LED3) LED23_PORT_OUT &= ~BIT2;if (ledMask & LED4) LED145678_PORT_OUT &= ~BIT1; if (ledMask & LED5) LED145678_PORT_OUT &= ~BIT2; if (ledMask & LED6) LED145678_PORT_OUT &= ~BIT3; if (ledMask & LED7) LED145678_PORT_OUT &= ~BIT4; if (ledMask & LED8) LED145678_PORT_OUT &= ~BIT5; }//*********************************************** ***********//*函数: void Board_ledToggle(uint8_t ledMask)//*功能:输入的那盏灯的状态取反//*参数: ledMask//*返回:无//*备注:无//*********************************************** ***********void Board_ledToggle(uint8_t ledMask){if (ledMask & LED1) LED145678_PORT_OUT ^= BIT0;if (ledMask & LED2) LED23_PORT_OUT ^= BIT1;if (ledMask & LED3) LED23_PORT_OUT ^= BIT2;if (ledMask & LED4) LED145678_PORT_OUT ^= BIT1; if (ledMask & LED5) LED145678_PORT_OUT ^= BIT2; if (ledMask & LED6) LED145678_PORT_OUT ^= BIT3; if (ledMask & LED7) LED145678_PORT_OUT ^= BIT4; if (ledMask & LED8) LED145678_PORT_OUT ^= BIT5; }//*********************************************** ***********//*函数: void main(void)//*功能:主函数//*参数:无//*返回:无//*备注:无//*********************************************** ***********void main(void){uint8_t LED = LED1; //定义变量LEDWDTCTL = WDTPW | WDTHOLD;//关闭看门狗LED_Init(); //初始化LED的IO口方向PADIR &= ~(BITA + BIT7); //将按键的IO口方向设为输入PAREN |=(BITA + BIT7); //置高/ 置低使能PAOUT |=(BITA + BIT7); //置高(类似于上拉)while(1){Board_ledOn(LED);delay(1000); //延时1s左右Board_ledOff(LED);LED = LED。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
第3章 MSP430
分析说明:发光二极管LED是一种半导体器件,当两端 压降大于1V时,通过 5mA 左右的导通电流时即可发光。 导通电流越大,亮度越高,但若电流过大,会烧毁二 极管,一般我们控制在3~20mA。在这里,给发光二极 管串联一个电阻的目的就是为了限制通过发光二极管 的电流不要太大,因此这个电阻又称为“限流电阻”, 通常取300~1000Ω。MSP430F249单片机的I/O口输出 电流最大为6mA,所有电流之和不超过48mA。且当其
2
第3章 MSP430
3
第3章 MSP430
4
第3章 MSP430
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设为输出
K1 K2 K3
P5.0/UCB1STE/UCA1CLK P2.0/ACLK/CA2 P5.1/UCB1SIMO/UCB1SDA P2.1/TAINCLK/CA3 P5.2/UCB1SOMI/UCB1SCL P2.2/CAOUT/TA0/CA4 P5.3/UCB1CLK/UCA1STE P2.3/CA0/TA1 P5.4/MCLK P2.4/CA1/TA2 P5.5/SMCLK P2.5/ROSC/CA5 P5.6/ACLK P2.6/ADC12CLK/CA6 P5.7/TBOUTH/SVSOUT P2.7/TA0/CA7 P6.0/A0 P6.1/A1 P6.2/A2 P6.3/A3 P6.4/A4 P6.5/A5 P6.6/A6 P6.7/A7/SVSIN VEREF+ VREF+ VREF-/VEREFXIN XOUT AVCC AVSS MSP430F249 P3.0/UCB0STE/UCA0CLK P3.1/UCB0SIMO/UCB0SDA P3.2/UCB0SOMI/UCB0SCL P3.3/UCB0CLK/UCA0STE P3.4/UCA0TXD/UCA0SIMO P3.5/UCA0RXD/UCA0SOMI P3.6/UCA1TXD/UCA1SIMO P3.7/UCA1RXD/UCA1SOMI XT2OUT XT2IN RST/NMI TCK TDI/TC (BIT0+BIT1+BIT2);
入(可省略)
// P1.0、P1.1、P1.2设为输
5
第3章 MSP430
图3.1 通用I/O接口应用示例图
R4
10k
R5
10k
R6
10k
U1
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 59 60 61 2 3 4 5 6 10 7 11 8 9 64 62 P4.0/TB0 P4.1/TB1 P4.2/TB2 P4.3/TB3 P4.4/TB4 P4.5/TB5 P4.6/TB6 P4.7/TBCLK P1.0/TACLK/CAOUT P1.1/TA0 P1.2/TA1 P1.3/TA2 P1.4/SMCLK P1.5/TA0 P1.6/TA1 P1.7/TA2 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 52 53 58 57 55 54 56
第3章 MSP430
第3章 MSP430单片机的通用IO接口
I/O口是单片机控制系统对外沟通的最基本部件,从基本的键盘、LED 显 示到复杂的外设芯片等,都是通过I/O口的输入、输出操作来进行读
取或控制的。为满足单片机系统对外部设备控制的需要,MSP430提
供了许多功能强大、使用方便灵活的输入/输出接口。为了减少芯片 引脚的数量以降低芯片的成本,又提供更多功能的I/O口,现在许多 单片机都采用了I/O口复用技术,即端口可作为通用的I/O口使用,也 可作为某个特殊功能的端口使用,用户可根据系统的实际需要来定义
R1 R2 R3
330 330 330
D1 D2 D3
6
第3章 MSP430
P1OUT = BIT4+BIT5 +BIT6;
// P1.4~P1.6输出高电平
// 二极管阳极接高电平,二极管不发光 if((P1IN & BIT0) == 0) P1OUT |= BIT4; //P1.4输出低电平点 亮LED
I/O 口输出“0”时,可以吸收最大 40mA 的电流。因此
采用单片机I/O口控制发光二极管负极的设计。
9
第3章 MSP430
7
第3章 MSP430
实例3.1 彩灯控制
任务要求:利用MSP430F249单片机的P1口控制8个发光 二极管LED1~LED8,P1口接入三个开关K1~K3,当K1 闭合时,LED1和LED4闪烁,闪烁时间1s;当K2闭合 时,LED2和LED5闪烁,闪烁时间2s;当K3闭合时, LED1~LED8循环闪烁,闪烁时间1s。
使用。这样就为设计开发提供了方便,简化了单片机系统的硬件设计
工作。
1
第3章 MSP430
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。