NXP半导体P89LPC900系列单片机(6倍速80C51内核)的I/O可以配置为可选的4种模式:准双向、推挽输出、仅为输入、开漏。在复位后,所有I/O端口都默认为输入状态。P0、P1、P2、P3端口每根管脚的工作模式由P0M1、P0M2、P1M1……P3M2等8个寄存器来决定,具体配置方法如下表所示:<br /><br />=======================<br />PxM1.y PxM2.y 端口模式<br />-----------------------<br /> 0 0 准双向 <br /> 0 1 推挽 <br /> 1 0 仅为输入(高阻)<br /> 1 1 开漏 <br />=======================<br /><br /> 例如,将P0.1配置为推挽模式:<br /> P0M1 &= 0xFD;<br /> P0M2 |= 0x02;<br /><br /> 但是,存在一个问题,如果没有把I/O配置表熟练地背诵下来,则编写程序时还要去翻《数据手册》,很不方便。经过仔细考虑,我编制出了一个P89LPC935的I/O配置头文件,可以方便地把I/O管脚配置为所需要的模式。<br /><br /> <br />/******************************************************************************<br /> IOCFG935.H<br /> NXP-P89LPC935的I/O配置头文件<br />说明:<br /> P89LPC9xx的I/O端口可以配置为4种模式:准双向、推挽输出、高阻输入、开漏<br /> 复位后,所有I/O端口默认为高阻输入状态<br /> 运用本头文件中定义的宏函数可以方便地将I/O配置成所需要的模式<br />注意:<br /> P1.2(SCL,T0) 作为输出时只能配置为开漏模式<br /> P1.3(SDA,/INT0) 作为输出时只能配置为开漏模式<br /> P1.5(/RST) 只能配置成仅为输入模式<br />******************************************************************************/<br /><br /><br />#ifndef IOCFG935_H<br />#define IOCFG935_H<br /><br /><br />#define PIN0 0x01<br />#define PIN1 0x02<br />#define PIN2 0x04<br />#define PIN3 0x08<br />#define PIN4 0x10<br />#define PIN5 0x20<br />#define PIN6 0x40<br />#define PIN7 0x80<br /><br /><br />//将所选I/O配置为准双向I/O模式<br />#define QuasiBidir(Port,Pins)<br />{<br /> Port##M1 &= ~(Pins);<br /> Port##M2 &= ~(Pins);<br />}<br /><br />//将所选I/O配置为推挽输出模式<br />#define PushPull(Port,Pins)<br />{<br /> Port##M1 &= ~(Pins);<br /> Port##M2 |= (Pins);<br />}<br /><br />//将所选I/O配置为仅为输入模式<br />#define InputOnly(Port,Pins)<br />{<br /> Port##M1 |= (Pins);<br /> Port##M2 &= ~(Pins);<br />}<br /><br />//将所选I/O配置为开漏I/O模式<br />#define OpenDrain(Port,Pins)<br />{<br /> Port##M1 |= (Pins);<br /> Port##M2 |= (Pins);<br />}<br /><br /><br />/******************************************************************************<br />参数说明:<br /> Port:8位并行I/O端口,可以取P0、P1、P2或P3<br /> Pins:所选I/O管脚,可以取PIN0~PIN7,或者它们之间的任意“逻辑或”组合<br />用法举例:<br /> PushPull(P0, PIN1); //将P0.1配置为推挽模式<br /> OpenDrain(P1, PIN2 | PIN3); //将P1.2和P1.3同时配置为开漏模式<br />******************************************************************************/<br /><br /><br />#endif //IOCFG935_H<br /><br /> 相关链接:<a href='http://blog.21ic.com/user1/617/archives/2007/41963.html'>http://blog.21ic.com/user1/617/archives/2007/41963.html</a> |
|