深圳市华胄科技有限公司 >> MCU专题 >> 单片机编程


单片机教程:单片机编程入门十五



提交者 电子007  在  2007-9-12 15:40:34 

上一篇 下一篇
单片机教程26课
单片机编程入门十五


位及位操作指令


通过前面那些流水灯的例子,我们已经习惯了“位”一位就是一盏灯的亮和灭,而我们学的指令却全都是用“字节”来介绍的:字节的移动、加法、减法、逻辑运算、移位等等。用字节来处理一些数学问题,比如说:控制冰箱的温度、电视的音量等等很直观,可以直接用数值来表在。可是如果用它来控制一些开关的打开和合上,灯的亮和灭,就有些不直接了,记得我们上次课上的流水灯的例子吗?我们知道送往P1口的数值后并不能马上知道哪个灯亮和来灭,而是要化成二进制才知道。工业中有很多场合需要处理这类开关输出,继电器吸合,用字节来处理就显示有些麻烦,所以在8031单片机中特意引入一个位处理机制。


位寻址区


可以位寻址的特殊功能寄存器


位操作指令


在8031中,有一部份RAM和一部份SFR是具有位寻址功能的,也就是说这些RAM的每一个位都有自已的地址,可以直接用这个地址来对此进行操作。


字节地址

位地址

2FH

7FH

      

78H

2EH

77H

      

70

2DH

6FH

      

68H

2CH

67H

      

60H

2BH

5FH

      

58H

2AH

57H

      

50H

29H

4FH

      

48H

28H

47H

      

40H

27H

3FH

      

38H

26H

37H

      

30H

25H

2FH

      

28H

24H

27H

      

20H

23H

1FH

      

18H

22H

17H

      

10H

21H

0FH

      

08H

20H

07H

06H

05H

04H

03H

02H

01H

00H



图1


内部RAM的20H-2FH这16个字节,就是8031的位寻址区。看图1。可见这里面的每一个RAM中的每个位我们都可能直接用位地址来找到它们,而不必用字节地址,然后再用逻辑指令的方式。


8031中有一些SFR是可以进行位寻址的,这些SFR的特点是其字节地址均可被8整除,如A累加器,B寄存器、PSW、IP(中断优先级控制寄存器)、IE(中断允许控制寄存器)、SCON(串行口控制寄存器)、TCON(定时器/计数器控制寄存器)、P0-P3(I/O端口锁存器)。以上的一些SFR我们还不熟,等我们讲解相关内容时再作详细解释。


MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集。在进行位处理时,CY(就是我们前面讲的进位位)称“位累加器”。有自已的位RAM,也就是我们刚讲的内部RAM的20H-2FH这16个字节单元即128个位单元,还有自已的位I/O空间(即P0.0…..P0.7,P1.0…….P1.7,P2.0……..P2.7,P3.0……..P3.7)。当然在物理实体上它们与原来的以字节寻址用的RAM,及端口是完全相同的,或者说这些RAM及端口都可以有两种用法。


1、位传送指令


2、位修正指令


MOV C,BIT


MOV BIT,C


这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。


例:MOV P1.0,CY ;将CY中的状态送到P1.0引脚上去(如果是做算术运算,我们就可以通过观察知道现在CY是多少啦)。


MOV P1.0,CY ;将P1.0的状态送给CY。


1、位清0指令


CLR C ;使CY=0


CLR bit ;使指令的位地址等于0。例:CLR P1.0 ;即使P1.0变为0


2、位置1指令


SETB C ;使CY=1


SETB bit ;使指定的位地址等于1。例:SETB P1.0 ;使P.0变为1


3、位取反指令


CPL C ;使CY等于原来的相反的值,由1变为0,由0变为1。


CPL bit ;使指定的位的值等于原来相反的值,由0变为1,由1变为0。


例:CPL P1.0


以我们做过的实验为例,如果原来灯是亮的,则执行本指令后灯灭,反之原来灯是灭的,执行本指令后灯亮。


1、位逻辑运算指令


1、位与指令


2、位或指令


ANL C,bit ;CY与指定的位地址的值相与,结果送回CY


ANL C,/bit ;先将指定的位地址中的值取出后取反,再和CY相与,结果送回CY,但注意,指定的位地址中的值本身并不发生变化。


例:ANL C,/P1.0


设执行本指令前,CY=1,P1.0等于1(灯灭),则执行完本指令后CY=0,而P1.0也是等于1。


可用下列程序验证:


ORG 0000H


AJMP START


ORG 30H


START: MOV SP,#5FH


MOV P1,#0FFH


SETB C


ANL C,/P1.0


MOV P1.1,C ;将做完的结果送P1.1,结果应当是P1.1上的灯亮,而P1.0上的灯还是不亮。


ORL C,bit


ORL C,/bit


这个的功能大家自行分析吧,然后对照上面的例程,编一个验证程序,看看你相得对吗?


1、位条件转移指令


1、判CY转移指令


JC rel


JNC rel


第一条指令的功能是如果CY等于1就转移,如果不等于1就顺序执行。那么转移到什么地方去呢?我们可以这样理解:JC 标号,如果等于1就转到标号处执行。这条指令我们在上节课中已讲到,不再重复。


第二条指令则和第一条指令相反,即如果CY=0就转移,不等于0就顺序执行,当然,我们也同样理解: JNC 标号


2、判位变量转移指令


JB bit,rel


