单片机基础(第3版)_第4章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2 汇编语言程序的基本结构形式
4.2.1 顺序程序结构
顺序结构 入口 语句 1 语句 2 语句 3
出口
例1:设双字节数 X 存在片内RAM 41H、40H单元,Y存在42H、 存在片内RAM 41H、40H单元 单元, 存在42H 42H、 43H单元, 43H单元,编程求 Z=X+Y,并存入片内RAM单元44H、45H、 Z=X+Y,并存入片内RAM单元44H 45H、 RAM单元44H、 单元 46H。 46H。 ADDS: ADDS:MOV A,40H A, ADD MOV MOV MOV MOV MOV RET A, A,42H 44H, 44H,A A, A,41H 45H, 45H,A A, A,#0 46H, 46H,A
内部RAM的40H ~ 4FH单元置初值 单元置初值#A0H ~ #AFH。 例7、将8031内部 、 内部 的 单元置初值 。 解: MOV R0,#40H MOV R2,#10H MOV A,#0A0H LOOP: MOV @R0,A INC R0 INC A DJNZ R2,LOOP ………
实际延时: 2) 实际延时:[1 + (501 + 2)×199] = 1000.98ms
单片机基础( 单片机基础(第3版)
第4章 80C51单片机汇编语言 80C51单片机汇编语言 程序设计
4.1 80C51 单片机汇编语言伪指令
1. 汇编起始 地址命令ORG(ORiGin) 2. 汇编终止命令END(END of assembly) 3. 赋值命令EQU(EQUate) 4. 定义字节命令DB(Define Byte) 5. 定义数据字命令DW(Define Word) 6. 定义存储区命令DS(Ddfine Stonage) 7. 位定义命令BIT
解: MOV A,30H , CJNE A,40H,LOOP1 , , SETB 7FH SJMP $ LOOP1: JC LOOP2 : MOV 20H,A , MOV 21H,40H , SJMP $ LOOP2: MOV 20H,40H : , MOV 21H,A , SJMP $
例4、设有两个16位无符号数NA,NB分别存放在8031单片机内 设有两个16位无符号数NA,NB分别存放在8031单片机内 16位无符号数NA 分别存放在8031 NB时 部RAM的40H、41H及50H、51H单元中,当NA > NB时,将内部 RAM的40H、41H及50H、51H单元中, 单元中 RAM的42H单元清0;否则,将该单元置成全1,试编程。 RAM的42H单元清0 否则,将该单元置成全1 试编程。 单元清
a-b Y = a+b 0) (a < 0 ) (a≥0) a≥0)
解:本题关键是判a是正数,还是负数;由ACC.7便知。 本题关键是判a是正数,还是负数; ACC.7便知。 便知
ORG 1000H BR: JB ACC.7,MINUS : , CLR C SUBB A,B , SJMP DONE MINUS: ADD A,B : , DONE: SJMP $ : END
MOV R0,#31H ;加数地址指针置初值 , LOOP: : ADD A,@R0 , JNC NEXT INC R2 NEXT: : INC R0 ;修改地址指针
DJNZ R7,LOOP ;判断转换结束否?未完继续 , 判断转换结束否? MOV 41H,R2 MOV 40H,A SJMP $ END
定时程序
例8、设8031使用 、 使用12MHz晶振,试设计延迟100ms的延时程序。 晶振,试设计延迟 的延时程序。 使用 晶振 的延时程序 解:延时程序的延迟时间就是该程序的执行时间,通常采用 延时程序的延迟时间就是该程序的执行时间, MOV和DJNZ二指令 二指令。 MOV和DJNZ二指令。 12× T = 12 / fosc = 12 / (12×106)= 1us ORG D OO :MOV :MOV 1000H R2, R2, , T TR T = 1us T = 1us 2T = 2us 2T = 2us 内 循 环 外 循 环
的一个数据块( 例6、将外 、将外RAM的一个数据块(首地址为 的一个数据块 首地址为DATA1)传送到内部 ) 数据RAM(首地址为 ),遇到传送的数据为零时停止 数据 (首地址为DATA2),遇到传送的数据为零时停止 ), 传送,试编程。 传送,试编程。 解: MOV R0,#DATA2 MOV DPTR,#DATA1 LOOP1: MOVX A,@DPTR JZ LOOP2 MOV @R0,A INC R0 INC DPTR SJMP LOOP1 LOOP2: SJMP LOOP2
连续16个单元中存放单字节无 例5、在片内 、在片内RAM30H~3FH连续 个单元中存放单字节无 ~ 连续 符号数。试编程求其和。 符号数。试编程求其和。
ORG 0030H MAIN: : MOV R7,#0EH ;循环计数初值(循环次数已知) , 循环计数初值(循环次数已知) MOV R2,#00H ;和数高字节 , MOV A,30H , ;取被加数
ADDC A,43H A,
AБайду номын сангаасDC A,#0 A,
4.2.2 分支程序结构
分支结构 入口
条件满足否?
Y 分支 1
N 分支 2
出口
例2、设a存放在累加器A中,b存放在寄存器B中,要求按下式 存放在累加器A 存放在寄存器B 计算Y 试编写程序。 计算Y值,并将结果Y存于累加器A 中,试编写程序。 并将结果Y存于累加器A
解:
ORG CMP: CMP:MOV CJNE MOV CJNE SJMP CMP1: CMP1:JC NHIGHE: NHIGHE:MOV SJMP HIGHE: HIGHE:MOV DONE: DONE:SJMP END
2000H A, A,50H A,40H, A,40H,CMP1 A, A,51H A,41H, A,41H,CMP1 NHIGHE
HIGHE 42H, 42H,#0FFH DONE 42H, 42H,#00H $
4.2.3 循环程序结构
循环结构 入口 处理 修改条件 条件满足否? Y 出口 N
循环程序包含四部分: 循环程序包含四部分: 循环计数器、变量置初值) 1、初始化部分 (循环计数器、变量置初值) 2、循环处理部分(主体,需要重复执行的部分) 循环处理部分(主体,需要重复执行的部分) 3、循环控制部分(修改地址指针、修改变量、检测 循环控制部分(修改地址指针、修改变量、 循环结束条件) 循环结束条件) 4、循环结束部分(对结果分析、处理,存放结果) 循环结束部分(对结果分析、处理,存放结果)
例3、比较内部 、比较内部RAM的30H和40H单元中的二个无符号数的大 的 和 单元中的二个无符号数的大 将大数存入20H单元,小数存入 单元, 单元, 小,将大数存入 单元 小数存入21H单元,若二数相等, 单元 若二数相等, 则使内RAM的第 的第127位置 。 位置1。 则使内 的第 位置
R: OO R:DJNZ DJNZ ND
, OO R R2, R2, OO
内循环延时: 内循环延时: CTR) 500us(假设) (1 + 2 × CTR)T = 500us(假设) 则CTR = 250 实际延时:[1 + 2 × 250] × 1us = 501us 实际延时:
外循环延时: +( 2T) 外循环延时:T +(501 + 2T)× CTS = 100ms = 100 000us 所以 , CTS = 198.8 取 199