3052|3

55

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一小段汇编代码请教 [复制链接]

我的目的是改变端口中某一位的输出状态

代码如下:
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; ---------这个名字能不能换一个.....我有些担心.......  详情 回复 发表于 2010-6-29 16:46
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我也是刚开始学习C,对好多不知道,望以后多指教
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
在线等 麻烦高手帮下忙 一档解决马上给分
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
int al; ---------这个名字能不能换一个.....我有些担心.......
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表