- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
项目二、单片机硬件及指令系统应用 1、子程序的调用与返回 子程序的调用: 短调用指令ACALL addr11, 长调用指令LCALL addr16, 不同的是前者跳转的范围为2K后者跳转的范围为64K。 返回指令:RET从子程序返回到主程序,RETI从中断服务程序返回到主程序 2、子程序设计 (1)每个子程序都有一个唯一的入口(唯一的名称),并以标号作为标识,以便主程序的正确调用,子程序通常以RET指令作为结束。 (2)为了使子程序具有通用性,子程序的操作对象通常采用寄存器或寄存器间址等寻址方式。 (3)为了使子程序不论存放在存储器的任何区域都能被正确执行,在子程序中如有转移指令,应使用相对转移指令而不能用绝对转移指令。 (4)进入子程序时,应对那些主程序中使用并在子程序中继续需要使用的寄存器的内容进行保护(即保护主程序现场),在返回主程序时应恢复它们的原来的状态。 子程序设计的基本步骤如下: (1)确定子程序的名称(入口标号)。 (2)确定子程序的入口参数及出口参数。 (3)确定所使用的寄存器和存储单元机器使用目的。 (4)确定子程序的算法,编写源程序。 例、设内部RAM20H、21H单元中有两个数a和b,编程求c=a2+b2,并把c送入内存单元22H中。 该程序由两部分组成:主程序和子程序。 主程序通过累加器A传送入口参数a和b,子程序用于求平方并将结果通过累加器A传送给主程序,主程序再求两平方和。 ? ? ? ? 主 程 序 ORG 0100H ? MOV A,20H ;a→A ACALL SQR ;求a2 MOV R0,A ;a2 →R0 MOV A,21H ;b →A ACALL SQR ;求b2 ADD A,R0 ;a2+b2→A MOV 22H,A ;存入22H单元 END ? ? 以下为子程序 ORG 1000H ? SQR: ADD A,#01H ; ? MOVC A,@A+PC ? ? RET ? ? TAB: DB 00H,01H,04H,09H,16H, ? DB 25H,36H,49H,64H,81H (二)循环转移指令 DJNZ Rn,rel;( Rn)←(Rn)—1 若(Rn)≠0,则PC+2+ rel,跳转至目标地址 若(Rn)=0, PC+2 跳转到本指令的下一条指令去执行 DJNZ direct,rel;(direct)←(direct)—1 若(direct)≠0,则PC+2+ rel,跳转至目标 地址 若(direct)=0, PC+2 跳转到本指令 的下一条指令去执行 DJNZ指令主要用来实现计数功能,一旦计数完毕, 立即退出循环体,否则继续在循环体中循环。 例:将8031内部的RAM40H~4FH单元置为#00H。 解: ? ? ORG 0000h ? ? MOV R0,#40H ;置首址 ? MOV R2,#10H ;置长度 LOOP: MOV @R0,A ? ? INC R0 ;修改指针 ? DJNZ R2,LOOP ;判断长度 ? END ? ? (三)延时子程序的设计 1、机器周期 当振荡脉冲频率为12MHZ,一个机器周期为1us。 当振荡脉冲频率为6MHZ,一个机器周期为2us。 2、指令周期 执行一条指令所需的时间叫指令周期,一般指令需1、2、4个机器周期。 3、单循环程序运用 图2-10 延时子程序(5.135ms) 考虑在此单循环程序外再嵌套一层循环,见下方第2~7部分,以内部(3~6行)产生延时时间为5ms为重复操作对象,重复操作的次数由外循环来进行参数设置,由外部循环中R7设定为20,这样重复20次1ms的操作后延时约为100ms,考虑到晶振会带来点误差。 图2-11 延时子程序(102ms) 四、任务实施 (一)硬件电路同任务一。 (二)100ms延时子程序的调试。 这已在延时子程序的设计中完成。 (三)编写完整的主程序和子程序。 ? ORG 0000H ? L1: MOV P1,#0FEH ;点亮二极管 ? LCALL DELAY2 ;延时200ms ? MOV P1,#0FFH ;关闭二极管 ? LCALL DELAY2 ;延时200ms ? LJMP L1 ;返回到首址 ? ORG 0100H ? DELAY2: MOV R7,#20 ;延时200ms子程序 D1: MOV R6,#00H ? D2: NOP ? ? ? NOP ? ?
原创力文档


文档评论(0)