如果只改动部分位,用逻辑操作:
GPIO |= 0x80;//最高位置位,0x80 = 1000_0000B
GPIO &= ~0x10;//第4位清零,~0x10 = 1110_1111B
例:
GPIO = 0xFF;//GPIO = 1111_1111B
GPIO &= ~0xF0;//GPIO = 0000_1111B
GPIO |= 0xA0;//GPIO = 1010_1111B
这样GPIO就从0xFF,变成了0xAF。
给你两个宏:
#define HI_BIT(PORT,BIT) (PORT |= (1<
#define LO_BIT(PORT,BIT) (PORT &= ~(1<
其中,PORT:P0\P1\P2\P3;BIT:0\1\2\3\4\5\6\7
对了,看到之前的“追问”,感觉你对单片机的I\O口不太熟,之前的是位操作,只会改变要操作的位,对该端口的其他7个位没有影响。如果8个位都要修改,可以用 PORT = DATA;的结构,如把变量Value的值赋给P0口,C语言可以用“P0 = Value;”,汇编用“MOV P0,Value”.
其实I\O口并不复杂,它只是反映了寄存器的值,即Pn(I\O口)口的输出永远等于特殊功能寄存器Pn(寄存器)的值(n = 0\1\2\3),我们只需要修改寄存器(和变量的使用方法一样)的值,就能改变端口的电平。