文章目录
- 顺序结构
- 分支结构
- CJNE的使用规则
- 循环结构
- 包含部分
- 分类
- 常考题型
- 例题1
- 题目描述
- 题解
- 例题2
- 题目描述
- 题解
- 例题3
- 题目描述
- 题解

顺序结构
程序默认以顺序结构执行;
分支结构
- 用
CJNE进行分支;


CJNE的使用规则
CJNE A, #data rel
- 若(A) = (data),则
顺序执行; - 若(A) > (data),则
0 -> (CY)并跳转(重要); - 若(A) < (data),则
1 -> (CY)并跳转(重要);
循环结构
包含部分
循环初始化;循环体;循环控制;循环结束;
分类
-
计数式循环控制(以循环次数作为循环是否执行的控制条件)- 适合先执行后判断的结构;
- 适用已知循环次数的场合;
- 多采用
DJNZ指令;
-
条件循环控制(用某个条件是否满足条件作为循环是否执行的控制条件)- 适用于先判断后执行的语句;
- 适用于未知循环次数的场合;
- 多采用
CJNE、JZ(判断A)与JC、JNC(判断CY)指令;
常考题型
- 本章常考题型为
汇编语言程序设计;
例题1
题目描述
- 设变量
X的值存放在内部RAM中的50单元中,函数值Y存放在内部RAM中的60H单元,请编写程序实现下列分段函数。

题解
ORG 0000H ;设置起始地址
AJMP MAIN ;跳转到MAIN开始执行
ORG 0030H ;跳过一些终端地址
MAIN:
MOV A, 50H ;取出X的值
CJNE A, #12, Jdg2;判断(A)是否等于12,不等于就跳转
BR1:
MOV 60H, #6 ;令Y = 6
SJMP OUTG ;跳转到出口
Jdg2:
JNC BR3 ;若(CY)=0,则说明X>12,则跳转到分支3
BR2:
ADD A, #6 ;X = X + 6
MOV 60H, A ;将结果给Y
SJMP OUTG ;分支结束,跳转到出口
BR3:
ADD A, #2 ;X = X + 2
MOV 60H, A ;将结果给Y
OUTG:
SJMP $ ;在此处死循环
- 一定要仔细阅读注释的内容!!!
其中,BR1代表 X = 12 的情况;BR2代表 X > 12 的情况;BR3代表 X < 12的情况;
例题2
题目描述
- ①将片内RAM的
50H~5FH地址的区间的内容初始化为(0 ~ 15),即(50H) = 0,(51H) = 1…,②然后将该区间(50H ~ 5FH)的内容复制到片内RAM的(30H ~ 3FH)单元。
题解
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV R7, #16 ;设置循环次数
MOV R0, #30h;存储地址的起始位置
MOV A, #0 ;存储数的最小值
LOOP1:
MOV @R0, A ;A中存的值放入R0处
INC A ;A = A + 1
INC R0 ;R0 = R0 + 1
DJNZ R7, LOOP1;(R7) = (R7)-1,若R7!=0,则跳转到LOOP1
MOV R0, #50H;复制的起始地址
MOV R1, #30H;粘贴的起始地址
MOV R7, #16 ;设置循环次数
LOOP2:
MOV A, @R0 ;R0中存的值放入A
MOV @R1, A ;A中存的值放入R1处
INC R0 ;R0 = R0 + 1
INC R1 ;R1 = R1 + 1
DJNZ R7, LOOP2;(R7) = (R7)-1,若R7!=0,则跳转到LOOP2
OUTG:
SJMP $
例题3
题目描述
- 电路如图所示,已知单片机的晶振频率是
12MHZ,请编程实现发光二极管LED亮0.1秒,灭0.1秒的闪烁现象,要求采用模块化技术设计。

题解
重要公式
T(机器周期) = 12 / ∫(晶振频率)
题目解析
-
根据发光二极管的特性,P1.0若为
高电平则二极管灭,P1.0若为低电平则二极管亮; -
根据公式可得若晶振频率为
12MHZ,则机器周期为1微秒; -
题目要求使用模块化编程,也就是说要求使用
子程序;
代码
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
SETB P1.0 ;LED灭
LOOP:
CLR P1.0 ;LED亮
ACALL DL100ms ;延时0.1s
SETB P1.0 ;LED灭
ACALL DL100ms ;延时0.1s
SJMP LOOP ;循环控制LED的亮灭
DL100ms:
MOV R6, #100 ;外循环产生100ms的延时
DL1ms:
MOV R7, #200 ;产生1μs的延时需要1个机器周期
DL5μs:
NOP ;NOP指令为1个机器周期
NOP
NOP
DJNZ R7, DL5ms ;DJNZ为2个机器周期
DJNZ R6, DL1ms
RET ;子程序返回
代码解析
- 程序采用一个内嵌循环设计。内循环(DL1ms)200次,每次循环消耗
5个机器周期,也就是5微秒,所以总共消耗200x5 = 1000微妙 = 1ms; - 外循环100次,达到延时
100x1ms = 100ms = 0.1s的效果;
更多例题有待更新…



















