单片机原理及应用 第8讲 位操作指令及练习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 位控制转移指令(5条) (1)判Cy转移指令
JC rel JNC rel 第一条指令的功能是如果Cy=1就转移,否 则就顺序执行。 第二条指令则和第一条指令相反,即如果
Cy=0就转移,否则就顺序执行。
同样也可写成: JC 标号 JNC 标号
(2)判位直接寻址位转移指令 JB bit,rel JNB bit,rel JBC bit,rel 第一条指令:如果指定的(bit)=1,则转移,否 则顺序执行,第二条指令功能相反。 第三条指令是如果指定的(bit)=1,则转移, 并把该位清0,否则顺序执行。 编写程序时,可以写成: JB bit,标号 JNB bit,标号 JBC bit,标号
控制转移指令
• 1、无条件转移指令: • 长转移类指令:LJMP addr16 • 绝对转移类指令:AJMP addr11 短转移指令:SJMP rel 间接转移指令:JMP @A+DPTR • 我们在编写汇编语言源程序时,可以直接写成: LJMP 标号 ;即转移到标号处 AJMP 标号 SJMP 标号 JMP 标号
EQU
数值或汇编符号
EQU 所定义的字符名必须先定义后使用 DATA 所定义的字符名无此限制
8、 定义存储区伪指令 • 用于定义在标号开始的内存单元预留一 定数量的内存单元,以备源程序执行过 程中使用。预留单元的数量由X决定 格式为: 标号: DS X • 例如: TAB : DS 10H DB 16H , 12 H
(2)比较转移指令(4条)
CJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel 我们在编写汇编语言源程序时,可以直接写成: CJNE A,#data,标号 CJNE A,direct,标号 CJNE Rn,#data,标号 CJNE @Ri,#data,标号
(3)减1条件转移指令(2条)
DJNZ Rn,rel DJNZ direct,rel
我们在编写汇编语言源程序时,可以直接写成: DJNZ Rn,标号 DJNZ direct,标号
3、常用子程序
• 子程序是能够完成某一专用任务的程序 段,其代码为所有的主程序共享,因此, 子程序在结构上应具有通用性和独立性。
;一定放在程序末尾!
3 定义字节伪指令
格式为: 标号:DB n1,n2,…,nn 此指令用于定义8位数据的地址 4 定义字伪指令 格式为:标号:DW nn1,nn2,…,nnN
高八Βιβλιοθήκη Baidu先存入,低八位后存入
5 位地址赋值伪指令 格式:字符名称 BIT 位地址
6 数据地址赋值伪指令
格式为: 字符名 7 赋值伪指令 格式为: 字符名 DATA nn
延迟子程序
• 系统设计中的显示、键盘及数据采集中经常要 用到延迟。 DELAY:MOV R3,#98 LOOP:DJNZ R3,LOOP DJNZ R2,DELAY RET 入口参数就是R2,根据单片机的时钟频率,只要 在主程序中给R2不同的值,就能实现不同时间 长度的延迟。
3. 空操作指令(1条)
2. 条件转移指令(8条)
条件转移指令是指在满足一定条件时进行相对转 移,否则程序继续执行本指令的下一条指令。 (1)判A内容是否为0转移指令(2条) JZ rel ;如果A=0,则转移,否则顺序执行。 JNZ rel ;如果A≠0,就转移。 我们在编写汇编语言源程序时,可以直接写成: JZ 标号 ;即转移到标号处。 JNZ 标号 ;即转移到标号处
例1:内部RAM的M1和M2单元各有一个 无符号8位二进制数,试编程比较它们的 大小,并把大数送到MAX单元 MOV A, M1 CJNE A, M2,LOOP LOOP: JNC LOOP1 MOV A,M2 LOOP1:MOV MAX,A
• 例2:已知外部RAM以2000H开始有一个 数据缓冲区,该缓冲区中数据以回车符 (ASCII码为0DH)为结束标志,试编 一程序把正数送入片内RAM以30H为起 始地址的正数区,把负数送入片内RAM 以50H为起始地址的负数区。(假设输 入数据不超过32个)
LOOP:MOV @R1,A INC R1 INC DPTR SJMP NEXT DONE:SJMP DONE
伪指令
1 起始地址伪指令 :确定程序或程序段的起 始地址。
格式为: ORG nn ;nn为16位地址值。 如:ORG 0100H
2 汇编结束伪指令 :汇编语言程序结束伪
指令。
格式为: END
• 3、已知外部RAM中以3000H为始址的数 据块以零为结束标志,试编程将之传送 到以30H为始址的内部RAM区
位操作指令
1.位传送指令 (2条)
MOV MOV C,bit ;bit →C bit,C ;C →bit
这组指令的功能是实现CY和其它位地址之间的 数据传递。
例:MOV C,P1.0
ORG 0100H MOV DPTR, #2000H MOV R0,#30H MOV R1,#50H NEXT: MOVX A, @DPTR CJNE A,#0DH,COMP SJMP DONE COMP:JB ACC.7 ,LOOP MOV @R0,A INC R0 INC DPTR SJMP NEXT
MOV P1.0,C
;将P1.0的状态送给C。 ;将C中的状态送到P1.0 ;引脚上去。
2 位变量修改指令(4条)
位清0指令 : CLR C CLR bit
位置1指令: SETB C
SETB bit 位取反指令: CPL C CPL bit
3.位 逻辑运算指令 (4条)
ANL C,bit ANL C,/bit ORL C,bit ORL C,/bit
NOP
例:从P1口的P1.0管脚输出周期为10个机器 周期的方波 CLR P1.0 LOOP: CPL P1.0 NOP NOP SJMP LOOP
• 练习: • 1、已知某单片机监控程序始址为A080H, 问用什么办法使单片机开机后自动执行 监控程序 • 2、已知MA=0500H,问8051单片机执行 如下指令 • MOV SP ,#70H • MA:LCALL 8192H • 堆栈中数据如何变化,PC中内容是什么
编写子程序时应注意的问题
• 1、子程序的第一条指令地址为子程序的 入口地址,该指令前必须有标号。 • 2、主程序通过调用指令来调用子程序, 子程序末尾必须要有返回指令来返回主 程序。
• 3、主程序调用子程序后,单片机可以自 动保护断点地址,但对于R0-R7,SFR以 及某些内存单元内容需要保存的话,就 需要在子程序开头写保存它们的指令 (进栈)、在末尾写恢复它们的指令 (出栈)。 • 4、入口参数:将输入数据存放到子程序 指定的位置 • 出口参数:子程序将处理结果存放到指 定的位置。