我的目的是改变端口中某一位的输出状态
代码如下:
inp(int addr)
{
unsigned char al;
__asm
{
push edx
mov edx, DWORD PTR addr
in al, dx
and eax, 0xff
pop edx
}
return al;
}
outp(int addr, unsigned char val)
{
__asm
{
push edx
mov edx, DWORD PTR addr
mov al, BYTE PTR val
out dx, al
pop edx
}
}
然后应用上面的读取和输出函数进行位操作
1、
unsigned int val = inp(a_porta0);
outp(a_porta0, val | (1 << 1));//端口bit1操作
2:
unsigned int val = inp(a_porta0);
outp(a_porta0, val | (1 << 2));//端口bit2操作
现在有一个问题,当我将bit1置高位(5V),保持bit1不变;
接着改变bit2的电平,发现当改变bit2电平时,bit1的高位没有了,变成低位(0V)
我测试过屏蔽上面的inp函数,以为是位与造成的,结果没变化;
应该是outp(a_porta0, val | (1 << 1));//端口bit1操作
outp(a_porta0, val | (1 << 2));//端口bit2操作
操作出的问题;
我想要的是,当我改变端口中某位的输出时,其他保持不变,不要改了bit2,bit1没了;由于汇编不懂,请高手指点,无限感谢。
int al; ---------这个名字能不能换一个.....我有些担心.......