第3章_MSP430单片机输入输出接口_对比

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第 3 章
1/0 口基本操作
MSP430F149 单片机系列有 6 组 110 口: Pl----- 肘。每个 1 / 0 口都有 8 个可以独立编程的
引脚 。 MSP430F149 单片机每个引脚都有第二功能,并且每个引脚可以单独设置成输入、输出
或者第一;功能 。 同时 .Pl 和 P2 口具有中断功能 .Pl 和 P2 口的每个引脚都可以单独设置成中
断,并且都可以单独设置成上升沿或者下降沿触发中断 。 Pl 口的所有引脚共用→个中断向
量, P2 口的所有引脚也共用一个中断向量,但它们的优先级和向量地址不一样,见 2. 5 节系统
中断。
MSP430F149 系列单片机的 1 / 0 口主要有以下特征:
》每个J/ O 口可以位独立编程设置;
》输入、输出可以任意结合使用;
:,. P 1 和 P2 口的中断功能位可以单独设置;
》有独立的输入 / 输出寄存器 。
3.1 1/0 口的基本操作流程
MSP430F149 的J/ O 口操作都是通过读 /写寄存器来完成的。与 MSP4 3 0F149 单片机的
J/ O 口中相关的寄存器有 PxDIR 、 PxlN 、 PxOUT 、 PxSEL 、 PxJFG 、 Px1E 和 PxlES ,其中后面三
个是中断寄存器。 P3 、 P4 、町、 P6 不具备中断功能,只与前面四个寄存器有关; Pl 、 P2 具有中
断功能.与上面所有的寄存器都有关系,详细请参考 3. 2 节寄存器说明部分 。
当 J / O 口作为 一 般的输入 /输出口使用时,其基本操作流程如下:
①选择I! O 口功能.基本 J/O 模式或其他模式(即设置 PxSEL 寄存器) ;
②设置方向寄存器 (PxDIR) ;
马-MSP430 时恒的平一一…一一一一一
①读出外部输入值 (PxIN) 或写人相应值 CPxOUT) ;
对 J / O 中断操作的基本流程如下:
① 设置 1/ 0 模式;
① 设置中断触发方式 CPxIES 寄存器) ;
①允许中断 C PxJE 寄存器 ) ;
④开总中断(调用_EINTC)或_B1S_SRCL PM4_ bi ts 十 GIE) 函数) ;
① 等待中断.有中断时执行中断服务程序 。
3.2 寄存器
1.功能选择寄存器 PxSEL
P xS E 1, ( .T = 1 . 2 , 3 . 4 , 5 . 6) ,设置相应的位为1,则该位对应的号|脚为外围模块的功能,即
第二功能;设置相应的位为 0 ,则该位对应的引脚为普通1/ 0 口。 PxSEL 寄存器的各位如
图 3 . 1 所示 。 其复位值全为 0 句默认为 1 / 0 口功能 。
|PxSEL.7 I 时EL. 6 1 时EL. 5 1 PxSEL4 I PxSEL.3 I PxSEL.2 1 PxSEL. l I PxSEL.O I
图 3.1 PxSEL 寄存榻的各位
注意:为了避免对某些位操作的时候影响其他的位,椎荐使用位操作指令进行读 / 写,请参考 3. .3节具体
的程序设计实例 。
2. 方向控制寄存器 PxDIR
P x fJIR (.1' =:: 1 .2.3.4 .5.6) :该寄存器控制 PX 口的各个引脚的方向 。 设置相应的位为1,
则该位对应的 fJ I 脚为输出;设置相应的位为 0 ,则该位对应的引脚为输入。 PxDIR 寄存器的各
个位如图 j. 2 所示 。 其复位值全

为 0 。
MIR. 71 PxD叫PxDlR.5J pxDlR.4J PxDI~ 1 p~IR.21 PxDiR.l [PxDlR.o J
图 3.2 PxDIR 寄存榻的各位
3. 输出控制寄存器 PxOUT
p x () U T (. r = 1 . 2 . 3 . 'L 5 . 6 ) :该寄存器控制 1 /υ 口的输出值 。 在输出模式下,设置相应的
位为 1. 贝IH支位对应的引脚输出为高电平 1 ;设置相应的位为 0 ,则该位对应的输出为低电平 0 。
Px()U丁寄存器的各个位如因 3. 3 所示 。
注意:l' xOl : l ì 位时其他不确 足 .在使用过程中 应 该先使 Px() U丁的值确定以后才设直方向寄存器 。
~. 52 .
均月旦地~'F- ~
|PxOUT.7 I px∞T.6 I PxO盯 5 ! PxOlJT.4 ! PxO盯 3 1 附盯 21 PxO盯 1 I PxOUT.O I
固 3.3 PxO UT 寄存器的各位
4. 输入状态寄存器 PxlN
PxIN Cr = ] ,2,3.4. 5, 6) :该寄 存 器反映I! O 口的输入值 。 在输入模式下.当I! O 口相应
输入为高电平时,该寄存器相应的位为 1 ;当 1/ 0 口相应输入为低电平时‘该寄存器相应的位
为 0 。
PxIN 寄存器的各个位如图 3 . 4 所示 。 其复位值为随机值,该寄存器为只读寄存器.写
无效 。
P刷 7 1 PxIN.6 I PxlN .5 1 PxlN.4 !附 3 r px1N.il PxIN.1 1 PxlN .O I
圄 3.4 PdN 寄存器的各位
5. 中断允许寄存器 PxlE
PxIE<.r= 1.2): 该控制器控制 1 / 0 口的中断允许 。 设置相应的位为1.则该位对应的引脚
允许中断;设置相应的位为 o , ~lj 该位对应的引脚 不 允许中断 。 PxlE 寄 存器的各个位如图 .1 . 5
所示。其复位值全为 o. 默认为不允许中断 。
M7 I Px.lE.6 I PxIE.5 I PxIE.4 I PxIE.3 1. PxlE.2 I PxlE.l 1 PxlE.O
固 3.5 PdE 寄存器的各位
6. 中断触发选择寄存器 PxI ES
PxIES(.r = 1.2): 该寄存器控制 1 / 0 口的中断边沿选择 。 设置相应的 位 为 1 ,贝Ij i哀位对应
的引脚选择下降沿触发中断;设置相应的位为 0 ,则该位对应的引脚选 择上 升沿触 发 中断 。
PxlES 寄存器的各 个 位如图 :) . 6 所示 。 其复位值全为 O ‘默认为上升沿触发中断 。
hIES.7! Px.lES.6 ! Px[ES.5 I PxIES.4 I 阳lES.3 I PxlES.2 I PxIES.l I PxIES
固 3.6 PxIES 寄存器的各位
7. 中断标志寄存器 PxI FG
PxlFG<.r= 1.2): 该寄存器为1/ 0 口的中断标志寄存器。若相应的位为1.则该位对应的
引脚有外部中断产生;若相应的位为 0 ,则该位对应的引脚没有外部中断产生 。 PxlFG 寄在器
的各个位如图 :t 7 所示 。 其复位值全为 O. 该寄存器必须通过软件复位.同时也可以通过软件
写 l 产生相应中断 。
二参黯F
MSP430 单片机基础与实践
一…一…一一一一一一一一一一一"
MG.71 PxIFG.6 I PxlFG.5J PxlFG.4 1 PxIFG.3 I PxlFG.21 PxIFG.tT PxIFG.o I
圄 3.7 PxIFG 寄存器的各位
注意:
."当设置为第二功能的时候. \1 SP410 不会主动设置引脚的方向 , 必须通过 PxlN 寄存器去设直 。
》当设置为输出

