请较一个C语言操作问题?

[复制链接]
3679|17
 楼主| saimax 发表于 2011-3-14 11:51 | 显示全部楼层 |阅读模式
比如定义一个变量uchar a  那么a会对应有8个位(a.7,a.6,a.5.......),问题是我如何定义这8个位对应于我单片机的8个端口(如a.7对应p1.7;a.6对应p2.1等)通过改变变量a的值从而改变所对应单片机各对应端口的输出状态。
ejack 发表于 2011-3-14 12:26 | 显示全部楼层
原子级操作无解,似乎只能由函数检位状态并转换。

追求程序书写得好看吗?
 楼主| saimax 发表于 2011-3-14 12:31 | 显示全部楼层
不是,比如说一个8位数码管,P1.0接a段,P2.0接b段,p3.0接c段。。。。。。那么我要这个数码显示某个数字,直接赋值给这个变量就行了,而不需要进行繁琐的操作。
hys0401 发表于 2011-3-14 13:07 | 显示全部楼层
总共十个数字,肯定是直接赋值。每个数字对应一个数值,这有什么问题?
hys0401 发表于 2011-3-14 13:09 | 显示全部楼层
(如a.7对应p1.7;a.6对应p2.1等
=======================
晕死,你就不能用一个口啊?非要用两个口么?
 楼主| saimax 发表于 2011-3-14 13:16 | 显示全部楼层
(如a.7对应p1.7;a.6对应p2.1等
=======================
晕死,你就不能用一个口啊?非要用两个口么?
hys0401 发表于 2011-3-14 13:09



第一我是假如,第二有时候PCB设计非得用2~3个口,那怎么办呢?
aibxyz 发表于 2011-3-14 13:29 | 显示全部楼层
如果是同一口,uchar 直接定义到特殊寄存器那就好了
如果比较乱,我以前的做法是做个函数,输入一个uchar或int的,然后输出到IO
当然,如果一定要用'a='这样的来操作,那封一个class,重载'='运算符
sdpz 发表于 2011-3-14 13:54 | 显示全部楼层
定义一个位域指针指向IO口的地址。时间不多我就不说了,自己查资料。
batsong 发表于 2011-3-14 17:55 | 显示全部楼层
处理器硬件不支持位操作,你写的形式再完美都没用。

编译出来还是a |= BITx;   a &= ~BITx;

评分

参与人数 1威望 +1 收起 理由
lelee007 + 1

查看全部评分

ayb_ice 发表于 2011-3-14 18:58 | 显示全部楼层
处理器硬件不支持位操作,你写的形式再完美都没用。

编译出来还是a |= BITx;   a &= ~BITx;
batsong 发表于 2011-3-14 17:55

LZ肯定不会汇编,对CPU也没有什么理解
汽车电子 发表于 2011-3-14 19:03 | 显示全部楼层
用位结构

输出控制只在一个地方执行即可,把位结构输出到对应的端口
zhaopan8711 发表于 2011-3-14 21:32 | 显示全部楼层
直接写个函数,这个**作过的,呵呵........
56ming 发表于 2011-3-14 22:40 | 显示全部楼层
单片机控制蓝牙c编程如何实现
谈的元 发表于 2011-3-14 23:07 | 显示全部楼层
定义联合,结构,

然后写成A.2=B.3的形式即可
谈的元 发表于 2011-3-14 23:09 | 显示全部楼层
a.1=b.2;
a.2=c.3;
a.3=b.4
....
楼主去查询联合与结构
wang_2003 发表于 2011-3-15 11:20 | 显示全部楼层
我也想过实现这样的功能,但是没实现
该去看看联合与结构了
lelee007 发表于 2011-3-15 12:20 | 显示全部楼层
LZ先看你的IO口操作是否支持位操作,比如控制IO的register是否有支持bit操作的汇编指令

硬件不支持位操作,说神马都是浮云
 楼主| saimax 发表于 2011-3-15 13:30 | 显示全部楼层
我也想到用联合与结构,不过不是那么懂!感觉抽象,真的该好好复习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我就喜欢搞电子,怎么着?

28

主题

176

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部