打印
[ZLG-MCU]

【LPC900的笔记】方便的P89LPC900单片机I/O配置头文件

[复制链接]
2299|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LPC900|  楼主 | 2007-9-10 17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  NXP半导体P89LPC900系列单片机(6倍速80C51内核)的I/O可以配置为可选的4种模式:准双向、推挽输出、仅为输入、开漏。在复位后,所有I/O端口都默认为输入状态。P0、P1、P2、P3端口每根管脚的工作模式由P0M1、P0M2、P1M1……P3M2等8个寄存器来决定,具体配置方法如下表所示:

=======================
PxM1.y  PxM2.y 端口模式
-----------------------
  0       0    准双向 
  0       1    推挽 
  1       0    仅为输入(高阻)
  1       1    开漏 
=======================

  例如,将P0.1配置为推挽模式:
    P0M1 &= 0xFD;
    P0M2 |= 0x02;

  但是,存在一个问题,如果没有把I/O配置表熟练地背诵下来,则编写程序时还要去翻《数据手册》,很不方便。经过仔细考虑,我编制出了一个P89LPC935的I/O配置头文件,可以方便地把I/O管脚配置为所需要的模式。

 
/******************************************************************************
    IOCFG935.H
    NXP-P89LPC935的I/O配置头文件
说明:
    P89LPC9xx的I/O端口可以配置为4种模式:准双向、推挽输出、高阻输入、开漏
    复位后,所有I/O端口默认为高阻输入状态
    运用本头文件中定义的宏函数可以方便地将I/O配置成所需要的模式
注意:
    P1.2(SCL,T0) 作为输出时只能配置为开漏模式
    P1.3(SDA,/INT0) 作为输出时只能配置为开漏模式
    P1.5(/RST) 只能配置成仅为输入模式
******************************************************************************/


#ifndef IOCFG935_H
#define IOCFG935_H


#define PIN0    0x01
#define PIN1    0x02
#define PIN2    0x04
#define PIN3    0x08
#define PIN4    0x10
#define PIN5    0x20
#define PIN6    0x40
#define PIN7    0x80


//将所选I/O配置为准双向I/O模式
#define QuasiBidir(Port,Pins)
{
    Port##M1 &= ~(Pins);
    Port##M2 &= ~(Pins);
}

//将所选I/O配置为推挽输出模式
#define PushPull(Port,Pins)
{
    Port##M1 &= ~(Pins);
    Port##M2 |= (Pins);
}

//将所选I/O配置为仅为输入模式
#define InputOnly(Port,Pins)
{
    Port##M1 |= (Pins);
    Port##M2 &= ~(Pins);
}

//将所选I/O配置为开漏I/O模式
#define OpenDrain(Port,Pins)
{
    Port##M1 |= (Pins);
    Port##M2 |= (Pins);
}


/******************************************************************************
参数说明:
    Port:8位并行I/O端口,可以取P0、P1、P2或P3
    Pins:所选I/O管脚,可以取PIN0~PIN7,或者它们之间的任意“逻辑或”组合
用法举例:
    PushPull(P0, PIN1);             //将P0.1配置为推挽模式
    OpenDrain(P1, PIN2 | PIN3);     //将P1.2和P1.3同时配置为开漏模式
******************************************************************************/


#endif  //IOCFG935_H

相关链接:http://blog.21ic.com/user1/617/archives/2007/41963.html

相关帖子

沙发
LPC900|  楼主 | 2007-9-15 13:05 | 只看该作者

没人顶?其实这4个宏函数用起来还是挺方便的,而且高效率

该I/O模式配置头文件不仅可以用于LPC935,而且也可用于LPC901~936所有的型号。再举个例子:

#include <REG935.H>
#include "IOCFG935.H"

void main()
{
    PushPull(P0, PIN1);
    OpenDrain(P1, PIN2 | PIN3);
    InputOnly(P2, PIN4 | PIN5 | PIN6);
    QuasiBidir(P3, PIN0 | PIN1);
    ...
}

使用特权

评论回复
板凳
smileage| | 2007-9-15 16:40 | 只看该作者

可能习惯了

用习惯了,四个模式记得比较清楚了

P0M1 1 1 1 1 1 1 1 1  FF
P0M2 0 0 0 0 0 0 0 0  00

楼主这样有心倒是值得学习

使用特权

评论回复
地板
song1ming| | 2007-9-28 14:32 | 只看该作者

很不错呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

130

帖子

1

粉丝