堆栈与子程序调用过程 ●堆栈中的数据是以“先进后出”的方式处理的,由堆栈指针 SP控制。系统复位时SP=07H ORG OOOOH 下一句地址压入堆栈,即 0000 START CLR P1. 0 (08H)=05H(PCL) 0002 LCALL DELAY (09H)=00H(PCH) 0005 SETB P1.0 (SP)=09H 0007 LCALL DELAY (PC)=000CH调用子程序 000A SJMP START 000C DELAY: MOV R5,#OFFH 000E DELAY1: MOV,OFFH 0010 DJNZ R4S 0012 DJNZ R5, DELAY1 从栈中弹出返回地址,即 ■0014 RET (PCL)=05H,(PCH)=00H ■0016 END (PC)=0005H,(SP)=07H 子程序返回,执行0005H句 运行爱思软件 1.ASM
堆栈与子程序调用过程 •堆栈中的数据是以“先进后出”的方式处理的,由堆栈指针 SP控制。系统复位时SP=07H 运行爱思软件 1.ASM ◼ ORG 0000H ◼ 0000 START: CLR P1.0 ◼ 0002 LCALL DELAY ◼ 0005 SETB P1.0 ◼ 0007 LCALL DELAY ◼ 000A SJMP START ◼ 000C DELAY: MOV R5,#0FFH ◼ 000E DELAY1: MOV R4,#0FFH ◼ 0010 DJNZ R4,$ ◼ 0012 DJNZ R5,DELAY1 ◼ 0014 RET ◼ 0016 END 下一句地址压入堆栈,即 (08H)=05H(PCL) (09H)=00H(PCH) (SP)=09H (PC)=000CH调用子程序 从栈中弹出返回地址,即 (PCL)=05H, (PCH) =00H (PC)=0005H,(SP)=07H 子程序返回,执行0005H句
指令初步知识 对应指令码存放的地址」机器码,目标程序 伪指令,汇编起始指 令;表示程序存放的 LORG O0OOH 起始地址 0000 C290K START: CLR P1.0 P.置0源程序 000212000c LCALL DELAY 调延时子程序 0005D290 SETB P1.0 P1.0置1 000712000c LCALL DELAY 调延时子程序 000A80F4 SJMP START;跳转止 START 注释 000c7DFF/ DELAY:MovR5,#OFFH;将FFH送R5 000E7 CFF DELAY1:MOVR4#OFFH;将FFH送R4 0010 DCFE DNZR4车 ;R4减1不为0, 跳转止本句 0012 DDFA DNZ R5 DELAY1;R5减1不为0, 跳转止 DELAY1 001422 RET 返回 TEND ;程序结束 标号:标明指令的地址 助记符
指令初步知识 ◼ ORG 0000H ◼ 0000 C290 START: CLR P1.0 ; P1.0置0 ◼ 0002 12000C LCALL DELAY ;调延时子程序 ◼ 0005 D290 SETB P1.0 ; P1.0置1 ◼ 0007 12000C LCALL DELAY ;调延时子程序 ◼ 000A 80F4 SJMP START ;跳转止START ◼ 000C 7DFF DELAY: MOV R5,#0FFH ;将FFH送R5 ◼ 000E 7CFF DELAY1: MOV R4,#0FFH ;将FFH送R4 ◼ 0010 DCFE DJNZ R4,$ ;R4减1不为0, 跳转止本句 ◼ 0012 DDFA DJNZ R5,DELAY1 ; R5减1不为0, 跳转止DELAY1 ◼ 0014 22 RET ;返回 ◼ END ;程序结束 伪指令,汇编起始指 令:表示程序存放的 起始地址 对应指令码存放的地址 源程序 标号:标明指令的地址 助记符 机器码,目标程序 注释
指令分类 1.数据传送类指令:MOV 2.位操作类指令:SETB、CLR 3.控制转移类指令:DJNZ、 LCALL SJMP、RET 4.逻辑操作类指令: 5.算术运算类指令:
指令分类 1. 数据传送类指令:MOV 2. 位操作类指令:SETB、CLR 3. 控制转移类指令:DJNZ、LCALL、 SJMP、RET 4. 逻辑操作类指令: 5. 算术运算类指令:
作业 1.简述子程序调用过程。 2.已知(SP)=25H(PC)=2345H, (24H)=12H(25H)34H,(26H)=56H,问 执行RET后,(SP)=?(PC)=? 3.已知(SP)=25H(PC)=2345H,标号 LABEL 所在的地址3456H,问执行 LCALL LABEL 后,堆栈指针和堆栈内容发生了什么变化? (PC)=? 4.设晶振频率为12MHz,求下边程序延时多 长时间 MOVRI, #20H AGAIN: MOV R2, #60H DELAY: DJNZ R2 DELAY DJNZ R1,AGAIN RET
作业一 1. 简述子程序调用过程。 2. 已知(SP)=25H,(PC)=2345H, (24H)=12H,(25H)34H, (26H)=56H,问 执行RET后, (SP)=? (PC)=? 3. 已知(SP)=25H,(PC)=2345H,标号LABEL 所在的地址3456H,问执行LCALL LABEL 后,堆栈指针和堆栈内容发生了什么变化? (PC)=? 4. 设晶振频率为12MHz,求下边程序延时多 长时间。 MOV R1,#20H AGAIN: MOV R2,#60H DELAY: DJNZ R2,DELAY DJNZ R1,AGAIN RET
第二次任务 用单片机实现按键控制LED灯亮 ■知识点 ■1、并行口(Po,P1,P2,P3)的功 ■2、片内存储器的构成 ■3、数据传送、逻辑运算和位操作指 4、进一步了解堆栈的使用方法
第二次任务 --用单片机实现按键控制LED灯亮 ◼ 知识点 ◼ 1、并行口(Po,P1,P2,P3)的功 能 ◼ 2、片内存储器的构成 ◼ 3、数据传送、逻辑运算和位操作指 令 ◼ 4、进一步了解堆栈的使用方法