|
引用 3 楼 cheng_bingyuan 的回复:
引用 2 楼 zxq6 的回复:
unsigned char i,n=0x14;
sbit p3_0=p3^0;
for(i=7;i>=0;i--)
{
p3_0=(n>>i)&0x01;
}
我开始也是这样写的,只是P3_0是一位,而n是8位,这样可以直接赋值吗
可以的,看你的系统应该是51吧(51支持位寻址)。
如果实在不放心,用这个:
- unsigned char output = 0x14; //需移位输出的值
- unsigned char p3 = 0xff; //P3口的原始值
- char i = 0;
- for( i=0; i<8;i++)
- {
- p3 = (p3|0x08)&((((output>>i)|0xfe)<<3)|0xf7); //只改变P3口的P_3(第四位)不改变P3其他端口
- printf("p3 = %x\n",p3); //打印结果,查看是否正确
- }
复制代码
上面这个是标准C语言版的,不考虑像C51支持的sbit数据类型。测试没问题。
另外也可用位域来解决(考虑到要新添数据结构,没有采用) |
|