流水灯汇编程序讲解).doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
流水灯汇编程序讲解)

ORG 0000H//伪指令起始地址 LJMP MAIN//跳到主函数里 ORG 0100H//重新开始设置起始地址,因为在0000H~0023H为中断子函数的入口,等于说这几个入口地址把这段内存给分割了,为了保证程序的连续性要跳过这段内存。当然也可以从0030H开始。 MAIN:MOV A,#0FEH//点亮第一个灯。1111 1110。因为所有的LED是共阳极的所以当给低电平的时候导通 MOV R0,#08H//这个是用来确定循环次数的,意思就是说我有八个灯,所有我循环八次 A1: MOV P1,A//点亮第一个灯 LCALL DELAY//调用延时子函数 RL A//左移一位,注意这条语句。是左移一位后的数据重新给累加器A。也就是说原来是1111 1110.现在是1111 1101。 DJNZ R0,A1//DJNZ。Decrease jump not zero.我直白的理解减1不是0就跳,谁减呢R0减,跳哪呢?跳到A1处。然后此时由于累加器A此时存的是1111 1101.所以大家应该要明白,当我跳回到A1的时候给P1口赋值时。点亮的是第二个灯,第一个灯灭。然后八次循环。依次点亮。 MOV A,#7FH//对累加器A重装初值 MOV R0,#08H//还是八次循环。A2的目的是从左往右依次点亮灯。类比A1 A2: MOV P1,A LCALL DELAY RR A DJNZ R0,A2 MOV R3,#0FEH//这段程序到A3是为了让灯从左往右依次全部点亮,由于只有累加器A可以进行左右移动的指令。并且大家可以通过查表04H地址代表的是0区寄存的R3的地址。为了下面ORL这个或的算法故这样赋值,大家可以参考书44页第十二句指令。 MOV R0,#08H MOV A,#0FDH A3: MOV P1,R3 LCALL DELAY ORL 04H,A//04H和R3是一个东西。累加器A中存的是1111 1101,而R3中存的是1111 1110,它们两个或过之后为1111 1100存到了R3中,也就是04H这个地址中。 RL A//然后累加器中的数据左移一位。成为1111 1011 DJNZ R0,A3//大家可以自己琢磨一下下次循环会出现什么情况。然后,就能理解八次循环后的实验结果是什么了。 MOV R3,#7FH//和A3差不多,就是从右往左依次全部点亮 MOV R0,#08H MOV A,#0BFH A4: MOV P1,R3 LCALL DELAY ORL 04H,A RR A DJNZ R0,A4 MOV A,#00H//全亮 MOV P1,A LCALL DELAY MOV A,#0FFH//全灭 MOV P1,A LCALL DELAY MOV A,#00H//全亮 MOV P1,A LCALL DELAY MOV A,#55//0101 0101 2468全亮 MOV P1,A LCALL DELAY CPL A//取反给累加器A。1010 1010 1357全亮 MOV P1,A LCALL DELAY LJMP MAIN//调回主函数继续循环 ;延时函数 DELAY:MOV R1,#200 DELAY1:MOV R2,#125 DELAY2:MOV R4,#10 DELAY3:DJNZ R4,DELAY3 DJNZ R2,DELAY2 DJNZ R1,DELAY1 RET//返回到调用处,继续下条指令。 别直接粘到编辑器上,用不成的,自己敲上去吧,好好琢磨一下。大家一起学习,汇编我也没用过,这是我第一次用。有什么问题可以交流一下,我也会出错的。

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档