首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

位操作问题

sbit是什么指令?

汇编语言和具体的硬件相关,而和开发工具无关。我认为应该是这样的。[em27][em27][em07][em07]
一名专业的嵌入式软件开发工作者
那是不是应当从9S12的手册上去找?

应该是吧!

问问 freescale的专家。[em24][em24][em24]
一名专业的嵌入式软件开发工作者
汇编语言是和开发工具有关,尤其是非ANSI的。 sbit 是指示r可用作位元运算, 在CW, 有不同的方法, 最好看看在 的例子。以下是其一: /*** TSC - TIM Status and Control Register TSC; 0x00000020 ***/ typedef union { byte Byte; struct { byte PS0 :1; /* Prescaler Select Bit 0 */ byte PS1 :1; /* Prescaler Select Bit 1 */ byte PS2 :1; /* Prescaler Select Bit 2 */ byte :1; byte TRST :1; /* TIM Reset Bit */ byte TSTOP :1; /* TIM Stop Bit */ byte TOIE :1; /* TIM Overflow Interrupt Enable Bit */ byte TOF :1; /* TIM Overflow Flag Bit */ } Bits; struct { byte grpPS :3; byte :1; byte :1; byte :1; byte :1; byte :1; } MergedBits; } TSCSTR; extern volatile TSCSTR _TSC @0x00000020; // 0x20 是地址 ... 用的时候便可用ANSI格式了, 如: _TSC.Bits.TSTOP = 1; ^的情况也是一样!
MCU_Fan:这些东西太头疼,看不懂!能不能在解释一下?

位操作问题

如何使用CW替代C51中的 sbit 的指令。
如:sbit r = P3^0
首先需要做union和位域的定义,union的作用是可用不同的方法读写同一变数。如上例, TSCSTR 是一个字节類型, 可用三种方法读写:Byte (第一句), Bits (第二组) 和 MergedBits (第三组)。Byte就是一个字节的读写, Bits就是可用各比特(PS0, PS1, PS2, , TRST, TSTOP, TOIE, TOF)读写, 在这里,PS0是TSCSTR的bit 0, PS1是bit 1, 如此类推, 最後也可以3比特一起来。 (MergedBits的grpPS便等於PS2, PS1, PS0了!)
接着要定义变数, 上例 _TSC 便是一个在0x20地址的TSCSTR。
在程式里便可改变0x20的任何一位了, 在上例, 我们用Bits的定义设定PS0(即是bit 0)为一。另外也可一字节的改: _TSC.Byte = _TSC.Byte | 0x01;
返回列表