浅谈PICC 的位操作
更新时间:2024-07-02 09:24:01 阅读量: 综合文库 文档下载
[求助]请问PIC的绝对寻址位操作指令的那句话怎么理解啊 在PIC单片机的里有这么一句话
#define PORTBIT(adr,bit) ((unsigned)(&adr)*8+(bit)) static bit ch451_dclk @ PORTBIT(PORTB,3);
这个怎么理解啊,&adr为什么要乘8 还有PORTB这个标号应该对应的是B口的地址 PORTB可不可以理解为指针PORTB=0xFF是不是类似*p=0xFF
那adr=PORTB &adr对应的不就是B口的地址值? 为什么要把地址乘8咧? static bit ch451_dclk @ PORTBIT(PORTB,3); 里面的 @写在PORTBIT函数的前面是什么意思啊 ch451_dclk怎么就指向B口第3位了啊 谢谢大哥们指导一下,谢谢了
我的理解:
编译器看到位变量的时候,应该是想到BCF f,b BSF f,b,这些位操作指令 这些指令有两个操作数,一个是内存地址f,一个是位地址b
编译器需要从位变量中得到这两个信息,最好就是把这两个信息与位变量绑定在一起 结果就组成了这样的定义方式: fffffffbbb 七个f表示内存地址,三个b表示位地址
写出来就是 (fffffff) * 8 + (bbb) ==> Address * 8 + bit 位操作,操作的是比特,一个字节八个比特。所以乘8。
@写在PORTBIT函数的前面是什么意思啊:定义了一个绝对地址的变量 附:别人写的,希望对你有帮助
浅谈PICC 的位操作
由于PIC 处理器对位操作是最高效的,所以把一些BOOL 变量放在一个内存的位中,既可以达到运算
速度快,又可以达到最大限度节省空间的目的。在C 中的位操作有多种选择。 ********************************************* 如:char x;x=x|0B00001000; /*对X 的4 位置1。*/ char x;x=x&0B11011111; /*对X 的5 位清0。*/ 把上面的变成公式则是:
#define bitset(var,bitno)(var |=1< char x;bitclr(x,5) ************************************************* 但上述的方法有缺点,就是对每一位的含义不直观,最好是能在代码中能直观看出每一位代表的意思, 这样就能提高编程效率,避免出错。如果我们想用X 的0-2 位分别表示温度、电压、电流的BOOL 值可以 如下: unsigned char x @ 0x20; /*象汇编那样把X 变量定义到一个固定内存中。*/ bit temperature@ (unsigned)&x*8+0; /*温度*/ bit voltage@ (unsigned)&x*8+1; /*电压*/ bit current@ (unsigned)&x*8+2; /*电流 */ 这样定义后X 的位就有一个形象化的名字,不再是枯燥的1、2、3、4 等数字了。可以对X 全局修改, 也可以对每一位进行操作: char=255; temperature=0; if(voltage)...... ***************************************************************** 还有一个方法是用C 的struct 结构来定义: 如: struct cypok{ temperature:1; /*温度*/ voltage:1; /*电压*/ current:1; /*电流*/ none:4; }x @ 0x20; 这样就可以用 x.temperature=0; if(x.current).... 等操作了。 ********************************************************** PICC 中变量的绝对定位 首先必须强调,在用C 语言写程序时变量一般由编译器和连接器最后定位,在写程序 之时无需知道所定义的变量具体被放在哪个地址(除了bank 必须声明)。 真正需要绝对定位的只是单片机中的那些特殊功能寄存器,而这些寄存器的地址定位在 PICC 编译环境所提供的头文件中已经实现,无需用户操心。编程员所要了解的也就是PICC 是如何定义这些特殊功能寄存器和其中的相关控制位的名称。好在PICC 的定义标准基本上 按照芯片的数据手册中的名称描述进行,这样就秉承了变量命名的一贯性。一个变量绝对定 位的例子如下: 张明峰 2004-4-7 于上海 8 of 26 unsigned char tmpData @ 0x20; //tmpData 定位在地址0x20 千万注意,PICC 对绝对定位的变量不保留地址空间。换句话说,上面变量tmpData 的 地址是0x20,但最后0x20 处完全有可能又被分配给了其它变量使用,这样就发生了地址冲 突。因此针对变量的绝对定位要特别小心。从笔者的应用经验看,在一般的程序设计中用户 自定义的变量实在是没有绝对定位的必要。 如果需要,位变量也可以绝对定位。但必须遵循上面介绍的位变量编址的方式。如果一 个普通变量已经被绝对定位,那么此变量中的每个数据位就可以用下面的计算方式实现位变 量指派: unsigned char tmpData @ 0x20; //tmpData 定位在地址0x20 bit tmpBit0 @ tmpData*8+0; //tmpBit0 对应于tmpData 第0 位 bit tmpBit1 @ tmpData*8+1; //tmpBit0 对应于tmpData 第1 位 bit tmpBit2 @ tmpData*8+2; //tmpBit0 对应于tmpData 第2 位 如果tmpData 事先没有被绝对定位,那就不能用上面的位变量定位方式。
正在阅读:
浅谈PICC 的位操作07-02
leslie人口增长模型模型 - 图文03-20
2015年GCT卷01-15
55万吨年甲醇精馏工段工艺设计—预精馏塔工艺设计及分析05-05
《国际贸易实务》重要概念与复习思考题及答案(外语2012)04-13
兰花养殖鉴赏1000问 第二篇 兰花欣赏(五)兰叶鉴赏 - 图文04-11
概率论与数理统计及其应用课后答案05-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 操作
- PICC
- 铁矿石买卖合同
- 施工组织计划作业
- 2013—2014学年度第一学期教导处工作计划
- 09货物和劳务税纳税申报代理和纳税审核
- 珍爱生命 构建平安校园
- 重读安菩墓
- 3.7v大容量锂电池厂家哪家好
- 20160101中考化学考前必背知识点总结剖析 - 图文
- 2018-2024年中国榨菜行业市场竞争现状研究报告(目录) - 图文
- 浅谈初中数学高效课堂教学策略
- 7 七年级生物上册212植物细胞第1课时教案新版新人教版1010279
- 国际金融模拟题(开卷)
- 处理煤仓堵仓安全措施
- 计算机科学与技术游戏设计
- 人教版小学数学一年级上册《0的认识》教学设计
- 基于物联网的智能交通系统
- 《解析》广东省韶关市2018届高三第二次模拟考试物理试题 Word版
- 旋光仪标准操作规程
- 法理学尔雅章节测试
- 浅谈课堂教学中的板书设计