欢迎来到天天文库
浏览记录
ID:54698247
大小:163.00 KB
页数:3页
时间:2020-04-19
《STC51单片机IO口模式快速设置.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、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_
2、Init(){P0M0=0x30;//00110000P0M1=0x90;//10010000}这样的设置不便于记忆,很容易写错,且写好的代码可读性差,为此,我们可以通过一个宏定义来解决,具体如下:#definePORT00#definePORT11#definePORT22#definePORT33#defineBIT00#defineBIT11#defineBIT22#defineBIT33#defineBIT44#defineBIT55#defineBIT66#defineBIT77#defineSTANDARD0
3、#definePP_OUT1#defineZ_IN2#defineOD3#defineIOMODE(Port,bit_n,mode){switch(Port){case0:switch(mode){caseSTANDARD:P0M0&=~(1<4、=(1<5、=(1<6、caseOD:P0M07、=(1<8、=(1<9、=(1<10、=(1<11、=(1<12、P1M113、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
4、=(1<5、=(1<6、caseOD:P0M07、=(1<8、=(1<9、=(1<10、=(1<11、=(1<12、P1M113、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
5、=(1<6、caseOD:P0M07、=(1<8、=(1<9、=(1<10、=(1<11、=(1<12、P1M113、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
6、caseOD:P0M0
7、=(1<8、=(1<9、=(1<10、=(1<11、=(1<12、P1M113、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
8、=(1<9、=(1<10、=(1<11、=(1<12、P1M113、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
9、=(1<10、=(1<11、=(1<12、P1M113、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
10、=(1<11、=(1<12、P1M113、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
11、=(1<12、P1M113、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
12、P1M1
13、=(1<14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
14、=(1<15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
15、=(1<16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
16、=(1<17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
17、=(1<18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
18、break;case3:switch(mode){caseSTANDARD:P3M0&=~(1<19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
19、=(1<20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
20、=(1<21、=(1<22、=(1<23、序中可以直接这样写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)}
21、=(1<22、=(1<23、序中可以直接这样写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)}
22、=(1<23、序中可以直接这样写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)}
23、序中可以直接这样写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)}
此文档下载收益归作者所有