STC51单片机IO口模式快速设置

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

STC51单片机IO口模式的快速设置新型51单片机STC系列,较传统51单片机在性能和速度上有根本性的提高。速度提高8—12倍;片上RAM大量增加;片上外围模块大量增加,等等。

其中IO口的模式增加为4种(传统51只有1中),以P0口为例:

这里,每个端口新增两个寄存器PxM0, PxM1(x=0,1,2,3)。在设置每一个IO端的模式时都需要对这两个寄存器进行操作。

比如:要将P0.7设为推挽输出,

P0.6设为准双向口,

P0.5设为高阻输入;

P0.4设为开路模式,

P0.3---P0.0都设为准双向口,

那么需要如下的代码:

IO_Init()

{

P0M0=0x30;//0011 0000

P0M1=0x90;//1001 0000

}

这样的设置不便于记忆,很容易写错,且写好的代码可读性差,为此,我们可以通过一个宏定义来解决,具体如下:

#define PORT0 0

#define PORT1 1

#define PORT2 2

#define PORT3 3

#define BIT0 0

#define BIT1 1

#define BIT2 2

#define BIT3 3

#define BIT4 4

#define BIT5 5

#define BIT6 6

#define BIT7 7

#define STANDARD 0

#define PP_OUT 1

#define Z_IN 2

#define OD 3

#define IOMODE(Port,bit_n,mode) { \

switch(Port)\

{\

case 0:\

switch(mode) { \

case STANDARD: P0M0&=~(1<

case PP_OUT: P0M0&=~(1<

case Z_IN: P0M0|=(1<

case OD: P0M0|=(1<

} \

break;\

case 1:\

switch(mode) { \

case STANDARD: P1M0&=~(1<

case PP_OUT: P1M0&=~(1<

case Z_IN: P1M0|=(1<

case OD: P1M0|=(1<

} \

break;\

case 2:\

switch(mode) { \

case STANDARD: P2M0&=~(1<

case PP_OUT: P2M0&=~(1<

case Z_IN: P2M0|=(1<

case OD: P2M0|=(1<

} \

break;\

case 3:\

switch(mode) { \

case STANDARD: P3M0&=~(1<

case PP_OUT: P3M0&=~(1<

case Z_IN: P3M0|=(1<

case OD: P3M0|=(1<

} \

break;\

}\

}

有了上面的宏定义,在初始化程序中可以直接这样写

IO_Init()

{

IOMODE(PORT0,BIT7,PP_OUT)

IOMODE(PORT0,BIT6, STANDARD)

IOMODE(PORT0,BIT5, Z_IN)

IOMODE(PORT0,BIT4, OD)

IOMODE(PORT0,BIT3, STANDARD)

IOMODE(PORT0,BIT2, STANDARD)

IOMODE(PORT0,BIT1, STANDARD)

IOMODE(PORT0,BIT0, STANDARD)

}

相关文档
最新文档