论坛» 嵌入式开发» MCU

请教在C中字节位的用法

菜鸟
2008-10-16 11:09 1楼

我用的是R8C2G,向下面这种位的定义方法我可以直接在C程序中用cm10 = 1;这样置位吗?
如果不行那怎么用?盼解答
union byte_def {
struct {
char b0:1;
char b1:1;
char b2:1;
char b3:1;
char b4:1;
char b5:1;
char b6:1;
char b7:1;
} bit;
char byte;
};
union byte_def cm1_addr;
#define cm1 cm1_addr.byte

#define cm10 cm1_addr.bit.b0
#define cm12 cm1_addr.bit.b2
#define cm14 cm1_addr.bit.b4
#define cm16 cm1_addr.bit.b6
#define cm17 cm1_addr.bit.b7

jpp
高工
2008-10-16 16:33 2楼
看样子因该是支持位操作的,看看手册上别人的用法吧
菜鸟
2008-10-17 16:23 3楼

当然可以使用了,只要在相应的C文件中包含头文件即可,使用#include "sfr_r82g.h"

菜鸟
2008-10-20 09:25 4楼

我置1和清0的时候编译没有错,但我置2的时候编译时也没有错啊

菜鸟
2008-10-20 11:41 5楼
个人观点:编译没错是因为不违背C语法,C编译器一般都比较灵活。
另外,写2和写0是一样的,只有左右一位有效。请参考汇编信息。

cm10 = 0; // 0b00
编译为:BCLR 0,0007H

cm10 = 1; // 0b01
编译为:BSET 0,0007H

cm10 = 2; // 0b10
编译为:BCLR 0,0007H

cm10 = 3; // 0b11
编译为:BSET 0,0007H
菜鸟
2008-10-20 13:52 6楼

谢谢了!还有我在R8C2G的硬件手册里看到关于IO口的配置,有关P1.5,P1.7,P3.6的管脚当其中一个被配置成INT1时必须有int1en = 1;但是其他的两个管脚要配置成普通输入输出管脚必须有int1en = 0;是不是配置任何一个成INT1,其他两个就不能用于普通输入输出管脚了?不应该啊

菜鸟
2008-10-20 14:34 7楼
不是这样的,请您再查一查相关引脚配置表。

举个例子,当 int1sel = 1 时,p3_6为INT1引脚
此时p1_5和P1_7引脚的功能,根本和 int1en 位无关。
菜鸟
2008-10-22 08:46 8楼

我水平有限没找到,就听你的吧!再问个问题,我在配置R8C2G的主时钟频率位内部4M时有几个寄存器HRA1,HRA2,HRA4,HRA6怎么配置,手册上只有说明要配置但没说怎么配啊! 最好有用c配置系统时钟为4M的例子!

助工
2008-10-22 09:17 9楼
瑞萨不是有IOWIZARD这个辅助软件,可以帮助用户生成这些定义功能的C代码的吗?

你怎么没找代理要呢?
菜鸟
2008-10-22 13:16 10楼

我找了代理,问了几个问题几天了都没答复,也没听说有IOWIZARD辅助软件

共13条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]