单片机讲义7讲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为 3AH,47H,65H,70H,8BH, 要 求 根 据 按 下 的 键 转 向 不 同的处理程序,分别为PR0,PR1,PR2,PR3,PR4。 设按键的编码已在B寄存器中,编出程序。
分析 将键码排成表,查B中的键编码在键码中的 序号N,另安排已个转移表,存放AJMP指令,因每 条AJMP指令占二字节,序号乘2即2N为转移表内的 偏移地址,利用JMP @A+DPTR实现多分支转移,程 序如下:
第 3 章 MCS-51单片机汇编语言程序设计
ORG 0000H
MOV A, 30H
JZ NEXT
;判断是否为零
ANL A, #80H ;判断符号位
JZ ED
;X>0转ED
MOV A, #05H ;X<0 完成X+5
ADD A, 30H
MOV 30H, A
SJMP ED
NEXT: MOV 30H, #20H ;X=0
第 3 章 MCS-51单片机汇编语言程序设计
ORG 0100H MOV A, R3
; R3->A
ADD A, A
; A*2
MOV DPTR, #TAB
PUSH A MOVC A, @A+DPTR MOV B, A
; 取地址表中的高字节 ;暂存于B
INC DPL
POP A MOVC A, @A+DPTR ;取地址表中的的字节
1) 查转移地址表。将转移地址列地址列成表格,将表格 的内容作转移的目标地址。
2) 查转移指令表。将转移到不同程序的转移指令列成 表,判断条件后查表,转到表中执行,下面用两个例子说明。
1. 利用转移地址表实现转移 例3-7 根据R3的内容转向对应的程序,处理程序的入口分 别为PR0-PRn(R3的内容<128,n<128)
程序如下:
1
x0
y
1
x0
0
x0
START: CJNE R0, #00H, SUL1 ; R0中的数与00比较不等转移
MOV R1, #00H
; 相等, R1← 0
SJMP SUL2
SUL1: JC NEG
; 两数不等, 若(R0)<0, 转向NEG
MOV R1, #01H ; (R0)>0, 则 R1←01H
LE EQU 31H
END
第 3 章 MCS-51单片机汇编语言程序设计
例3-6 设变量X以补码的形式存放在片内RAM的30H单元, 函数y与x 有如下关系式:
x
x>0
y= 20H x=0
x+5 x<0
试编制程序,根据X的大小求出Y并放回原单元。
分析 取出变量后先作取值范围的判断,对符号的判断可用 位操作类指令,也可用逻辑运算类指令实现,此处用逻辑运 算指令。流程见图3-1,程序如下:
编码程序结束
JPT: AJMP PR0 ;分支转移表
AJMP PR1
AJMP PR2
AJMP PR3
AJMP PR4
TAB: DB 3AH,47H,65H,70H,8BH ;键码表
Байду номын сангаасEND
第 3 章 MCS-51单片机汇编语言程序设计
3.5 循环程序设计
当程序中的某些指令需要反复执行多次时,采用 循环程序的方式,这样会使程序缩短,节省存储单元 (并不节省执行时间)。
SJMP SUL2
NEG: MOV R1, #0FFH ; (R0)<0, 则 R1←0FFH
SUL2: RET
第 3 章 MCS-51单片机汇编语言程序设计
图 3-2
第 3 章 MCS-51单片机汇编语言程序设计
有一类分支程序,它根据不同的输入条件或不同的运算 结果,转向不同的处理程序,称之为散转程序。这种程序通 常利用JMP @A+DPTR 间接转移指令实现。有如下两种方法:
第 3 章 MCS-51单片机汇编语言程序设计
3.4 分支程序设计
例3-5 在内部RAM 的40H和44H地址单元中,有2各无符号数,试编程比较 这两数的大小,将大数存于内部RAM的GR单元,小数存于LE地址单元,如 两数相等,则分别送入GR和LE地址单元。 分析 采用CJNE指令,既可以判断相等与否,还可以通过Cy标志判断大小。 程序如下:ORG 0000H
MOV DPTR,#JPT ;置分支表首址
JMP @A+DPTR ;即JMP JPT +2N,从而执行JPT+2N
中的AJMP PRn指令
第 3 章 MCS-51单片机汇编语言程序设计
AGAN: POP A
;不相等比较下一个
INC A
;序号加1
CJNE A,#5,NEXT
SJMP $
;键码查完还没有B中按键
ED: SJMP $
第 3 章 MCS-51单片机汇编语言程序设计 开始
(30H)→A
A=00H?
Y
N Y
A>00H?
N (20H)+05H→(30H)
20H→(30H)
结束
图3-1 例3-6程序流程图
第 3 章 MCS-51单片机汇编语言程序设计
加例 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:
MOV A,40H CJNE A,41H,NOEQ ;两数不等转NOEQ MOV GE,A ;两数相等,GR单元和LE单元均存次数
MOV LE,A
SJMP $
NOEQ: JC LESS
;A小则转LESS
MOV GR,A ;A大,大数存GR单元
MOV LE,41H ;小数存LE单元
SJMP $
GR EQU 30H
循环程序设计的一个主要问题是循环次数的控制,有 两种方式:第一种方法是先判断,再处理即先判断满 不满足循环条件,如不满足,就不循环,多以循环条 件控制。第二种方法是先处理再判断,即循环一遍后, 下一轮还需不需要进行,多以计循环次数控制。循环 可以有单重循环和多重循环,再多重循环中,内部循 环不能交叉,也不允许外循环跳入内循环。
第 3 章 MCS-51单片机汇编语言程序设计
ORG 0000H
MOV DPTR, #TAB ;置键码首址
MOV A, #0
;表的起始位的偏移量为0
NEXT: PUSH A MOVC A,@A+DPTR ;A=键码表的编码 CJNZ A,B,AGAN ;将B中值和键码的值比较
POP A
RL A
;如相等,序号乘2得分支表内偏移量
MOV DPL, A
MOV DPH, B
;DPTR为表中地址
CLR A
;A=0
JMP @A+DPTR
;JMP PRn
TAB: DW PR0,PR1,PR2,…,PRn
END
第 3 章 MCS-51单片机汇编语言程序设计
2. 利用转移指令表实现转移 例3-8 设有五个按键0,1,2,3,4,其编码分别
分析 将键码排成表,查B中的键编码在键码中的 序号N,另安排已个转移表,存放AJMP指令,因每 条AJMP指令占二字节,序号乘2即2N为转移表内的 偏移地址,利用JMP @A+DPTR实现多分支转移,程 序如下:
第 3 章 MCS-51单片机汇编语言程序设计
ORG 0000H
MOV A, 30H
JZ NEXT
;判断是否为零
ANL A, #80H ;判断符号位
JZ ED
;X>0转ED
MOV A, #05H ;X<0 完成X+5
ADD A, 30H
MOV 30H, A
SJMP ED
NEXT: MOV 30H, #20H ;X=0
第 3 章 MCS-51单片机汇编语言程序设计
ORG 0100H MOV A, R3
; R3->A
ADD A, A
; A*2
MOV DPTR, #TAB
PUSH A MOVC A, @A+DPTR MOV B, A
; 取地址表中的高字节 ;暂存于B
INC DPL
POP A MOVC A, @A+DPTR ;取地址表中的的字节
1) 查转移地址表。将转移地址列地址列成表格,将表格 的内容作转移的目标地址。
2) 查转移指令表。将转移到不同程序的转移指令列成 表,判断条件后查表,转到表中执行,下面用两个例子说明。
1. 利用转移地址表实现转移 例3-7 根据R3的内容转向对应的程序,处理程序的入口分 别为PR0-PRn(R3的内容<128,n<128)
程序如下:
1
x0
y
1
x0
0
x0
START: CJNE R0, #00H, SUL1 ; R0中的数与00比较不等转移
MOV R1, #00H
; 相等, R1← 0
SJMP SUL2
SUL1: JC NEG
; 两数不等, 若(R0)<0, 转向NEG
MOV R1, #01H ; (R0)>0, 则 R1←01H
LE EQU 31H
END
第 3 章 MCS-51单片机汇编语言程序设计
例3-6 设变量X以补码的形式存放在片内RAM的30H单元, 函数y与x 有如下关系式:
x
x>0
y= 20H x=0
x+5 x<0
试编制程序,根据X的大小求出Y并放回原单元。
分析 取出变量后先作取值范围的判断,对符号的判断可用 位操作类指令,也可用逻辑运算类指令实现,此处用逻辑运 算指令。流程见图3-1,程序如下:
编码程序结束
JPT: AJMP PR0 ;分支转移表
AJMP PR1
AJMP PR2
AJMP PR3
AJMP PR4
TAB: DB 3AH,47H,65H,70H,8BH ;键码表
Байду номын сангаасEND
第 3 章 MCS-51单片机汇编语言程序设计
3.5 循环程序设计
当程序中的某些指令需要反复执行多次时,采用 循环程序的方式,这样会使程序缩短,节省存储单元 (并不节省执行时间)。
SJMP SUL2
NEG: MOV R1, #0FFH ; (R0)<0, 则 R1←0FFH
SUL2: RET
第 3 章 MCS-51单片机汇编语言程序设计
图 3-2
第 3 章 MCS-51单片机汇编语言程序设计
有一类分支程序,它根据不同的输入条件或不同的运算 结果,转向不同的处理程序,称之为散转程序。这种程序通 常利用JMP @A+DPTR 间接转移指令实现。有如下两种方法:
第 3 章 MCS-51单片机汇编语言程序设计
3.4 分支程序设计
例3-5 在内部RAM 的40H和44H地址单元中,有2各无符号数,试编程比较 这两数的大小,将大数存于内部RAM的GR单元,小数存于LE地址单元,如 两数相等,则分别送入GR和LE地址单元。 分析 采用CJNE指令,既可以判断相等与否,还可以通过Cy标志判断大小。 程序如下:ORG 0000H
MOV DPTR,#JPT ;置分支表首址
JMP @A+DPTR ;即JMP JPT +2N,从而执行JPT+2N
中的AJMP PRn指令
第 3 章 MCS-51单片机汇编语言程序设计
AGAN: POP A
;不相等比较下一个
INC A
;序号加1
CJNE A,#5,NEXT
SJMP $
;键码查完还没有B中按键
ED: SJMP $
第 3 章 MCS-51单片机汇编语言程序设计 开始
(30H)→A
A=00H?
Y
N Y
A>00H?
N (20H)+05H→(30H)
20H→(30H)
结束
图3-1 例3-6程序流程图
第 3 章 MCS-51单片机汇编语言程序设计
加例 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:
MOV A,40H CJNE A,41H,NOEQ ;两数不等转NOEQ MOV GE,A ;两数相等,GR单元和LE单元均存次数
MOV LE,A
SJMP $
NOEQ: JC LESS
;A小则转LESS
MOV GR,A ;A大,大数存GR单元
MOV LE,41H ;小数存LE单元
SJMP $
GR EQU 30H
循环程序设计的一个主要问题是循环次数的控制,有 两种方式:第一种方法是先判断,再处理即先判断满 不满足循环条件,如不满足,就不循环,多以循环条 件控制。第二种方法是先处理再判断,即循环一遍后, 下一轮还需不需要进行,多以计循环次数控制。循环 可以有单重循环和多重循环,再多重循环中,内部循 环不能交叉,也不允许外循环跳入内循环。
第 3 章 MCS-51单片机汇编语言程序设计
ORG 0000H
MOV DPTR, #TAB ;置键码首址
MOV A, #0
;表的起始位的偏移量为0
NEXT: PUSH A MOVC A,@A+DPTR ;A=键码表的编码 CJNZ A,B,AGAN ;将B中值和键码的值比较
POP A
RL A
;如相等,序号乘2得分支表内偏移量
MOV DPL, A
MOV DPH, B
;DPTR为表中地址
CLR A
;A=0
JMP @A+DPTR
;JMP PRn
TAB: DW PR0,PR1,PR2,…,PRn
END
第 3 章 MCS-51单片机汇编语言程序设计
2. 利用转移指令表实现转移 例3-8 设有五个按键0,1,2,3,4,其编码分别