JNB bit,rel


第一条指令是如果指定的bit位中的值是1,则转移,否则顺序执行。同样,我们可以这样理解这条指令:JB bit,标号


第二条指令请大家先自行分析


下面我们举个例子说明:


ORG 0000H


LJMP START


ORG 30H


START:MOV SP,#5FH


MOV P1,#0FFH


MOV P3,#0FFH


L1: JNB P3.2,L2 ;P3.2上接有一只按键,它按下时,P3.2=0


JNB P3.3,L3 ;P3.3上接有一只按键,它按下时,P3.3=0


LJM P L1


L2: MOV P1,#00H


LJMP L1


L3: MOV P1,#0FFH


LJMP L1


END


把上面的例子写入片子,看看有什么现象………


.


.


按下接在P3.2上的按键,P1口的灯全亮了,松开或再按,灯并不熄灭,然后按下接在P3.3上的按键,灯就全灭了。这像什么?这不就是工业现场经常用到的“启动”、“停止”的功能吗?


怎么做到的呢?一开始,将0FFH送入P3口,这样,P3的所有引线都处于高电平,然后执行L1,如果P3.2是高电平(键没有按下),则顺序执行JNB P3.3,L3语句,同样,如果P3.3是高电平(键没有按下),则顺序执行LJMP L1语句。这样就不停地检测P3.2、P3.3,如果有一次P3.2上的按键按下去了,则转移到L2,执行MOV P1,#00H,使灯全亮,然后又转去L1,再次循环,直到检测到P3.3为0,则转L3,执行MOV P1,#0FFH,例灯全灭,再转去L1,如此循环不已。


大家能否稍加改动,将本程序用JB指令改写?


单片机机系列--单片机教程---单片机教程:单片机编程--单片机教程:单片机编程入门十五


作者:技术资料



单片机教程,五系列(55讲)电子书全集下载

论坛精选:
■ 单片机c语言,10小时学会C 语言 (一)
第一章 C 语言简介与Turbo C 的使用
■ 单片机c语言,10小时学会C 语言 (二)
第二章 C 程序的结构
■ 单片机c语言,10小时学会C 语言 (三)
第三章 常数与变数
■ 单片机c语言,10小时学会C 语言 (四)
第四章 基本输出入函式
■ 单片机c语言,10小时学会C 语言 (五)
第五章 流程图与抉择指令
■ 单片机c语言,10小时学会C 语言 (六)
第六章 循环与自动重复
■ 单片机c语言,10小时学会C 语言 (七)
第七章 数组与指针
■ 单片机c语言,10小时学会C 语言 (八)
第八章 函数与呼叫
■ 单片机c语言,10小时学会C 语言 (九)
第九章 档案存取

1 楼  提交者:果冻 在 2007-9-27 16:51:17
通俗易懂
2 楼  提交者:Guest 在 2007-9-27 19:00:37
hgjg
3 楼  提交者:306663570 在 2007-9-28 7:39:30
1111
4 楼  提交者:实在不服 在 2007-9-28 16:19:18
OK
5 楼  提交者: 在 2007-9-28 17:44:54
123  
6 楼  提交者:plcpic 在 2007-9-28 17:50:52
2
7 楼  提交者:lyralos 在 2007-9-29 22:04:03
想问你一个问题
就是如何用PIC单片机实现发出警报
8 楼  提交者:tisa 在 2007-9-30 15:20:01
hao
9 楼  提交者:luck1 在 2007-9-30 18:46:54

10 楼  提交者:Guest 在 2007-10-1 8:59:34
好啊
好啊
好啊
好啊
好啊
好啊
好啊
好啊
11 楼  提交者:zuowangcai 在 2007-10-1 11:40:17
haoi  


12 楼  提交者:拈花一笑 在 2007-10-4 2:18:42
Q
13 楼  提交者:金先生 在 2007-10-4 14:21:47
好了
14 楼  提交者:郭志成 在 2007-10-4 16:30:35
无内容
15 楼  提交者:周彭全 在 2007-10-6 10:03:51
f
16 楼  提交者:黄伟 在 2007-10-6 13:03:50
受教了,哈哈
17 楼  提交者:Guest 在 2007-10-6 16:58:29
先当下来再说
18 楼  提交者:弘毅 在 2007-10-6 22:05:27
好啊
19 楼  提交者:mlx666777 在 2007-10-7 22:33:29
通俗易懂
20 楼  提交者:sure365 在 2007-10-8 9:09:51
非常感谢
21 楼  提交者:张建军 在 2007-10-8 11:33:04
继续学
22 楼  提交者:Guest 在 2007-10-8 17:02:13
看看~~~~~~~~~~~~~~~~~~~~~~~
23 楼  提交者:dataie 在 2007-10-8 17:37:41
hao
24 楼  提交者:lizhugood 在 2007-10-9 11:16:10
25 楼  提交者:Guest 在 2007-10-9 16:27:15
无内容
26 楼  提交者:星雨 在 2007-10-11 14:38:33
5ey7h
27 楼  提交者:Guest 在 2007-10-12 9:53:37
s
28 楼  提交者:不哭死神 在 2007-10-13 21:56:12
1
29 楼  提交者:dataie 在 2007-10-15 11:31:28
gawe
30 楼  提交者:lngdcctv 在 2007-10-15 13:05:03
1245222212213
上一篇 下一篇
当前第〖1〗页 共有19页 转到第 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19