第3章指令系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Back
LOGO
若将30H单元BCD码转换成ASCII码,利用 SUB1子程序。
ORG MAIN: MOV LCALL MOV SJMP
2000H 40H, 40H,30H SUB1 30H, 30H,40H $
LOGO
五、 代码转换程序设计举例
中存有一个BCD BCD码 编一子程序将其转换为ASCII ASCII码 例1:R1中存有一个BCD码,编一子程序将其转换为ASCII码 , 存入片外RAM1000H单元中去。 直接转换) RAM1000 存入片外RAM1000H单元中去。(直接转换)
Back
LOGO
二、 分支程序
例 1 : 片内 RAM Leabharlann BaiduNE 和 TWO 两个单元中存有两个无符号 片内RAM ONE和TWO两个单元中存有两个无符号 将两个数中的小者存入RES单元。程序如下: RES单元 数,将两个数中的小者存入RES单元。程序如下:
ORG DATA DATA DATA MOV START: CJNE SJMP BIG: BIG: JC MOV STORE: STORE:MOV SJMP 解: ONE TWO RES 1000H 定义ONE 22H ;定义ONE 定义TWO 23H ;定义TWO 定义RES 30H ;定义RES A,ONE TWO, A,TWO,BIG STORE STORE A,TWO RES, RES,A $
解:程序如下: 程序如下: ORG NUM DATA STRING DATA START: CLR MOV LOOP: LOOP: CJNE SJMP NEXT: NEXT: INC INC SJMP COMP: COMP: MOV SJMP 0800H 20H 21H A R0, R0,#STRING @R0, @R0,#24H,NEXT COMP A R0 LOOP NUM, NUM,A $
查表注意到执行DJNZ指令要用两个机器周期 指令要用两个机器周期 查表注意到执行 执行MOV Rn,#data要一个机器周期 执行 要一个机器周期 执行MOV dir,#data要两个机器周期 执行 要两个机器周期 因此可以精确算出程序执行时间。 因此可以精确算出程序执行时间。
例:以机器周期为单位,计算以下程序的执行时间。 以机器周期为单位,计算以下程序的执行时间。 ;1个机器周期 MOV R7,#64H ;1 LOOP: MOV R6,#0FAH ;250*2=500 DJNZ R6,$ ;(2), 503*100=50300 DJNZ R7,LOOP ;2 RET 共50303个机器周期
0800H R0, R0,#20H DPTR,#1000H R7,#0AH A,@R0 @DPTR,A R0 DPTR R7,LOOP $
Back
LOGO
三 、循环程序
例2:统计字串长度。内存从STRING开始有一字串,该字 统计字串长度。内存从STRING开始有一字串, STRING开始有一字串 串以$(ASCII码为24H)结束,试统计该字串长度, 码为24H)结束 串以$(ASCII码为24H)结束,试统计该字串长度,结果 存于NUM NUM单元中 存于NUM单元中
解: START: START: ORG MOV MOV ANL MOV INC MOV SWAP ANL MOV SJMP 2000H R0, R0,#21H A,20H A,#0FH @R0, @R0,A R0 A,20H A, A,#0FH @R0, @R0,A $ ;21H→R0 ;(20H 20H) ;(20H)→A ;A∧#0FH→A ;(A R0) ;(A)→(R0) ;R0+1(R0 ;(20H 20H) ;(20H)→A ;A0~3 ← →A4~7 ;A∧#0FH→A ;(A R0) ;(A)→(R0)
Back
LOGO
六 、运算类程序设计举例
例1:片内RAM30H单元开始有10个字节的二进制数。编一 片内RAM30H单元开始有10个字节的二进制数。 RAM30H单元开始有10个字节的二进制数 子程序,求它们的和。( <256)将和存入20H单元中。 。(和 20H单元中 子程序,求它们的和。(和<256)将和存入20H单元中。
Back
LOGO
3.4
思考题与习题
1. 简述下列基本概念: 指令、指令系统、机器语言、汇编语言、高级 语言。 2. 什么是计算机的指令和指令系统? 3. 简述89C51汇编指令格式。 4. 简述89C51的寻址方式和所能涉及的寻址空间。 5. 要访问特殊功能寄存器和片外数据存储器,应采用哪些寻址方式?
Back
LOGO
四、 子程序设计举例
用查表法编一子程序, 40H单元中的BCD BCD码转换成 例1:用查表法编一子程序,将40H单元中的BCD码转换成 ASCII码 ASCII码。 入口:待转换数在(40H) 入口:待转换数在(40H 出口:转换后的数(40H) 出口:转换后的数(40H
解: ORG TAB: DB SUB1: SUB1: MOV MOV MOVC MOV RET 1000H 30H,31H,32H,33H,34H,35H,36H,37H, 38H,39H A,40H DPTR,#TAB DPTR, A,@A+DPTR 40H,A
单片机原理 及接口技术
第3 章
89C51单片机指 89C51单片机指 令系统
LOGO
LOGO
程序设计举例
一 二 三 四 五 六
简单程序设计举例 分支程序 循环程序 子程序设计举例 代码转换程序设计举例 运算类程序设计举例
BACK
LOGO
一、 简单程序设计举例
例1 :拆字。将片内RAM 20H单元的内容拆成两段,每段 拆字。将片内RAM 20H单元的内容拆成两段 单元的内容拆成两段, 四位。并将它们分别存入21H 22H单元中 程序如下: 21H与 单元中。 四位。并将它们分别存入21H与22H单元中。程序如下:
LOGO 6. 在89C51片内 片内RAM中,已知 片内 中 已知(30H)=38H, , (38H)=40H,(40H)=48H,(48H)=90H。请 , , 。 分析下面各是什么指令, 分析下面各是什么指令,说明源操作数的寻址方式以 及按顺序执行每条指令后的结果。 及按顺序执行每条指令后的结果。
解:方法1 方法1 ORG ASUB1: MOV CLR MOV CLR LOOP: LOOP: ADDC INC DJNZ MOV RET 方法2 方法2 1000H R0, R0,#30H A R7, R7,#10 C A,@R0 R0 R7, R7,LOOP 20H, 20H,A ORG ASUB2: MOV MOV MOV CLR LOOP: LOOP: INC ADDC DJNZ MOV RET 2000H R0, R0,#30H A,@R0 R7, R7,#09 C R0 A,@R0 R7, R7,LOOP 20H, 20H,A
Back
LOGO
问题: 问题:将以上程序的第二句 改为 则 LOOP: MOV R6,#0FAH
LOOP: MOV R6,#0 DJNZ R6,$ 语句会执行多少次? 语句会执行多少次?
要实现延时功能,有时还需要用到空操作指令: 要实现延时功能,有时还需要用到空操作指令:
关 键 字 NOP
功能简述 空操作
LOGO
例2:编写将30H,31H单元中的两字节二进制数乘 以2的程序(积小于65536)
解: ORG MSUB: CLR MOV RLC MOV MOV RLC MOV RET 1000H C A,30H A 30H, 30H,A A,31H A 31H, 31H,A
Back
LOGO
七、延时程序设计举例
字节数
机器周期
1
1
空操作指令不进行任何操作, 空操作指令不进行任何操作,但它在程序存储器中占了一个字节 的位置,执行时也需要占用一个机器周期的时间。 的位置,执行时也需要占用一个机器周期的时间。
LOGO
例:设单片机晶振频率6M,编写一段程序,大约延时1秒钟。分析: 由于DJNZ指令最多的循环次数是256次,而1S÷256÷256 约等于 15µS,晶振频率6MHZ,则1个机器周期为2µS,我们把内循环定为8 个机器周期16µS。则16µS×250×250=1S。
Back
LOGO
三 、循环程序
例 1 : 数据块传送。 将片内RAM 20H单元开始的10 个字节, 数据块传送。 将片内RAM 20H 单元开始的10个字节, 10 个字节 传送到片外RAM 1000H单元开始的单元中去。 传送到片外RAM 1000H单元开始的单元中去。
解:程序如下: 程序如下: ORG START: MOV MOV MOV LOOP: MOV MOVX INC INC DJNZ SJMP
Delay: LOOP: MOV R7,#0FAH MOV R6,#0FAH
LOOP1: NOP NOP NOP NOP NOP NOP DJNZ R6,LOOP1 DJNZ R7,LOOP
实际执行时间为: [(6+2)×250+2+1]×250+1=500751个机器周期,需1.001502秒。
LOGO
解: ORG BAS1: MOV ADD MOV MOVX RET 0100H A,R1 A,30H DPTR, DPTR,#1000H @DPTR, @DPTR,A
LOGO
例2:片外RAM2000H单元中有一BCD码,编一 子程序将其转换成ASCII码。
ORG BAS2: MOV MOVX ADD MOVX RET 0100H DPTR, DPTR,#2000H A,@DPTR A,#30H @DPTR,A
MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV A,40H , R0,A , P1,#0F0H , @R0,30H DPTR,#3848H , 40H,38H , R0,30H , P0,R0 , 18H,#30H , A,@R0 , P2,P1 ,
LOGO 7. 对89C51片内 片内RAM的高 的高128字节的地址空间寻址要 片内 的高 字节的地址空间寻址要 注意什么? 注意什么 8. 指出下列指令的本质区别 指出下列指令的本质区别? MOV A,data , MOV A,#data MOV data1,data2 MOV 74H,#78H , 9. 设R0的内容为 的内容为32H,A的内容为 的内容为48H,片内 的内容为 , 的内容为 ,片内RAM的 的 32H单元内容为 单元内容为80H,40H单元内容为 单元内容为08H。请指 单元内容为 , 单元内容为 。 出在执行下列程序段后上述各单元内容的变化。 出在执行下列程序段后上述各单元内容的变化。 MOV A,@R0 MOV @R0,40H , MOV 40H,A , MOV R0,#35H ,
例2:编写延时4ms的子程序。设晶振为 12MHZ。 微妙( 解:晶振为12MHZ,则1个机器周期为1微妙(1µs
),
一条DJNZ指令为2个机器周期,则执行该指令2000 个机器周期, 次为4ms 2000=20*100
ORG Delay: DLY1:MOV DLY1: MOV DLY2:DJNZ DLY2: DJNZ DJNZ RET 1000H MOV R6,#20 R7,#100 R7,DLAY2 R6,DLY1
LOGO
例2:16位数求补。设16位二进制数在R1R0中,求补结 位数求补。 果存于R3R2中。
解: ORG START: MOV CPL ADD MOV MOV CPL ADDC MOV SJMP 1000H A,R0 A A,#01H R2, R2,A A,R1 A A,#00H R3, R3,A $
练习: 练习: 1.将片外RAM 2000H单元开 始的20个字节,传送到片 内RAM 30H单元开始的单元 中去。 2.将片内RAM 20H单元开始 的10个字节,传送到片内 RAM 30H单元开始的单元中 去。 3.将片内RAM BK1单元开始 的COUNT个字节,传送到片 外RAM BK2单元开始的单元 中去。