单片机原理与应用系统设计单片机程序设计基础

上传人:乐*** 文档编号:114797699 上传时间:2019-11-12 格式:PPT 页数:99 大小:723KB
返回 下载 相关 举报
单片机原理与应用系统设计单片机程序设计基础_第1页
第1页 / 共99页
单片机原理与应用系统设计单片机程序设计基础_第2页
第2页 / 共99页
单片机原理与应用系统设计单片机程序设计基础_第3页
第3页 / 共99页
单片机原理与应用系统设计单片机程序设计基础_第4页
第4页 / 共99页
单片机原理与应用系统设计单片机程序设计基础_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《单片机原理与应用系统设计单片机程序设计基础》由会员分享,可在线阅读,更多相关《单片机原理与应用系统设计单片机程序设计基础(99页珍藏版)》请在金锄头文库上搜索。

1、2019/11/12,1,第4章 单片机程序设计基础,单片机原理与应用系统设计 电子工业出版社 , 2009.7 欧伟明 何静 凌云 刘剑 等编著,2019/11/12,2,本章主要内容,汇编语言的特点及语句格式 汇编语言程序的基本结构 汇编语言的伪指令与汇编 汇编语言程序设计举例 C51高级语言程序设计,2019/11/12,3,4.1 汇编语言的特点及语句格式,汇编语言的特点 汇编语言的语句格式,2019/11/12,4,4.1.1 汇编语言的特点,助记符指令与机器指令一一对应,所以用汇编语言编写的程序占用存储空间小,运行速度快,可编写出最优化程序 汇编语言是面向计算机的,所以汇编语言的程

2、序设计人员必须对计算机硬件有相当深入的了解。 汇编语言能直接访问存储器和接口电路,也能处理中断,所以汇编语言能直接管理和控制硬件设备。 各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用,所以汇编语言缺乏通用性,程序不易移植。,2019/11/12,5,4.1.2 汇编语言的语句格式,常用的字段分界符有冒号“:”、逗号“,”和分号“;”。请注意,字段分界符要在英文输入状态下键入。 操作码是汇编语句格式中唯一不能空缺的部分,用于规定语句执行的操作内容。 操作数用于表明指令操作的数据或数据存放的地址。操作数分为目的操作数和源操作数。操作数可以是空白 。 注释不属于语句的功能部分,只是对

3、语句的解释说明。,标号: 操作码 目的操作数, 源操作数 ;注释,2019/11/12,6,4.2 汇编语言程序的基本结构,3种基本形式: 顺序结构 分支结构 循环结构,2019/11/12,7,4.2.1 顺序结构例程,START: MOV R0, #30H ; 被加数地址送R0 MOV R1, #33H ; 加数地址送R1 MOV A, R0 ADD A, R1 ; 低字节相加 MOV R0, A ; 保存低字节结果 INC R0 INC R1 MOV A, R0 ADDC A, R1 ; 中间字节相加 MOV R0, A ; 保存中间相加结果 INC R0 INC R1 MOV A, R

4、0 ADDC A, R1 ; 高字节相加 MOV R0, A ; 保存高字节相加结果 CLR A ADDC A, #00H MOV 00H, A ; 保存进位 RET,2019/11/12,8,4.2.2 分支结构,可分成单分支、双分支和多分支几种 :,条件成立?,程序段A,下条指令,条件成立?,程序段A,程序段B,K=0?,K=1?,K=2?,Y,分支0,Y,分支1,Y,分支2,N,N,N,2019/11/12,9,4.2.2 分支结构例程,ORG 0100H START: CLR C MOV DPTR, #2000H ; 设置数据指针 MOVX A, DPTR ; 取第一个数 MOV R2

5、, A ; 暂存于R2 INC DPTR ; 数据指针加1 MOVX A, DPTR ; 取第二个数 SUBB A, R2 ; 两数比较 JNC LOOP1 ; 第二个数大则转LOOP1 XCH A, R2 ; 第一个数大则交换 LOOP0: INC DPTR MOVX DPTR, A ; 存大数 RET LOOP1: MOVX A, DPTR SJMP LOOP0,2019/11/12,10,4.2.3 循环结构,有先执行后判断和先判断后执行两种结构 :,2019/11/12,11,4.2.3 循环结构例程,START: MOV R0, #20H ; R0指向片内RAM数据串首地址 MOV

