嵌入式总复习[精选].ppt

  1. 1、本文档共573页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式总复习[精选]

8.2.2按位或操作 2、按位或操作 按位或操作运算符“|”是把参与运算的两个操作数对应的各个二进制位进行按位相或。对应的两个二进制位中只要有一个为1,结果就为1,当两个对应的二进制位都为0时,结果位为0。参与运算的两个操作数均以补码形式出现。 例如7 | 3,7的补码为0000 0111,3的补码为0000 0011,结果为0000 0111。按位与操作可以实现将特定位的置位操作,也可以用于提取出某数的指定位。 P.191 例8-2 通过取出LedStatus的特定位进行判断选择对端口B的数据寄存器进行特定的置1,控制LED1和LED2灯的熄灭,其中端口B(rPDATAB)第2、3管脚分别连接LED1、LED2(注:管脚从第0管脚开始编号,低电平点亮,高电平熄灭,程序不改变其它位)。 If((LedStatus 0x01) == 0x01 rPDATAB = rPDATAB | 0x04; 8.2.3 按位异或操作 3、按位异或操作 按位异或运算符“^”是将参与运算的两个操作数对应的各个二进制位进行相异或,当对应的两个二进制位相异时,结果位为1,相同时为0。参与运算的两个操作数均以补码形式出现。 例如7 | 3,7的补码为0000 0111,3的补码为0000 0011,结果为0000 0100。 P.191 例8-3 按位异或操作可以实现将特定位的值取反,也可以实现在不引入第三变量的情况下,交换两个变量的内容。 解:改变端口B的数据寄存器的第2位的值,如果原来为1则清0,如果原来为0则置1: rPDATAB = rPDATAB | 0x04; 应用举例: (2)通过3次异或操作将寄存器rPDATAE中的内容与变量tmp的值进行交换。 rPDATAE = rPDATAE ^ tmp Tmp = tmp ^ rPDATAE rPDATAE = rPDATAE ^ tmp 8.2.4 取反操作 4、取反操作 取反运算符“~”实现对参与运算的操作数对应的各个二进制位按位求反。取反运算符“~”具有右结合性。所有1变为0,0变为1 。例如~(0101 1001) = 1010 0110。在程序中主要用于将操作数的某位或某些位取反,为其他操作提供数据准备。 8.2.5 移位操作 5、移位操作 移位操作分为左移操作与右移操作。左移运算符“”实现将“”左边的操作数的各个二进制位向左移动“”右边操作数所指定的位数,高位丢弃,低位补0。其值相当于乘以:2“左移位数”次方。 右移运算符“”实现将“”左边的操作数的各个二进制位向右移动“”右边操作数所指定的位数。对于空位的补齐方式,无符号数与有符号数是有区别的。对无符号数进行右移时,低位丢弃,高位用0补齐,其值相当于除以:2“右移位数”次方 左移操作常常应用于将特定的位置1,也可以应用于代替乘法操作和除法操作;在嵌入式应用编程中,左移操作常用作某寄存器对应的位进行设置,如: #define BIT_UTXD1(0x12) #define BIT_UTXD0(0x13) 8.3 嵌入式C程序设计中的几点说明 8.3.1 volatile限制符 8.3.2 地址强制转换与多级指针 8.3.3预处理的使用 8.3.1 volatile限制符 volatile的本意为 “暂态的”或.“易变的”,该说明符起到抑制编译器优化的作用。 如果在声明时用“volatile”关键进行修饰,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供特殊地址的稳定访问。 P.161 例7-3 对数据区进行64位结果累加操作 先对内存地址0x3000开始的100个字内存单元填入00数据,然后将每个字单元进行64位累加结果保存于[R9:R8]。(R9中存放高32位) _start: MOV R0 , #0X3000 @初始化寄存器 MOV R1 , #0 MOV R2 , #100 loop_1: @第一次循环赋值 STR R1 , [R0],#4 ADD R1 , R1,#1 SUBS R2 , R2,#1 BNE loop_1 MOV R0 , #0X3000 MOV R2 , #100 MOV R9 , #0 MOV R8 , #0 loop_2: @第二次循环累加 LDR R1 , [R0],#4 ADDS R8 , R1,R8@R8=R8+R1,进位影响标志位 ADC R9 , R9 , #0@R9=R9+C,C为进位 SUBS R2 , R2 , #1 BNE loop_2

文档评论(0)

dart001 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档