多分支结构例题2说明 此程序要求128个转移目的地址(ROUT00~ROUT7F)必须驻留在与绝对转移指令AJMP相同的一个2 KB存储区内。 RL指令对变址部分乘以 2,因为每条AJMP指令占两个字节。如改用LJMP指令。目的地址可以任意安排在64KB的程序存储器空间内,但程序应作较大的修改。 4.4 循环结构 循环程序的结构一般包括下面几个部分: 置循环初值 循环体(循环工作部分) 修改控制变量 常见的是计数循环,在单片机中,一般用一个工作寄存器Rn作为计数器。 循环控制部分 根据循环结束条件,判断是否结束循环。 8051可采用DJNZ指令来自动修改控制变量并能结束循环。 循环结构 循环结构实例 例:编写4字节数据加法程序:(33H-30H)+(43H-40H) →(33H-30H) 分析: 多字节加法首先从低字节开始,一个字节一个字节的相加; 高字节相加时必须考虑低字节相加时的进位,故用带进位的加法指令ADDC; 初始化 R0——被加数的首地址30H R1——加数的首地址40H R2——加数与被加数的字节数,即循环次数4。 循环结构实例 循环结构实例 ORG 2000H MOV R0 ,#30H ;循环初始化:地址指针赋初值(R0) ←30H MOV R1 ,#40H ; (R1) ←40H MOV R2,#04H ;计数器赋初值(R2) ←4H CLR C ;将CY清零 LOOP: MOV A,@ R0 ;循环体:做两个字节的带进位加法(A) ←((R0) ) ADDC A ,@R1 ; MOV @R0,A ;将和由累加器送回内存单元,((R0)) ← (A) INC R0 ;循环修改:地址指针R0加1 INC R1 ;R1 加1 DJNZ R2 ,LOOP;计数器R2减1,若R2非零继续循环相加 LOP: SJMP LOP ;R2为零循环结束 查表程序 所谓查表是根据存放在ROM中数据表格的项数来查找和它对应的表中值。 特别适用于复杂参数,特别是非线性参数的运算。 例如:查y=x2(设x为0~9)的平方表 查表程序 MCS-51有两条专门的查表指令: MOVC A, @A+DPTR MOVC A, @A+PC 查表程序主要用于代码转换、代码显示、实时值查表计算和按命令号实现转移等。 查表程序 MOVC A,@A+DPTR DPTR存放数据表格的起始地址DTAB,所查表的项数送入累加器A。 使用MOVC A,@A+DPTR指令完成查表。查表过程比较简单。 查表范围64K,称为长查表指令。 查表程序 MOVC A,@A+PC PC存放数据表格的起始地址DTAB,所查表的项数送入累加器A。 使用MOVC A,@A+PC指令完成查表。 查表范围256B,称为短查表或页内查表指令。 由于PC的值为当前指令的地址+2,所以每次需计算变址调整值,故比较麻烦。 不影响DPTR的值,程序比较灵活,故也常用。 例 已知R0低4位有一个16进制数(0~F中一个),请编出能把它转换成相应ASCII码并送人R0的程序。 计算求解1 :由ASCII码字符表可知0~9的ASCII码为30H ~39H,A ~F的ASCII码为41H ~46H。 求解的思路:若R0≤9,则R0内容需加30H;若R0 ﹥9,则R0需加37 H。 查表指令例题 ORG 0400H MOV A,R0 ;取转换值到A ANL A, # 0FH ;屏蔽高4位 CJNE A,#10,NEXT;A和10比较 NEXT: JNZ NEXTT ;若A9,则转NEXTT ADD A,#30H ;若A10,则A+30H ? A
您可能关注的文档
最近下载
- 【数 学】2025-2026学年北师大版数学七年级上册期末测试卷.docx VIP
- 备战2026年高考化学三年(2023-2025)真题汇编(通用版)专题07电化学及其应用(解析版).docx
- 2023中国ESG发展白皮书.pdf VIP
- 2025年高考化学真题分类汇编专题12 有机化学基础(解析版).docx
- 3 天窗(教学课件).ppt VIP
- 2023年医疗招聘中医类-针灸推拿考试历年真题拔高带答案.docx VIP
- 安宁疗护患者生活质量、初次疼痛、埃德蒙顿症状、缓和日常体能评估量表.pdf VIP
- 课堂教学师生言语行为互动的研究.pdf VIP
- 施工现场雨水收集利用系统技术研究与应用.doc VIP
- 施工现场雨水收集利用系统应用完整版.pdf VIP
原创力文档

文档评论(0)