6、DPTR, #2000H ; DPTR指向片外RAM数据串首地址 MOV R7, #32 ; 最大数据长度32Bytes LOOP0: MOV A, R0 XRL A, #24H ; 判断是否为字符$ JZ LOOP1 MOV A, R0 MOVX DPTR, A INC R0 INC DPTR DJNZ R7, LOOP0 LOOP1: RET,2019/11/12,12,程序中数据的表示形式,二进制数,末尾以字母 B 标识 十进制数,末尾以字母 D 标识或将字母D省略。 十六进制数,末尾以字母 H 标识。但应注意以字母AF开头时应在其前面加上数字“0”。在C51语言程序中,前面加“0x”标

7、识。 ASCII码,以单引号标识。如:AB,1245,2019/11/12,13,4.3 汇编语言的伪指令与汇编,伪指令是由程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。只有在汇编前的源程序中才有伪指令,汇编后得到的目标程序(机器码)中没有与伪指令相应的机器代码。汇编程序能识别并对汇编过程进行某种控制的汇编命令。无对应的可执行目标码。 用指令系统编写的汇编语言程序称为源程序,必须将其翻译成机器码(称为目标程序),单片机方可执行。源程序转换成目标程序的过程,是由通用计算机执行一种特定的翻译程序(称为汇编程序)自动完成的,这个翻译过程称为汇编。,2019/11/12,14,4.3.1

8、 伪指令,起始地址设定 ORG 表达式 向汇编程序说明下面紧接的程序段或数据段存放的起始地址。 表达式常为16进制地址,可已定义的标号地址。 源程序的开始,要设置一条ORG伪指令来指定该程序在存储器中存放的起始位置。 省略ORG,则该程序段从0000H单元开始存放。 可以多次使用ORG伪指令,但要求地址值由小到大依序排列,不允许空间重叠。,2019/11/12,15,4.3.1 伪指令,汇编结束 END 汇编程序遇到END伪指令后即结束汇编,2019/11/12,16,4.3.1 伪指令,EQU赋值命令 字符名称 EQU 赋值项 赋值项可以是常数、地址、标号或表达式。其值为8bits或16bi

9、ts二进制数。赋值后的字符名称可以作立即数使用,也可以作地址使用。,2019/11/12,17,4.3.1 伪指令,DB 定义字节命令 标号: DB 8bits数据表 1. 8bits数据就是字节数据,可以是1字节常数或字符,或用单引号括起来的字符串。例如: DB How are you! 2. 把字符串中的字符按其ASCII码存于连续的程序存储器单元中 。,2019/11/12,18,4.3.1 伪指令,DW 定义字命令 标号: DW 16bits数据表 存放时,数据字的高8bits在前(低地址),低8bits在后(高地址)。例如: DW AB ; 存入数据为41H、42H DW A ; 存

10、入数据为00H、41H,2019/11/12,19,4.3.1 伪指令,BIT 位定义命令 字符名称 BIT 位地址 位地址可以是绝对地址,也可以是符号地址(即位符号名称)。例如: SDA BIT P1.0 把P1.0的位地址赋给变量SDA。在其后的编程中,SDA就可以作为位地址P1.0使用。,2019/11/12,20,4.3.2 汇编语言的汇编,1. 用一种计算机的汇编程序去汇编另一种计算机的源程序的汇编过程,被称为交叉汇编。 2. 单片机的源程序要经过交叉汇编才能获得目标程序。 3. 单片机源程序的编辑和交叉汇编,可以在单片机开发环境(如Keil Vision 2)中完成 。,2019/

