mcs51程序设计(编辑修改稿)内容摘要:
元的起始地址 MOV A, @R0 ;读出数送 A 暂存 MOV DPTR, 20xxH ;定外部存储器存数单元的起始地址 MOVX @DPTR, A ;送数到 20xxH 单元 MOV R7, 08 ;定送数的个数 LOOP: INC R0 ;取数单元加 1,指向下一个单元 INC DPTR ;存数单元加 1,指向下一个单元 MOV A, @R0 ;读出数送 A 暂存 MOVX @DPTR, A ;送数到新单元 DJNZ R7, LOOP ; 8 个送完了吗。 未完转到 LOOP 继续送 END 送完了顺序执 行,结束。 程序初步编好后,在仿真软件中调试,调试时先打开 Franklin 仿真软件的数据窗口( Data View),在窗口中的 40H 为起点的 8 个单元中任意送数,再打开 Franklin 仿真软件的外部数据窗口( Xdata View),首先全速运行程序,看所有数据是否传到 20xxH为起点的 8 个单元中,若不正确,再单步运行程序,看程序的每一步是否正确,若不正确,再反复修改,直到正确为止。 例 12: 将外部存储器以 20xxH 为起始地址的 8 个单元中的内容传到内部 RAM以 40H为起始地址的 8 个单元中。 仿照例 2 我们可写 出程序如下: ORG 0000H MOV DPTR, 20xxH ;定外部存储器取数单元的起始地址 MOVX A, @DPTR ;读出数送 A 暂存 MOV R0, 40H ;定内部 RAM 存数单元的起始地址 MOV @R0 , A ;送数到 40H 单元 MOV R7, 08 ;定送数的个数 LOOP: INC R0 ;取数单元加 1,指向下一个单元 INC DPTR ;存数单元加 1,指向下一个单元 MOV A, @DPTR ;读出数送 A 暂存 MOVX @R0, A ;送数到新单元 DJNZ R7, LOOP ; 8 个送完了吗。 未完转到 LOOP 继续送 END 送完了顺序执行,结束。 程序初步编好后,在仿真软件中调试,调试时先打开 Franklin 仿真软件的外部数据窗口( Xdata View),在外部数据 窗口( Xdata View)中的 20xxH 为起点的 8 个单元中任意送数,再打开 Franklin 仿真软件的内部数据窗口( Data View)。 首先全速运行程序,看所有数据是否传到 40H 为起点的 8 个单元中,若不正确,再单步运行程序,看程序的每一步是否正确,若不正确,再反复修改,直到正确为止,若正确说明此程序编好了。 例 13: 将外部存储器以 20xxH 为起始地址的 8 个单元中的内容传到外部存储器以4000H 为起始地址的 8 个单元中。 编程时可以沿用以上编程思路,但在循环时要将 DPTR 分成两个字节,即 DPH 和 DPL,只要 这样改动就可编程如下: ORG 0000H MOV R2, 00H ;定外部存储器取数单元的起始地址低字节 MOV R3, 20H ;定外部存储器取数单元的起始地址高字节 MOV R4, 00H ;定外部存储器存数单元的起始地址低字节 MOV R5, 40H ;定外部存储器存数单元的起始地址高字节 MOV R7, 08 ;定送数的个数 LOOP: MOV DPL, R2 MOV DPH, R3 MOV A, @DPTR ;读出 20xx 单元的数送 A 暂存 MOV DPL, R4 MOV DPH, R5 MOVX @DPTR, A ;送数到 4000H 单元 INC R2 ;取数单元加 1,指向下一个单元 INC R4 ;存数单元加 1,指向下一个单元 DJNZ R7, LOOP ; 8 个送完了吗。 未完转到 LOOP 继续送 END 送完了顺序执行,结束。 程序初步编好后,在仿真软件中调试,调试时先打开 Franklin 仿真软件的外部数据窗口( Xdata View),在外部数据窗口( Xdata View)中的 20xxH 为起点的 8 个单元中任意送数,再又打开一个 Franklin 仿真软件的外部数据窗口( Xdata View)。 首先全速运行程序,看所有数据是否传到 4000H 为起点的 8 个单元中,若不正确,再单步运行程序,看程序的每一步是否正确,若不正确,再反复修改,直到正确为止。 此程序传数的最大个数为 FFH 即 256 个,超过此数该程序就有问题,该问题出在高字节不能改变,要使高字节也能变,程序要作如下变动: ORG 0000H MOV R2, 00H ;定外部存储器取数单元的起始地址低字节 MOV R3, 20H ;定外部存储器取数单元的起始地址高字节 MOV R4, 00H ;定外部存储器存数单元的起始地址低字节 MOV R5, 40H ;定外部存储器存数单元的起始地址高字节 MOV R6, 08H ;定送数的个数低字 节 MOV R7, 04H ;定送数的个数高字节 MOV A, R7 JZ LOP2 JNZ LOP ;以上三句是判一下 R7 高字节是否为 0 LOP1: MOV DPL, R2 MOV DPH, R3 MOV A, @DPTR ;读出 20xx 单元的数送 A 暂存 INC DPTR ;取数单元加 1,指向下一个单元 MOV R2, DPL MOV R3, DPH ;新地址送 R R3,为送下一个作准备 MOV DPL, R4 MOV DPH, R5 MOVX @DPTR, A ;送数到 4000H 单元 INC DPTR ;存数单元加 1,指向下一个单元 MOV R4, DPL MOV R5, DPH ;新地址送 R R5,为送下一个作准备 LOP: DJNZ R7, LOP1 ;高字节送完了吗。 未完转到 LOP1 继续送 LOP2: DJNZ R6, LOP1 ;未完接着转去送低字节,完了顺序执行, END ;结束程序。 象这样的小程序很有用的,一般将它编写成通用的子程序: MOVE: MOV DPL, R2 MOV DPH, R3 MOVX A, @DPTR MOV DPL, R4 MOV DPH, R5 MOVX A, @DPTR CJNE R2, 0FFH, MOV1 INC R3 MOV1: INC R2 CJNE R2, 0FFH, MOV2 INC R5 MOV2: INC R4 CJNE R6, 00H, MOV3 CJNE R7, 00H, MOV4 MOV3: DEC R6 SJMP MOVE MOV4: DEC R6 DEC R7 SJMP MOVE RET 程 序中 R R3 定数据块的首地址, R R5 定数据块目标地址, R6 为传送多少个数的低字节, R7 为传送多少个数的高字节,使用此子程序时只要将这 6 个数送入,调用此程序就行。 此章讲的所有程序都应在 Franklin 仿真软件中调试,调试是研究程序、读懂程序、学习编写程序的过程。 多重循环程序 如果在一个循环体中又包含了其他的循环程序,即循环中还套着循环,这种程序称为多重循环程序。 例 14: 10 秒延时程序 延时程序与 MCS51 执行指令的时间有关,如果使用 6MHz 晶振,一个机器周期为2μ s,计算出执行一条指令以至一个循环所需要的时间,给出相应的循环次数,便能达到延时的目的。 程序如下: DEL: MOV R5, 100 DEL0: MOV R6, 200 DEL1: MOV R7, 248 DEL2: DJNZ R7, DEL2 ; 248*+4 DJNZ R6, DEL1 ;( 248*2+4) *200+4 DJNZ R5, DEL0 ;( 248*+4) *200+4) *100+4 RET 上例延时程序实际延时为 秒。 它是一个三重循环程序,利用程序嵌套的方法对时间实行延迟是程序设计中常用的方法。 使用多重循环程序时,必须注意以下几点: ( 1)循环嵌套,必须层次分明,不允许产生内外层循环交叉。 ( 2)外循环可以一层层向内循环进入,结束时由里往外一层层退出。 ( 3)内循环体可以直接转入外循环体,实现一个循环由多个条件控制的循环结构方式。 据以上程序可编出多重循环程序,也可 编出一(单)重循环程序 LOOP: MOV R7, 0FFH LOP1: DJNZ R7, LOP1 RET 也可编出两重循环程序为: DEL0: MOV R6, 200 DEL1: MOV R7, 248 DEL2: DJNZ R7, DEL2 DJNZ R6, DEL1 RET 例 15 冒泡程序 设有 N 个数,它们依次存放于 LIST 地址开始的存储 区域中,将 N 个数比较大小后,使它们按由小到大(或由大到小)的次序排列,存放在原存储区域中。 编制该程序的方法:依次将相邻两个单元的内容作比较,即第一个数和第二个数比较,第二个数和第三个数比较„„,如果符合从小到大的顺序则不改变它们在内存中的位置,否则交换它们之间的位置。 如此反复比较,直至数列排序完成为止。 由于在比较过程中将小数(或大数)向上冒,因此这种算法称为“冒泡法”或称排序法,它是通过一轮一轮的比较, 第一轮经过六次两两比较后,得到一个最大数。 第二轮经过五次两两比较后,得到次大数。 每 轮比较后得到本轮最大数(或最小数),该数就不再参加下一轮的两两比较,故进入下一轮时,两两比较次数减 1。 为了加快数据排序速度,程序中设置一个标志位,只要在比较过程中两数之间没有发生过交换,就表示数列已按大小顺序排列了。 可以结束比较。 设数列首地址在 R0 寄存器中, R2 为外循环次数计数器, R3 为内循环次数计数器,R1 为交换标志。 程序如下: ORG 8000H MOV R2, CNT1 ;数列个数 1 LOOP1: MOV A, R2 ;外循环计数值 MOV R3, A ;内循环计数值 MOV R1, 01 ;交换标志置 1 LOOP2: MOV A, @R0 ;取数据 MOV B, A ;暂存 B INC R0 CLR C SUBB A,。mcs51程序设计(编辑修改稿)
相关推荐
边 用 油漆桶工具 填充图像 (先 用前景填充 图像 、模式为颜色、容差为 60,再用图案填充背景、模式为正常 ) 用 ” 编辑 → 填充 ” 命令填充图像 ( 魔棒工具选择背景; 先图案,模式正常;后前景色,模式叠加;丌透明度均为 100%) 用 ” 编辑 → 描边 ” 命令描边选区 (新建图层;创建矩形选区;描边宽度为 8px,位置居中; Ctrl+D;图层→图层样式→投影) 6. 创建图案
额将越来越大。 下一步,破碎机行业将向系统化、大型化发展。 一个破碎站将有多种型号的破碎机进行联合工作, 进行筛分破碎,最终达到人们想要的产品。 以下是破碎机站系统的一个示意图。 中国矿业大学 20xx 届本科生毕业设计 第 11 页 图 破碎机工作站 本设计的主要内容 本设计的主要内容是设计双齿辊破碎机,我所做的主要工作有: ,然后再根据这些参数确定总体传动方案;
經驗 ,瞭解 動物與生態環境 的相關 知識。 本課程的延伸學習目標為何。 (一) 尊重並愛護所有生物的棲息地。 (二 ) 激發小朋友的環保意識並實行節能減碳的生活。 學生作業說明 學生所要提出的實際或模擬問題情境為何 ? 學生要製作出哪些有用的作品、活動、或服務 ? 學生的作品會帶給他人哪些效益 ? 情境 一 : 老師: 看完 「 小北極熊 努特 Knut」 這本書, 你覺得 努特 可 愛嗎
实践技能。 学生可以根据自己所修的知识体系自主选择各实验环节,再根据实际情况将学生分成若干设计小组,让其在指导教师的指导下,独立处理项目开发中的各种事务,培养学生分析问题时的全局意识和相互分工合作的团队精神。 主要内容为 Linux 服务器架构 Linux 是多用户、多任务的操作系统,具有可移植性、强大的网络功能和良好的编程环境,这些已为大家所认知和欣赏,而 Linux 的核心正是服务器。
系,设立更多销售点,从而达到共赢。 参加大型车展活动,参见公益活动,为一些活动进行赞助。 提高企业知名度。 :2011年销售量圆满完成,为了2012年盈利有所增加,必须扩大销售量,增加产量15%,实现年销量2300辆。 为达到预计销售量,企业应该制定相应的措施,具体事项为:(1)扩大销售队伍,增加销售人员20%,更好的覆盖各销售区域进行销售工作。 (2)加大广告宣传力度,使其能广泛性
工作方案提出,要对新建建筑实施建筑能效专项测评,节能不达标的不得办理开工和竣工验收备 案手续,不准销售使用。 发布《国务院关于印发节能减排综合性工作方案的通知》打响了节能减排的发令枪,其体现了国家对环保的重视。 在政策监督下 ,未来遏制高耗能高污染行业过快增长,加快淘汰落后生产能力,加快 能源结构调整将成为节能减排重要工作内容。 10 月 28日,全国人大常委会表决通过修改后的节约能源法,国