- 1、本文档共131页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]单片机原理及应用--第五章 80C51单片机的程序设计
图5--9子程序的调用和返回过程示意图 程序段如下: START: MOV A,addr1 ;将addr1中内容送A CJNE A,addr2,LOOP1 ;两数比较,不相等则转LOOP1 LOOP3: RET ;结束 LOOP1: JC LOOP2 ;当CY=1,转LOOP2 MOV addr3,A ;CY=0,(A)(addr2) SJMP LOOP3 ;转结束 LOOP2: MOV addr3,addr2 ;CY=1,(addr2)(A) SJMP LOOP3 从上可见,CJNE 是一组功能极强的比较指令,它可指出两数的大、小和相等。通过寄存器和直接寻址方式,可派生出很多条比较指令。同样,它亦属于相对转移。 3、循环结构程序 例如:要使00H—7FH单元的内容清0。 方法1:用128条赋值指令完成。 方法2:只用一条赋值指令,并使之执行128次,每次执行时操作数亦作相应的变化以完成规定的操作。 方法1:MOV 00H,#0 MOV 01H,#0 ……… MOV 7FH,#0 方法2: MOV R0,#128 CLR A UP:MOV @R0,A DEC R0 CJNE R0,#00H,UP SJMP $ 循环程序的组成: 循环程序一般由四部分组成: 置循环初值 循环体 循环修改部分 循环控制部分 确定循环开始时的状态,如使得工作单元清0,计数器置初值等 。 要求重复执行的部分 。 每循环一次就要需要修改一次初值,以便在一定情况下,能结束循环。 根据循环结束条件,判断是否结束循环 流 程 图 (1)计数控制循环结构 特点:初始化部分设定计数的初值,循环控制部分依据计数器的值决定循环次数。 一般均为减“1”计数器,每循环一次自动减“1”,直到回“0”时结束循环。 80C51有功能极强的循环转移指令: DJNZ Rn,rel ;以工作寄存器作控制计数器。 DJNZ direct,rel ;以直接寻址单元作控制计数器 例5.5 采用循环程序进行软件延时,延时子程序如下: DELAY: MOV R2,#data ;预置循环控制常数 DELAY1:DJNZ R2,DELAY1 ;当(R2)≠0,转向本身 RET 根据R2的不同初值,可实现3-513个机器周期的延时(第一条为单周期指令,第二条为双周期指令)。 一般可以实现任意延时要求,但是需牺牲CPU的工作。 例:使00H---7FH单元清0。 数组清0 分析命题 确定算法 画流程图 编写程序 上机调试 7FH … 00H 00H 00H 00H 用MOV @R0,A 做循环主体,修改R0的值,可以将0送入00H—7FH单元中。 MOV R0,#128 CLR A UP:MOV @R0,A DEC R0 CJNE R0,#00H,UP SJMP $ 开始 给R0赋128、 A清0 A送@R0 R0减1 结束 R0=00H? Y N 先判断后执行 例:将内部RAM地址为data的数据串传送到外部RAM地址为buffer的存储区域内,直到遇到‘$ ’字符停止传送。由于循环次数不知道,但循环条件可测试到。采用先判断后执行结构比较适宜。程序段如下: MOV R0,#data MOV DPTR,#buffer LOOP0:MOV A,@R0 CJNE A,#24H,LOOP1 ;判断是否为‘ $ ’ SJMP LOOP2 ;是‘ $ ’字符,转结束 LOOP1:
文档评论(0)