11、11/12,21,子程序及其调用,子程序的调用 对于通用性的问题,例如:数值转换、数值计算等,往往要进行多次。宜将其设计成子程序。,1. 子程序在执行时需要由其它程序来调用 2. 执行完后又需要把执行流程返回到调用的主程序。,调用时注意: 一是现场的保护和恢复; 二是主程序与子程序的参数传递。,2019/11/12,22,现场保护与恢复,子程序经常用到R0R7、A、DPTR,以及PSW等。而这些单元中的内容在调用结束后的主程序中仍有用,所以需要进行保护(即现场保护)。,在执行完子程序,返回继续执行主程序前恢复其原内容,称为现场恢复。保护与恢复的方法有以下两种: 1. 在主程序中实现; 2. 在

12、子程序中实现。,2019/11/12,23,参数传递,1. 利用累加器或寄存器。 2. 先把子程序需要的数据送入A或指定的工作寄存器中。 3. 当子程序执行时,可从指定的单元中取得数据,执行运算。 子程序也可以用同样的方法把结果传送给主程序。,传递参数的方法有三种:,2019/11/12,24,4.4 汇编语言程序设计举例,算术运算程序 数制转换程序 定时程序 查表程序 数据极值查找程序,单片机程序设计举例,宜在软件开发环境(如Keil Vision2 )中进行讲解。,2019/11/12,25,4.4.1 算术运算程序,多字节数的加、减运算 注意:合理地运用进位(借位)标志 不带符号的多字节

13、数加法程序,例4.4 设有两个4字节的二进制数,分别存放在片内以30H和50H为起始地址的单元中(先存放低字节)。求这两个数的和,并将结果存入以30H为起始地址的单元中。,2019/11/12,26,4.4.1 算术运算程序,多字节数的加、减运算 注意:合理地运用进位(借位)标志 不带符号的两个多字节数的减法程序,例4.5 设有两个N字节无符号数,分别存放在片内RAM单元中,低字节在前,高字节在后。由R0指定被减数单元地址,由R1指定减数单元地址,要求将差值存入原被减数单元中,假定最高字节没有借位。,2019/11/12,27,不带符号的两个多字节数的减法程序:,CLR C MOV R2, #

14、N ; 设定N字节 LOOP: MOV A, R0 ; 从低位取出被减数1个字节 SUBB A, R1 ; 两位数相减 MOV R0, A ; 保存差 INC R0 ; 修改指针 INC R1 DJNZ R2, LOOP ; 没减完则继续 RET,2019/11/12,28,4.4.1 算术运算程序,多字节数的乘法 、除法运算 双字节无符号数乘法程序,例4.7 假设被乘数存放于R6和R7中,乘数存放于R4和R5中,要求乘积存放于40H43H单元中,低字节在前。,2019/11/12,29,4.4.1 算术运算程序,多字节数的乘法 、除法运算 计算机除法运算采用“左移被除数相除法” 双字节无符号

15、数除法程序,例4.8 假设被除数存放于40H、41H中,除数存放于44H、45H中,要求将商存放于40H、41H单元中,余数存放于42H、43H单元中,低字节在前。,2019/11/12,30,4.4.2 数制转换程序,十六进制数转换成ASCII码的程序,例4.9 在片内RAM 20H单元中,存放有2位十六进制数,将其转换成ASCII码,并存放于21H和22H两个单元中。程序如下。,2019/11/12,31,MOV SP, #3FH TRAN: PUSH 20H ; 十六进制数进栈 LCALL HASC ; 调用转换子程序 POP 21H ; 第一位转换结果送21H单元 SWAP A ; 高

16、低半字节交换 PUSH ACC ; 交换后的十六进制数进栈 LCALL HASC ; POP 22H ; 第二位转换结果送22H单元 RET HASC: DEC SP ; 跨过断点保护对象 DEC SP POP ACC ; 弹出转换数据 ANL A, #0FH ; 屏蔽高4位 ADD A, #7 ; 修改变址寄存器内容 MOVC A, A+PC ; 查表 PUSH ACC ; 查表结果进栈 INC SP ; 修改堆栈指针回到断点保护内容 INC SP RET ASCTAB: DB 0123456789ABCDEF ; ASCII码表,2019/11/12,32,4.4.2 数制转换程序,ASCII码转换成十六进制数的程序,例4.10 将片外RAM 30H3FH单元中的ASCII码依次转换成十六进制数,并存入片内RAM的60H67H单元中。程序如下:,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号