📄 单片机第十五课.htm
字号:
face=宋体>使</FONT><FONT lang=ZH-CN face=System>CY</FONT><FONT lang=ZH-CN
face=宋体>等于原来的相反的值,由</FONT><FONT lang=ZH-CN face=System>1</FONT><FONT lang=ZH-CN
face=宋体>变为</FONT><FONT lang=ZH-CN face=System>0</FONT><FONT lang=ZH-CN
face=宋体>,由</FONT><FONT lang=ZH-CN face=System>0</FONT><FONT lang=ZH-CN
face=宋体>变为</FONT><FONT lang=ZH-CN face=System>1</FONT><FONT lang=ZH-CN
face=宋体>。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=System>CPL bit ;</FONT><FONT lang=ZH-CN
face=宋体>使指定的位的值等于原来相反的值,由</FONT><FONT lang=ZH-CN face=System>0</FONT><FONT
lang=ZH-CN face=宋体>变为</FONT><FONT lang=ZH-CN face=System>1</FONT><FONT
lang=ZH-CN face=宋体>,由</FONT><FONT lang=ZH-CN face=System>1</FONT><FONT
lang=ZH-CN face=宋体>变为</FONT><FONT lang=ZH-CN face=System>0</FONT><FONT
lang=ZH-CN face=宋体>。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>例:</FONT><FONT lang=ZH-CN
face=System>CPL P1.0</FONT></P><FONT lang=ZH-CN face=宋体>
<P
align=justify>以我们做过的实验为例,如果原来灯是亮的,则执行本指令后灯灭,反之原来灯是灭的,执行本指令后灯亮。</P></FONT></DIR><FONT
lang=ZH-CN face=宋体>
<OL>
<P align=justify>
<LI>位逻辑运算指令
<P></P></LI></OL></FONT>
<OL><FONT lang=ZH-CN face=宋体>
<P align=justify>
<LI>位与指令
<P></P></FONT>
<P align=justify><FONT lang=ZH-CN face=System>ANL C,bit ;CY</FONT><FONT
lang=ZH-CN face=宋体>与指定的位地址的值相与,结果送回</FONT><FONT lang=ZH-CN
face=System>CY</FONT></P>
<P align=justify><FONT lang=ZH-CN face=System>ANL C,/bit ;</FONT><FONT
lang=ZH-CN face=宋体>先将指定的位地址中的值取出后取反,再和</FONT><FONT lang=ZH-CN
face=System>CY</FONT><FONT lang=ZH-CN face=宋体>相与,结果送回</FONT><FONT lang=ZH-CN
face=System>CY</FONT><FONT lang=ZH-CN
face=宋体>,但注意,指定的位地址中的值本身并不发生变化。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>例:</FONT><FONT lang=ZH-CN
face=System>ANL C,/P1.0</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>设执行本指令前,</FONT><FONT lang=ZH-CN
face=System>CY=1</FONT><FONT lang=ZH-CN face=宋体>,</FONT><FONT lang=ZH-CN
face=System>P1.0</FONT><FONT lang=ZH-CN face=宋体>等于</FONT><FONT lang=ZH-CN
face=System>1</FONT><FONT lang=ZH-CN face=宋体>(灯灭),则执行完本指令后</FONT><FONT
lang=ZH-CN face=System>CY=0</FONT><FONT lang=ZH-CN face=宋体>,而</FONT><FONT
lang=ZH-CN face=System>P1.0</FONT><FONT lang=ZH-CN face=宋体>也是等于</FONT><FONT
lang=ZH-CN face=System>1</FONT><FONT lang=ZH-CN face=宋体>。</FONT></P><FONT
lang=ZH-CN face=宋体>
<P align=justify>可用下列程序验证:</P></FONT>
<P align=justify><FONT lang=ZH-CN face=宋体></FONT><FONT lang=ZH-CN
face=System>ORG 0000H</FONT></P><FONT lang=ZH-CN face=System>
<P align=justify>AJMP START</P>
<P align=justify>ORG 30H</P></FONT>
<P align=justify><FONT lang=ZH-CN face=System>START</FONT><FONT lang=ZH-CN
face=宋体>: </FONT><FONT lang=ZH-CN face=System>MOV SP</FONT><FONT lang=ZH-CN
face=宋体>,</FONT><FONT lang=ZH-CN face=System>#5FH</FONT></P>
<P align=justify><FONT lang=ZH-CN face=System>MOV P1</FONT><FONT lang=ZH-CN
face=宋体>,</FONT><FONT lang=ZH-CN face=System>#0FFH</FONT></P><FONT lang=ZH-CN
face=System>
<P align=justify>SETB C</P></FONT>
<P align=justify><FONT lang=ZH-CN face=System>ANL C</FONT><FONT lang=ZH-CN
face=宋体>,</FONT><FONT lang=ZH-CN face=System>/P1.0</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体></FONT><FONT lang=ZH-CN
face=System>MOV P1.1,C ;</FONT><FONT lang=ZH-CN face=宋体>将做完的结果送</FONT><FONT
lang=ZH-CN face=System>P1.1,</FONT><FONT lang=ZH-CN face=宋体>结果应当是</FONT><FONT
lang=ZH-CN face=System>P1.1</FONT><FONT lang=ZH-CN face=宋体>上的灯亮,而</FONT><FONT
lang=ZH-CN face=System>P1.0</FONT><FONT lang=ZH-CN
face=宋体>上的灯还是不亮。</FONT></P><FONT lang=ZH-CN face=宋体>
<P align=justify></P>
<LI>位或指令
<P></P></FONT></LI></OL>
<DIR><FONT lang=ZH-CN face=宋体></FONT><FONT lang=ZH-CN face=System>
<P align=justify>ORL C,bit</P>
<P align=justify>ORL C,/bit</P></FONT></DIR><FONT lang=ZH-CN face=宋体>
<P align=justify>这个的功能大家自行分析吧,然后对照上面的例程,编一个验证程序,看看你相得对吗?</P>
<OL>
<P align=justify>
<LI>位条件转移指令
<P></P></LI></OL></FONT>
<OL><FONT lang=ZH-CN face=宋体>
<P align=justify></FONT>
<LI><FONT lang=ZH-CN face=宋体>判</FONT><FONT lang=ZH-CN
face=System>CY</FONT><FONT lang=ZH-CN face=宋体>转移指令</FONT><FONT lang=ZH-CN
face=宋体>
<P></P></FONT><FONT lang=ZH-CN face=System>
<P align=justify>JC rel</P>
<P align=justify>JNC rel</P></FONT>
<P align=justify><FONT lang=ZH-CN face=宋体>第一条指令的功能是如果</FONT><FONT lang=ZH-CN
face=System>CY</FONT><FONT lang=ZH-CN face=宋体>等于</FONT><FONT lang=ZH-CN
face=System>1</FONT><FONT lang=ZH-CN face=宋体>就转移,如果不等于</FONT><FONT lang=ZH-CN
face=System>1</FONT><FONT lang=ZH-CN
face=宋体>就顺序执行。那么转移到什么地方去呢?我们可以这样理解:</FONT><FONT lang=ZH-CN face=System>JC
</FONT><FONT lang=ZH-CN face=宋体>标号,如果等于</FONT><FONT lang=ZH-CN
face=System>1</FONT><FONT lang=ZH-CN
face=宋体>就转到标号处执行。这条指令我们在上节课中已讲到,不再重复。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>第二条指令则和第一条指令相反,即如果</FONT><FONT
lang=ZH-CN face=System>CY=0</FONT><FONT lang=ZH-CN face=宋体>就转移,不等于</FONT><FONT
lang=ZH-CN face=System>0</FONT><FONT lang=ZH-CN face=宋体>就顺序执行,当然,我们也同样理解:
</FONT><FONT lang=ZH-CN face=System>JNC </FONT><FONT lang=ZH-CN
face=宋体>标号</FONT></P><FONT lang=ZH-CN face=宋体>
<P align=justify></P>
<LI>判位变量转移指令
<P></P></FONT></LI></OL>
<DIR><FONT lang=ZH-CN face=宋体></FONT>
<P align=justify><FONT lang=ZH-CN face=System>JB </FONT><FONT lang=ZH-CN
face=宋体></FONT><FONT lang=ZH-CN face=System>bit,rel</FONT></P><FONT lang=ZH-CN
face=System>
<P align=justify>JNB bit,rel</P></FONT>
<P align=justify><FONT lang=ZH-CN face=宋体>第一条指令是如果指定的</FONT><FONT lang=ZH-CN
face=System>bit</FONT><FONT lang=ZH-CN face=宋体>位中的值是</FONT><FONT lang=ZH-CN
face=System>1</FONT><FONT lang=ZH-CN
face=宋体>,则转移,否则顺序执行。同样,我们可以这样理解这条指令:</FONT><FONT lang=ZH-CN face=System>JB
bit,</FONT><FONT lang=ZH-CN face=宋体>标号</FONT></P><FONT lang=ZH-CN face=宋体>
<P align=justify>第二条指令请大家先自行分析</P>
<P align=justify>下面我们举个例子说明:</P></FONT><FONT lang=ZH-CN face=System>
<P align=justify>ORG 0000H</P>
<P align=justify>LJMP START</P>
<P align=justify>ORG 30H</P></FONT></DIR>
<P align=justify><FONT lang=ZH-CN face=System>START</FONT><FONT lang=ZH-CN
face=宋体>:</FONT><FONT lang=ZH-CN face=System>MOV SP</FONT><FONT lang=ZH-CN
face=宋体>,</FONT><FONT lang=ZH-CN face=System>#5FH</FONT></P>
<P align=justify><FONT lang=ZH-CN face=System>MOV P1</FONT><FONT lang=ZH-CN
face=宋体>,</FONT><FONT lang=ZH-CN face=System>#0FFH</FONT></P>
<P align=justify><FONT lang=ZH-CN face=System>MOV P3</FONT><FONT lang=ZH-CN
face=宋体>,</FONT><FONT lang=ZH-CN face=System>#0FFH</FONT></P>
<P align=justify><FONT lang=ZH-CN face=System>L1:</FONT><FONT lang=ZH-CN
face=宋体> </FONT><FONT lang=ZH-CN face=System>JNB P3.2,L2</FONT><FONT lang=ZH-CN
face=宋体> </FONT><FONT lang=ZH-CN face=System>;P3.2</FONT><FONT lang=ZH-CN
face=宋体>上接有一只按键,它按下时,</FONT><FONT lang=ZH-CN face=System>P3.2=0</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体></FONT><FONT lang=ZH-CN
face=System>JNB P3.3,L3 ;P3.3</FONT><FONT lang=ZH-CN
face=宋体>上接有一只按键,它按下时,</FONT><FONT lang=ZH-CN face=System>P3.3=0</FONT></P><FONT
lang=ZH-CN face=System>
<P align=justify>LJM P L1</P>
<P align=justify>L2: MOV P1,#00H</P>
<P align=justify>LJMP L1</P>
<P align=justify>L3: MOV P1,#0FFH</P>
<P align=justify>LJMP L1</P>
<DIR>
<P align=justify>END</P></DIR></FONT>
<P align=justify><FONT lang=ZH-CN face=宋体>把上面的例子写入片子,看看有什么现象</FONT><FONT
lang=ZH-CN face=System>………</FONT></P><FONT lang=ZH-CN face=System>
<P align=justify>.</P>
<P align=justify>.</P></FONT>
<P align=justify><FONT lang=ZH-CN face=宋体>按下接在</FONT><FONT lang=ZH-CN
face=System>P3.2</FONT><FONT lang=ZH-CN face=宋体>上的按键,</FONT><FONT lang=ZH-CN
face=System>P1</FONT><FONT lang=ZH-CN
face=宋体>口的灯全亮了,松开或再按,灯并不熄灭,然后按下接在</FONT><FONT lang=ZH-CN
face=System>P3.3</FONT><FONT lang=ZH-CN
face=宋体>上的按键,灯就全灭了。这像什么?这不就是工业现场经常用到的“启动”、“停止”的功能吗?</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>怎么做到的呢?一开始,将</FONT><FONT lang=ZH-CN
face=System>0FFH</FONT><FONT lang=ZH-CN face=宋体>送入</FONT><FONT lang=ZH-CN
face=System>P3</FONT><FONT lang=ZH-CN face=宋体>口,这样,</FONT><FONT lang=ZH-CN
face=System>P3</FONT><FONT lang=ZH-CN face=宋体>的所有引线都处于高电平,然后执行</FONT><FONT
lang=ZH-CN face=System>L1</FONT><FONT lang=ZH-CN face=宋体>,如果</FONT><FONT
lang=ZH-CN face=System>P3.2</FONT><FONT lang=ZH-CN
face=宋体>是高电平(键没有按下),则顺序执行</FONT><FONT lang=ZH-CN face=System>JNB
P3.3,L3</FONT><FONT lang=ZH-CN face=宋体>语句,同样,如果</FONT><FONT lang=ZH-CN
face=System>P3.3</FONT><FONT lang=ZH-CN face=宋体>是高电平(键没有按下),则顺序执行</FONT><FONT
lang=ZH-CN face=System>LJMP L1</FONT><FONT lang=ZH-CN
face=宋体>语句。这样就不停地检测</FONT><FONT lang=ZH-CN face=System>P3.2</FONT><FONT
lang=ZH-CN face=宋体>、</FONT><FONT lang=ZH-CN face=System>P3.3</FONT><FONT
lang=ZH-CN face=宋体>,如果有一次</FONT><FONT lang=ZH-CN face=System>P3.2</FONT><FONT
lang=ZH-CN face=宋体>上的按键按下去了,则转移到</FONT><FONT lang=ZH-CN
face=System>L2</FONT><FONT lang=ZH-CN face=宋体>,执行</FONT><FONT lang=ZH-CN
face=System>MOV P1</FONT><FONT lang=ZH-CN face=宋体>,</FONT><FONT lang=ZH-CN
face=System>#00H</FONT><FONT lang=ZH-CN face=宋体>,使灯全亮,然后又转去</FONT><FONT
lang=ZH-CN face=System>L1</FONT><FONT lang=ZH-CN face=宋体>,再次循环,直到检测到</FONT><FONT
lang=ZH-CN face=System>P3.3</FONT><FONT lang=ZH-CN face=宋体>为</FONT><FONT
lang=ZH-CN face=System>0</FONT><FONT lang=ZH-CN face=宋体>,则转</FONT><FONT
lang=ZH-CN face=System>L3</FONT><FONT lang=ZH-CN face=宋体>,执行</FONT><FONT
lang=ZH-CN face=System>MOV P1</FONT><FONT lang=ZH-CN face=宋体>,</FONT><FONT
lang=ZH-CN face=System>#0FFH</FONT><FONT lang=ZH-CN
face=宋体>,例灯全灭,再转去</FONT><FONT lang=ZH-CN face=System>L1</FONT><FONT lang=ZH-CN
face=宋体>,如此循环不已。</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体>大家能否稍加改动,将本程序用</FONT><FONT lang=ZH-CN
face=System>JB</FONT><FONT lang=ZH-CN face=宋体>指令改写?</FONT></P>
<P align=center><A href="http://www.onestudy.net/"><FONT
face=黑体>返回“一学网</FONT><FONT face="Times New Roman" color=#000000> </FONT><FONT
face="Times New Roman"><FONT color=#000000>www.</FONT><FONT
color=#ff0000>one</FONT><FONT color=#008000>study</FONT>.net</FONT><FONT
face=黑体> ”首页</FONT></A></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -