单片机课程第4章 80C51汇编程序设计
时间:2025-07-08
时间:2025-07-08
第4章 汇编语言程序设计教学内容: 教学内容: 4.1 汇编语言程序设计过程 4.2 基本程序结构 4.3 子程序及其调用 4.4 简单 设备的并口直接驱动示例 简单I/O设备的并口直接驱动示例
教学目的:1、掌握80C51汇编语言程序设计步骤 2、掌握80C51常用伪指令的使用方法 3、熟悉几种基本的程序结构和简单I/O程序设计方法
教学重点:1、 源程序形成目标程序的步骤 2、 伪指令与单片机指令的本质区别 3、 分支、循环、子程序及按键、LED显示程序的设计
教学难点:程序的设计及实现
4.1 汇编语言程序设计过程4.1.1 汇编语言程序设计过程 1.分析问题,确定算法或解题思路 2.画流程图 3.编写程序 4 .调试和修改
注意:程序语言的选择汇编语言,生成的目标程序占内存空间少、运行速 度快,具有效率高、实时性强。 高级语言,对系统的功能描述与实现简单, 高级语言,对系统的功能描述与实现简单,程序阅 读、修改和移植方便,适合于编写复杂的程序。 修改和移植方便,适合于编写复杂的程序。
流程描述流程图符号 “超级循环”框 架
4.1.2 程序编制的方法和技巧 强化模块观念程序模块(主程序模块、各种子程序模块) 模块化优点:分块设计、便于阅读、调试方便
采用循环和子程序使程序占用空间减少、结构清晰 循环初值和结束条件,避免“死机”现象 子程序的现场保护(注意栈平衡、寄存器内容) 对中断子程序还有注意保护PSW的内容
4.1.3 源程序的编辑和汇编目标程序的产生过程如下图:
4.1.3.1 源程序的编辑和汇编 源程序的编辑依据汇编语言规则 用好伪指令 符号不用中文 SJMP $ 用于调试 以 .ASM存盘ORG LJMP ORG MAIN:MOV MOV MOV LOOP:MOV INC DJNZ SJMP END 0000H MAIN 0040H R7,#16 R0,#60H A,#55H @R0,A R0 R7,LOOP $
源程序的汇编汇编源程序转为目标程序的过程叫汇编 汇编通常在Windows下的集成开发环境完成 用A51.EXE汇编生成.OBJ、.LIB及.LST
目标程序的连接.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址 目标文件 绝对地址目标文件可以用于仿真器调试 调试无误的目标文件用OH51.EXE转换为.HEX文件 .HEX文件经编程器写入单片机存储器
4.2 基本程序结构(无分支、无循环) 4.2.1 顺序程序
【例4-1】片内RAM的21H单元 片内RAM的21H单元 RAM 存放一个十进制数据十位的 ASCII码,22H单元存放该数 ASCII码 22H单元存放该数 据个位的ASCII码 据个位的ASCII码。编写程序 ASCII 将该数据转换成压缩BCD码存 将该数据转换成压缩BCD码存 BCD 放在20H单元。 放在20H单元。 20H单元
ORG LJMP ORG START:MOV ANL SWAP MOV MOV ANL ORL SJMP END
0000H START 0040H A,21H A,#0FH A 20H,A A,22H A,#0FH 20H,A $
;取十位ASCII码 ;取十
位ASCII码 取十位ASCII ;保留低半字节 ;保留低半字节 ;移至高半字节 ;移至高半字节 ;存于20H单元 存于20H ;存于20H单元 ;取个位ASCII码 取个位ASCII ;取个位ASCII码 ;保留低半字节 ;保留低半字节 ;合并到结果单元 ;合并到结果单元
4.2.2 分支程序 (单分支、双分支、多分支)【例4-2】设变量x以补码的 设变量x 形式存放在片内RAM 30H单 RAM的 形式存放在片内RAM的30H单 变量y 的关系是: 元,变量y与x的关系是: 大于0 当x大于0时,y=x; x=0时 当x=0时,y=20H; 小于0 ,y=x+5。 当x小于0时,y=x+5。 编制程序,根据x的大小求y 编制程序,根据x的大小求y并 送回原单元。 送回原单元。
ORG LJMP ORG START:MOV JZ ANL JZ MOV ADD MOV SJMP NEXT:MOV DONE:SJMP END
0000H START 0040H A,30H NEXT A,#80H DONE A,#05H A,30H 30H,A DONE 30H,#20H DONE
;取x至累加器 ;取 0,转 ;x = 0,转NEXT ;否 ;否,保留符号位 >0,转结束 ;x >0,转结束 <0处理 ;x <0处理 ;X+05H送 ;X+05H送Y 0,20H送 ;x = 0,20H送Y
【例4-3】根据R7的内容x(转移序号)转向相应的处理程序。 根据R7的内容x 转移序号)转向相应的处理程序。 R7的内容 R7内容为 内容为0 对应的处理程序入口地址分别为PP0 PP4。 PP0~ 设R7内容为0~4,对应的处理程序入口地址分别为PP0~PP4。
ORG 0000H LJMP START ORG 0040H
START:MOV ACALL AJMP JPNUM:MOV MOV ADD MOV MOVC XCH INC MOVC MOV MOV CLR JMP
R7,#3 JPNUM START DPTR,#TAB A,R7 A,R7 R3,A A,@A+DPTR A,R3 A A,@A+DPTR DPL,A DPH,R3 A @A+DPTR
;以转移序号3 ;以转移序号3为例 以转移序号
;置分支入口地址表首址 ;置分支入口地址表首址 ;乘2,调整偏移量 ;取地址高字节,暂存于R3 ;取地址高字节,暂存于R3 取地址高字节
;取地址低字节 ;取地址低字节 ;处理程序入口地址低 位送DPL 处理程序入口地址低8 ;处理程序入口地址低8位送DPL ;处理程序入口地址高 位送DPH 处理程序入口地址高8 ;处理程序入口地址高8位送DPH
TAB:DW DW DW DW DW PP0:MOV RET PP1:MOV RET PP2:MOV RET PP3:MOV RET PP4:MOV RET END
PP0 PP1 PP2 PP3 PP4 30H,#0 30H,#1 30H,#2 30H,#3 30H,#4
;转移序号为0 ;转移序号为0时,置功能号“0”于30H单元 转移序号为 置功能号“ 于30H单元 ;转移序号为1时,置功能号“1”于30H单元 ;转移序号为1 转移序号为 置功能号“ 于30H单元 ;转移序号为2 ;转移序号为2时,置功能号“2”于30H单元 转移序号为 置功能号“ 于30H单元 ;转移序号为3时,置功能号“3”于30H单元 转移序号为3 置功能号“ 于30H单元 ;转移序号为4时,置功能号“4”于30H单元 ;转移序号为4 置功能号“ 于30H单元 转移序号为
(2种:先执行,后判断;先判断,后执行) 4.2.3 循环程序 【例4-4】将内部RAM的30H至3FH单元初始化 …… 此处隐藏:1108字,全部文档内容请下载后查看。喜欢就下载吧 ……