2256|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

MSP430F169单片机编程基础——(四)I/O操作 [复制链接]

四、        I/O操作
端口P1具有输入/输出、中断和外部模块功能,这些功能可通过 7个控制寄存器
各控制寄存器特点及其使用:

(一)   PxDIR   输入/输出方向寄存器
相互独立的8位分别定义了Px 口的8位的输入输出方向。在PUC 复位后 PIDIR 各位均复位。
使用输入/输出功能时,应先定义端口方向。作为输入时,只能读;作为输出时,可读可写。
MSP430F169单片机编程基础——(四)I/O操作
PxDIR.x:端口输入输出方向控制
0:输入模式
1:输出模式
操作:
P1DIR  |=0x10; (00010000B)    // P1.4作输出,其余各位端口方向不变。
P1DIR  &=0x7f; (01111111B)    // P1.7作输入,其余各位端口方向不变。

(二)   PxIN    输入寄存器
该寄存器是只读寄存器。只能通过读取该寄存器内容才能知道 Px 口的输入信号的状态。
读出此寄存器的内容中,只有Px口设为输入的数据位有效。
MSP430F169单片机编程基础——(四)I/O操作
对于Px口设为输出的那些位,一般来说,PxIN.x = PxOUT.x
PxIN.x:端口输入的电平
0:端口输入低电平
1:端口输入高电平
操作:
unsigned char Temp;
P1DIR  &=0x77 ;(01110111B)     // P1.3和P1.7输入
Temp = P1IN;    // Temp为已定义的一变量,Temp 中只要第7位和第4位有效。

(三)   PxOUT   输出寄存器
该寄存器可读可写,读取时,其内容与 Px 口引脚定义无关。改变方向寄存器的内容,此寄存器内容不受影响。
MSP430F169单片机编程基础——(四)I/O操作
PxOUT.x:端口输出的电平
0:端口输出低电平
1:端口输出高电平
注意:
如果P1OUT.0 = 1(P1.0输出高) ,但是 P1DIR.0 = 0(该引脚为输入模式) ,则此时 P1.0为输入;(方向寄存器>输出寄存器)
如果P1DIR.0 = 1(该引脚为输出模式) ,则此时 P1.0为输出,并且输出为高电平。 (方向寄存器默认输出为1)
操作:
P1DIR  |=0x88; (10001000B) // P1.3和P1.7输出
P1OUT  |=0x88;              // P1.3和P1.7输出高电平

(四)   PxSEL  引脚功能选择寄存器
该寄存器可读可写,如果有该引脚具有特殊功能的话,则可以通过该寄存器使用特殊功能。
MSP430F169单片机编程基础——(四)I/O操作
PxSEL.x:引脚功能选择
0:该引脚的普通O/I端口
1: 该引脚的功能端口(应用第二功能口)

(五)   PxIFG  中断标志寄存器
该寄存器只有P1和P2口才有,该寄存器有 8个标志位,标志相应引脚是否有中断请求。
MSP430F169单片机编程基础——(四)I/O操作
PxIFG.x:中断标志
0:该引脚无中断请求
1:该引脚有中断请求

(六)   PxIE  中断允许寄存器
该寄存器只有P1和P2口才有,该寄存器有 8个标志位,标志相应引脚是否能响应中断请求。
MSP430F169单片机编程基础——(四)I/O操作
PxIFG.x:中断允许标志
0:该引脚中断禁止
1:该引脚中断允许

(七)   PxIES  中断触发沿控制寄存器
该寄存器只有P1和P2口才有,该寄存器有 8个标志位,标志相应引脚的中断触发沿。
MSP430F169单片机编程基础——(四)I/O操作
PxIFG.x:中断触发沿选择
0:上升沿产生中断
1:下降沿产生中断

例一:用软件定时使发光二级管闪烁。
程序代码如下:
#include
void main (void)
{  
  unsigned char i;
  WDTCTL=WDTPW+WDTHOLD;    // 关看门狗
  P4DIR  |= 0X10;         // P4.0作输出(00010000B) (在实验系统板中P4.0接有一个发光二极管)
  While(1)
  {
    i=50000;
    P4OUT ^=0X01;     //   ^ 为异或, P4OUT ^=0X01 即 P4OUT=0Xfe(11110111B)
    While(i--);            // 软件定时
  }
}

例二:在系统板上实现按一次按键,对应的发光二极管状态改变一次。
#include
void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;    //关闭看门狗
  P4DIR = 0XfF;              // P4全部设置为输出状态,可读可写
  P4OUT = 0Xff;              //P4全部输出高电平
  P1OUT = 0xff;        //P1全部输出高电平                       
  P1DIR = 0xf0 ;        // P1.0~P1.3设置为输入状态,P1.4~P1.7设置为输出状态,0输入1输出
  P1IES = 0x0f;         // P1.0~P1.3设置为下升沿触发中断,P1.4~P1.7设置为上降沿触发中断,0上1下
  P1IFG = 0;                    // P1无中断请求,中断标志清零(这个地方是不是应该是P1IFG=0X00)
  P1IE = 0x0f;          // P1.0~P1.3设置为中断允许,P1.4~P1.7设置为中断禁止,0禁止1允许
  _EINT();             // 开总中断 (marked,can't understand it)
  while(1)
  _BIS_SR(LPM4_bits);             // 进入低功耗模式4(marked,can't understand it)
}

#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void)  // 键盘中断
{
  unsigned int i;
  unsigned char temp;
  temp = P1IFG;
  for(i=0;i<0x1ff;i++);               // 软件延时,从0加到256,耗时消抖
  if((P1IN&temp)==(!temp))        // (marked,can't understand it)
   {
     switch(temp)
       {
         case 1: P4OUT ^=0X01;break;  //P4.4状态改变,即LED1状态改变
         case 2: P4OUT ^=0X02;break;  //P4.4状态改变,即LED2状态改变
         case 4: P4OUT ^=0X04;break;  //P4.4状态改变,即LED2状态改变
         case 8: P4OUT ^=0X08;break;  //P4.4状态改变,即LED2状态改变
       }
   }  
  P1IFG = 0;                       // 清除中断请求位
}
 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表