前言
- 位操作指令只能对片内RAM可位寻址的空间进行操作;
- 在片内RAM 字节地址 20H~2FH共计16字节128位,其对应 位地址00H~70H的128位空间地址;
- 此外特殊功能寄存器(SFR)中有11个可以位寻址共计88位(准确说需要再去除6位,共计82位);
- 对于判定SFR是否可以寻址,可利用其字节地址的十进制表达是8的倍数,或者字节地址的十六进制以0或8结尾的特性来判断其可以位寻址;
- 通过指令来判断源操作数与目的操作数是位地址还是字节地址;
- 位操作指令可以操作位地址或字节地址,但位地址只能通过位操作指令来操作,其他指令是控制1B(一个字节),不适合位地址,只有位操作指令是操作1b(一位);
- 51单片机是利用布尔处理机来处理位变量的指令集;
- 位操作指令的定义:处理对象为位变量的指令集,包括变量传送、逻辑运算、控制程序转移等指令。
例 设位地址10H(即字节地址22H的第一位)内容为0
MOV C 10H
SETB 20H
MOV 20H, #FFH
- MOV C 10H和SETB 20H两个都是位操作,MOV 20H, #FFH不是位操作指令;
- MOV C 10H:表示将(10H) = 0送入CY(进位标志位);
- SETB 20H:表示将位地址20H(即字节地址24H的第一位)置1;
- MOV 20H, #FFH:表示将字节地址20H设置为FFH,即位地址00H~07H共8b全设置为1,8个1。
一、位数据传送指令
MOV英文全称: Move
MOV C, bit
目的:将位地址bit的内容送入CY位中
MOV bit, C
目的:将位CY的内容送入位地址bit中
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
MOV C, bit | (bit) -> C | × | × | × | √ | 2 | 1 |
MOV bit, C | (C) -> bit | × | × | × | × | 2 | 2 |
例 设位地址10H的内容为0,C中的内容为1
- MOV C, 10H:表示 位地址10H的内容送入C中,(10H) = 0 -> C,C清零;
- MOV 10H, C:表示将C中内容送入位地址10H中,© = 1 -> 10H。
二、位修正指令
CLR英文全称:Clear
SETB英文全称:Set Bit
CPL英文全称:Complement
CLR X
目的:对位进行清零
SETB X
目的:对位进行置一
CPL X
目的:对位进行取反,原先是1就变为0,原先是0就变为1
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
CLR C | 0 -> C | × | × | × | √ | 1 | 1 |
CLR bit | 0 -> bit | × | × | × | 2 | 1 | |
SETB C | 1 -> C | × | × | × | √ | 1 | 1 |
SETB bit | 1 -> bit | × | × | × | 2 | ||
CPL C | /(C) -> C | × | × | × | √ | 1 | 1 |
CPL bit | /(bit) -> bit | × | × | × | 2 | 1 |
例 设位地址10H的内容为1,C中的内容为1
- CLR C:表示将C清零;
- CLR 10H:表示将位地址10H清零:
- SETB C:表示将C置数(置一);
- SETB 10H:表示将位地址10H置数;
- CPL C:表示将C取反,/( C ) = 0 -> C;
- CPL 10H:表示将位地址10H取反,/(10H) = 0 -> 10H
SETB bit命令常用于开中断和启动定时器/计数器,如SETB ET0表示启动定时器/计数器T0
三、位逻辑运算指令
ANL英文全称:AND Logic
ORL英文全称:OR Logic
ANL C, X
目的:将累加器A中的内容与直接地址中的内容进行逻辑与运算
ORL C, X
目的:将累加器A中的内容与直接地址中的内容进行逻辑或运算
直接位地址中的数,在指令执行前后没有发送变化
助记符 | 功能 | 对标志位影响 | 字节数 | 周期数 | |||
---|---|---|---|---|---|---|---|
P | OV | AC | CY | ||||
ANL C, bit | (C) ^ /(bit) -> C | × | × | × | √ | 1 | 2 |
ANL C, /bit | (C) ^ (bit) -> C | × | × | × | √ | 2 | 2 |
ORL C, bit | (C) V (bit) -> C | × | × | × | √ | 1 | 2 |
ORL C, /bit | (C) V /(bit) -> C | × | × | × | √ | 2 | 2 |
例 设位地址10H的内容为0,C中的内容为1
- ANL C, 10H:表示位将C中的内容与10H中的内容进行与逻辑操作,最后将结果1存放在C中;
- ANL C, /10H:表示位将C中的内容与10H中的内容取反后进行与逻辑操作,最后将结果0存放在C中;
例 设位地址10H的内容为0,C中的内容为0
- ORL C, 10H:表示位将C中的内容与10H中的内容进行或逻辑操作,最后将结果存0放在C中;
- ORL C, /10H:表示位将C中的内容与10H中的内容取反后进行或逻辑操作,最后将结果存1放在C中;
注 :将位条件转移指令放入条件转移指令中;
由本人水平有限,文章难免有错误,望告知