时.输入到外设的信号是锁存后的信号 。 当 PxSELx= 1 时,内部输入 信 号跟随引脚端的
信号;当 PxSE l. x = () 时.在 PxSELx 被复位以前,输入到外设的信号保持外设输入信号的值 。
);当 P I SE\. 和 P 2 只I二 1.寄存 器 的位设置为 1 . ~ IJ Pl 、 P 2 口的 1 / 0 中断功能失效 。
》在 P l 或 P 2 口进行中断功能允许时,在进入中断程序时必须用软件对中断标志清萃,中断标志不可以
自动清本 h
3.3 基本应用设计举例
在: 本书的配套实验版上.使用 MSP43ü F149 单片机的 P5 口扩展了一个 4X 4 的键盘,同
时采用 SPl 接口扩展了 4 位 LED 显示器。本例主要实现键值的循环显示 。 数码管显示的电
路和程序在第 5 章的 SPl 模式中有详细介绍 。 这里主要介绍键盘键值的读取,目的是希望读
者通过本实例来掌握 MSP4:3ú F1 4 9 单片机的 1 / 0 口的基本使用方法和键盘扫描的基本方法 。
键盘接口电路如图 3. 8 所示。
P50
P51
P52
VCC
P53
软件流程如图 3. 9 所示 。
具体程序如 f:
1:* include ..., 'MSP430x14x . h ‘、
Kl ..... ‘- K-2 -- K-3 -
圄 3.8 键盘接口电路 (PS)
K-4
第 3 章 ω 口墓本操作 E'
# def ine uchar unsigned char
# define uint unsigned int
# def ine led 81T7
固 3.9 行列式键盘扫描程序流程圈
const uchar segment)OJ = !OxcO.Oxf9 ,Oxa4.0xbO.Ox99.0x92.0x82 ,Oxf8 ,Ox80 ,Ox90 };
uchar static key_f lag = 0 ;
uchar stat ic count = 0;
uchar keyl;
uc har kk;
void int c lk( )
uchar i;
BCSCfLl& = ~ XT20FF;
BCSCfL21 = SELMl + SELS;
do
ii 打开 XT 振荡器
// MCLK 为 8 MHz.SMCLK 为 1 MHz
J海耀章h
l1li MSP430 单片机基础与实践
1FG1 & = ~ OFl FG:
for( i = 0: i ‘~ 100: i++)
NOP( ) :
whüe ( (IFG1 & OF1 FG) ! = 0):
IFGl& = '"'- OFIFG:
de1ay()
uint i:
for(i 二 O; i <= 1000:i++)
void int_spi( )
UOCTL 1 = SWRST:
UO口LI = CHAR + SYNC +附:
UOTCTL I = SSEL1 + SSELO + STC:
UOTCTL : ::: CKPH:
UOTCTL& :: ......, CKPL:
UOBRO ::: OX02:
UOBRl ::: OXOO :
UOMCTL::: OXOO :
ME11 :: USPIEO:
UOCTL&::: ~ SWRST:
1El & ::: ~ UTX1EO :
IEl& ::: ~ URXIEO:
盯SELi ::: OxOE:
P3D1R I :: B1T2 t B1T4 :
write_byte(uchar byte )
UOTXBUF ::: byte:
while( ( 1FG1&UTXIFGO ) ::: = 0) ;
1FG 1 & 之 ~ UTX1FGO :
display( uchar data )
P2DlR 1 = led:
P2αJTI = led ;
wr i te_.byte( segment[ data J) ;
f/ 清除振荡错误标志
/1 延时等待
/ 如果标志为1.则继续循环等待
二 线模式 SMCLK 作为 SP1 时钟
CKPL CKPH: 01 I 升沿写数据
f 使能 SPI
结 J!-. '1 1 断
选抨第二功能和I li O 方向
" UTX1FGO ::: 0 .表示数据从发送
/ /对 1 / 0 口寄存器操作一般使用逻辑"与"运算,防止改变其他
I 1 位的值(本书程序均采用此方式,读者可以参考)
' /便能 164C山
, i 写数据
P20UT& = ~ led;
第 3 章川

口基本操伟睛
// 禁止 164CLK
/ / 1'J 描一行根据参数 line 决定扫描具体哪 一 行
uc har scan_key( uchar line)
uchar key;
P50UT = line;
switch (P5IN&OXfO)
case OxeO: key = 1 + 1 ine; break ;
case OxdO: key = 2 + 1 ine ; break ;
case OxbO: key = 3 + 1 ine ; break ;
case Ox70: key = 4 + 1 ine; bre剖勺
defaul t : key = Oxf f ; bre挝h
return(key);
void fast_scan()
uchar temp;
-
nu
内Hd
a
咱EA
r- eV A
) ;'K
)
白U 刑U
OKM
nrp 曲 rL
nVUATMi H--
、,=
=民 p
晦-一四
UDAte
FLmr 、 S
PRJtGLEE-A
·-e
key_flag = 1 ;
void over()
uchar temp ,
P50UT& = OXFO;
do
temp = P5IN&OxfO;
if(temp = = OxfO)bre础;
while( 1) ;
// 读取键值
uchar get_key( )
l/ 低位全部为 0 ,判断有无键按下
// 如果有键按下则标志为 1 ,否则为 O
//低位全部为 0 ,判断有无键接下
//等待按键弹起
京:
『11 MS附单片机基础与实践
uchar key;
while(l)
key = scan_key( Oxe) j
if(key! = Oxff) {key! =Ox80;P50UT=OXOfj break , )
key = scan_key( Oxd) ;
if(key! = Oxff) i key! = Ox40 j P5αJT = OXOf j bre剖幻 )
key = scan_key( Oxb) :
if(key! = Oxf f) {key! = Ox20 jP50町= OXOf j break; )
key = scanjey( Ox7 ) ;
if(key! = Oxff) {keyl =Ox20 ;P5 ∞l' = OXOf; break 川
switch(key)
case Ox8f ;key = 0; bre剖k
case Ox90: key = 1 ; break;
case Ox91 :key = 2: bre剖h
case Ox9 2: key = 3: break;
case Ox4E: key = 4: bre剖h
case Ox4F: key ::: 5: break:
case Ox50 : key = 6: bre挝( :
case Ox51 :key = 7 ;bre创汇;
case Ox2C:key= 8:bre创u
case Ox2D: key '- 9: bre创{ :
case Ox2E:key= 10:break:
case Ox2F: key = 11 : break j
case 0x2 8: key = 12; break;
case Ox29:key= 13;break;
case Ox2A: key 二 14;break:
case Ox2B:key = 15; brealc:
default: key = Oxff: bre剖们
NOP() :
return( key) :
delay2()
、,
ι
uint j :-c O.j=O;
for(i = O:i <= 200;i ++)
for( j = 0; j <= 300: j ++ )
int main( void )
WDTCTL = WDTPW +阳THOLDj / /关闭看门狗
int_clk(); //初始化时钟
P5DIR I = B1TO + B1T1 + B1T2 + B1T3 j / /键盘初始化
int_spi(): //初始化 SP1
di splay( 0) :
display( 0) ;
display( 0) ;
display( 0) j
while(l)
fast_scan( ) j
第 3 章 ω 口基本操作 圈'
if(key_f lag = = 0) continue j
key_flaq = 0;
//判断是否有键按下,是则消抖,否则退出本次扫描
delay2( ) ;
fast_scan( ) ;
i f ( key- f lag = = 1)
key_f lag::: 0;
keyl = get_key( ) ;
over():
delay2 ( ) ;
display(key! ) :
通过以上介绍可以看出.使用 MSP430 单片机进行行列式按键的扫描程序设计和其他单
片机相似,完成按键扫描的程序编写,读者能够充分掌握 MSP430 单片机的基本1/ 0 口的操
作和使用。
~. ' 唱是擒f

相关文档
最新文档