单片机原理与应用.

Slides:



Advertisements
Similar presentations
第7章 AT89S51单片机的 串行口 1.
Advertisements

6 单片机的中断与定时系统 I/O设备必须通过I/O接口与计算机连接。 I/O接口的功能: 1.速度匹配: 锁存数据、传送联络信号。
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
5-3 8x8矩陣LED控制實習.
第四章 指令系统及汇编语言程序设计.
8051 指令.
第四章 指令系统及汇编语言程序设计.
本章分为四节,主要介绍: 4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本程序结构 4.4 常用程序举例.
项目2 2个LED发光二极管控制 知识与能力目标 熟悉单片机的I/O口功能与特性。
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
本章小结 C51单片机指令系统概述 C51单片机寻址方式 C51单片机指令系统
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第9章 串行扩展技术 (课时:6学时).
第9章 数模转换器与模数转换器 本章学习目标 了解数模转换器的工作原理及性能指标 掌握模数转换器的应用 掌握数模转换器的应用.
第2章 MCS-51单片机指令系统与汇编语言程序设计
報告者:朱耿育 紀翔舜 組員:詹以群 張永傑 指導老師:梁新潁
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
第二部分 微机原理 第4章 汇编语言 程序设计 主讲教师:喻红.
单片机应用技术 项目一 循环彩灯装置 第6讲 指令功能及汇编语言程序设计(一) 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
6.3 定时器/计数器的应用 初始化 初始化的内容如下:
第8章 模拟接口 8.1 模拟接口概述 8.2 DAC及其接口 8.3 ADC及其接口.
第二部分 微机原理 第3章 MCS-51的 指令系统 主讲教师:喻红.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第14章 单片机应用系统抗干扰 与可靠性设计 1.
第二部分 微机原理 第8章 单片机的 定时/计数器 主讲教师:喻红.
第6章 MCS - 51单片机内部定时器/ 计数器 及串行接口 6.1 定时器/计数器的结构及工作原理 6.2 方式和控制寄存器
單晶片微電腦控制實習 使用計時中斷作走馬燈 計時器的基礎實習 國立大甲高工 電機科 2018年11月21日
本章分为三节,主要介绍: 6.1 计算机串行通信基础 C51的串行口 6.3 单片机串行口应用举例.
第七章 MCS-51系统扩展 一、程序存储器扩展
第3章 AT89C51指令系统 3.1基本概念内部结构和引脚功能 指令、指令系统、机器代码
逻辑运算类指令 包括与、或、非、异或、清0及移位等共24条;一般不影响PSW中的标志位;助记符有:ANL、ORL、XRL、RL、RLC、RR、RRC、CLR和CPL共9种。 一、逻辑与指令 ANL A,Rn ;A←(A)∧( Rn) ANL A,direct;A←(A)∧(direct)
单片机原理及应用 MCS-51系列单片机的基本硬件结构 MCS-51指令系统 MCS-51单片机的系统扩展与应用.
第七章 MCS-51并行口的扩展 MCS51单片机内部有4个并行口,当内部并行口不够用时可以外扩并行口芯片。可外扩的并行口芯片很多,分成2类:不可编程的并行口芯片(74LS3734和74LS245)和可编程的并行口芯片(8255)。 7.1 不可编程并行口芯片的扩展 7.2 可编程并行口芯片的扩展.
4.A/D与D/A转换器 1).DAC0832与MCS-51接口
第2章 单片机的结构原理与 简单应用 (课时:10学时).
第八章 MCS-51与数码显示器和键盘的接口 一、MCS-51与数码显示器接口 数码显示器是单片机应用产品中最常用的廉价的输 出设备,它由8个发光二极管按一定规律排列而成, 当某一发光二极管导通时,则会被点亮,控制不同 组合的二极管导通,就能显示出各种字符。 1.显示器的结构.
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
第三章 指令系统.
第3章 指令系统及程序设计举例 3.1 指令格式与寻址方式 一、指令格式 1. 指令 操作码 目标操作数,源操作数
第10章 综合实训 课题一 水温控制系统设计 一、实训目的 二、课题要求 熟悉常用温度传感器AD590的特性及接口电路的设计方法;
第8章 MCS-51串行口 8.1 串行口及其通信方式 8.2 IBM-PC系列机与 单片机 的通信技术.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第2章 单片机系统组成原理 2.1 MCS-51单片机组成原理 2.2 单片机复位电路设计 2.3 MCS-51存储器配置
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
单元五 MCS-51单片机内部资源 5.1 任务九 单片机计数并显示 5.2 任务十 单片机流水灯控制 5.3 任务十一 两台单片机数据互传
本 章 重 点 单片机的结构特点 单片机的存储器特点 I/O端口的特点 CPU时序 课时安排:3个课时.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第四章 指令系统及汇编语言程序设计.
第4章 中断技术 一个完整的微机系统是由硬件和软件共同构成的。微机系统的硬件有CPU、存储器和I/O口,外设组成。CPU与存储器之间的信息交换比较简单,而CPU与外设之间进行信息交换之前必须确定外设是否准备好,即选择I/O传送方式。I/O传送方式有4种:无条件、查询、中断和DMA。本章学习中断传送方式的有关内容。
数码管数字时钟电路的设计 1. 系统硬件电路的设计
第3章 MCS-51指令系统 介绍MCS—51系列单片机的寻址方式 介绍MCS—51系列单片机的指令系统
第4章 80C51系列指令系统 教学目的:熟悉80C51系列单片机的寻址方式及 每一种寻址方式对应的寻址空间;掌 握每一条指令功能。
本章内容 MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析
5-6 串列埠模式0輸出埠擴充實習.
CPU中的专用寄存器(SFR) 一、累加器Acc 二、通用寄存器B 三、程序计数器PC 四、堆栈指针SP 五、数据指针DPTR
3.1 指令系统简介 一、几个概念 二、汇编语言指令格式 三、指令的分类 四、指令的符号说明 主讲:吴政江 下一页.
第三章 计算机系统的组成与工作原理.
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
四、手工汇编 完成汇编的方法有两种:手工汇编和汇编程序汇编 1.手工汇编步骤 A
单片机原理与应用.
单片机原理及应用 (C语言版) 第8章 单片机系统扩展
简单芯片扩展I/O接口 8155可编程接口芯片及其使用 键盘及显示器接口设计 A/D和D/A转换接口技术
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
第二章 MCS-51单片机程序设计 第一章 8086程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第1章 微型计算机基础.
Presentation transcript:

单片机原理与应用

第4章 汇编语言程序设计

4.1 80C51汇编语言程序设计基础 机器语言 汇编语言 高级语言 汇编语言与高级语言相比具有以下优点: 1)占用的内存单元和CPU资源少 第4章 汇编语言程序设计 4.1 80C51汇编语言程序设计基础 机器语言 汇编语言 高级语言 汇编语言与高级语言相比具有以下优点: 1)占用的内存单元和CPU资源少 (2)程序简短,执行速度快 (3)可直接调用计算机的全部资源,并可有效地利用计算机的专有特性 (4)能难确地掌握指令的执行时间,适用于实时控制系统。

4.1 80C51汇编语言程序设计基础 汇编语言具有以下几个特点: 第4章 汇编语言程序设计 4.1 80C51汇编语言程序设计基础 汇编语言具有以下几个特点: ① 助记符指令与机器指令是一一对应的,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,而且能反映计算机的实际运行情况,所以用汇编语言能编写出最优化的程序。 ② 汇编语言是“面向机器”的语言,编程比使用高级语言困难。 ③ 汇编语言能直接访问存储器、输入与输出接口及扩展的各种芯片(比如A/D、D/A等) ,也可直接处理中断,因此汇编语言能直接管理和控制硬件设备。 ④ 汇编语言通用性差,汇编语言和机器语言一样,都面向一台具体的机器,不同的单片微机具有不同的指令系统,并且不能通用。

4.1.1 汇编语言源程序的设计方法 程序结构 模块设计 开发方法 第4章 汇编语言程序设计 4.1.1 汇编语言源程序的设计方法 程序结构 模块设计 开发方法 自底向上开发:首先对最底层模块进行编码,测试和调试。这些模块正常工作后,就可以用它们来开发较高层的模块。 自顶向下开发:首先对最高层进行编码和调试。

4.1.2 80C51汇编语言的伪指令 1. 汇编起始地址伪指令 汇编起始地址伪指令的一般格式如下: ORG表达式 例: ORG 3000H 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 1. 汇编起始地址伪指令 汇编起始地址伪指令的一般格式如下: ORG表达式 例: ORG 3000H START:MOV A,#7AH 解:这段程序汇编后目标代码在存储器中存放的起始地址是3000H。

4.1.2 80C51汇编语言的伪指令 2. 汇编结束伪指令 汇编结束伪指令一般格式如下: 格式1:〈字符名称〉END〈表达式〉 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 2. 汇编结束伪指令 汇编结束伪指令一般格式如下: 格式1:〈字符名称〉END〈表达式〉 格式2:〈字符名称〉END或者END 该指令是汇编语言源程序的结束标志,在END以后所写的指令,汇编程序都不予处理。因此,在一个源程序中只允许出现一个END语句,它必须放在整个程序的最后。

4.1.2 80C51汇编语言的伪指令 3. 赋值伪指令 赋值伪指令一般格式如下: 〈字符名称〉EQU〈表达式〉 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 3. 赋值伪指令 赋值伪指令一般格式如下: 〈字符名称〉EQU〈表达式〉 该指令的功能是将“表达式”赋给“字符名称”。 例:LOOPEQU2007H;LOOP=2007H 解:用EQU指令给一个字符名称赋值之后,在整个程序中该字符名称的值都是固定的,不能更改。若需更改,需用伪指令DL重新定义赋值。

4.1.2 80C51汇编语言的伪指令 4. 数据地址定义指令 数据地址定义指令一般格式如下: 〈字符名称〉DATA〈表达式〉 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 4. 数据地址定义指令 数据地址定义指令一般格式如下: 〈字符名称〉DATA〈表达式〉 DATA伪指令的功能与EQU有些相似,使用时要注意它们有以下区别: ①EQU伪指令必须先定义后使用,而DATA伪指令可以后定义先使用; ②用EQU伪指令可以把一个汇编符号赋给一个字符名称,而DATA只能把数据赋给字符名称; ③DATA伪指令可将一个表达式的值赋给一个字符名称,所定义的字符名称也可以出现在表达式中,而EQU定义的字符则不能这样使用。DATA伪指令在程序中常用来定义数据地址。

4.1.2 80C51汇编语言的伪指令 5.定义标号值伪指令 定义标号值伪指令一般格式如下: 〈字符名称〉DL〈表达式〉 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 5.定义标号值伪指令 定义标号值伪指令一般格式如下: 〈字符名称〉DL〈表达式〉 例:COUNT DL4064H ;定义标号COUNT的值为4064H COUNT DL COUNT+3 ;重新定义COUNT的值为4064H+3 解:DL和 EQU的功能都是将表达式值赋予标号,但两者有差别:可用DL语句在同一源程序中给同一标号赋予不同的值,即可更改已定义的标号值;而用EQU语句定义的标号,在整个源程序中不能更改。

4.1.2 80C51汇编语言的伪指令 6.定义字节伪指令 定义字节伪指令一般格式如下: 〈字符名称〉 DB 〈表达式或表达式列表〉 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 6.定义字节伪指令 定义字节伪指令一般格式如下: 〈字符名称〉 DB 〈表达式或表达式列表〉 定义字节伪指令是在程序存储器的某一部分存入一组8位二进制数,或者将一个数据表格存入程序存储器中。这个伪指令在汇编以后,将影响程序存储器的内容。 例:ORG4000H TABLE DB45H,67,100,32,00,-2

4.1.2 80C51汇编语言的伪指令 7. 定义字伪指令 定义字伪指令一般格式如下: 〈字符名称〉 DW 〈表达式或表达式表〉 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 7. 定义字伪指令 定义字伪指令一般格式如下: 〈字符名称〉 DW 〈表达式或表达式表〉 DW是从指定的地址开始定义若干16位数据,且把字的高字节数存入低地址单元,低字节数存入高地址单元,按顺序连续存放。 例:DW 7064H,1234H,209H 说明:表示按顺序存入70H,64H,12H,34H,02H,09H。

4.1.2 80C51汇编语言的伪指令 8. 定义存储区伪指令 定义存储区伪指令一般格式如下: 〈字符名称〉 DS 〈表达式〉 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 8. 定义存储区伪指令 定义存储区伪指令一般格式如下: 〈字符名称〉 DS 〈表达式〉 定义存储区伪指令是从指定的地址开始,保留若干字节的内存空间以作备用。汇编时,对这些单元不赋值。 例:ORG 4000H DS 9H DB 86H,A7H

4.1.2 80C51汇编语言的伪指令 9. 位地址符号伪指令 位地址符号伪指令一般格式如下: 〈字符名称〉 BIT 〈位地址〉 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 9. 位地址符号伪指令 位地址符号伪指令一般格式如下: 〈字符名称〉 BIT 〈位地址〉 位地址符号伪指令是对位地址赋予所规定的字符名称。 说明:其中,位地址可以是绝对地址,也可以是符号地址。 例:A1 BIT P2.1 A2 BIT P3.0

4.1.2 80C51汇编语言的伪指令 例:8051单片机常用伪指令的应用举例。 ORG 6070H BUFFER DS 45H 第4章 汇编语言程序设计 4.1.2 80C51汇编语言的伪指令 例:8051单片机常用伪指令的应用举例。 ORG 6070H BUFFER DS 45H DW “E F” DW 1100H,209H,-814 解:① 汇编后程序将6070H至60B4H空间作为缓冲区空间; ② (60B5H)= ‘E’,(60B6H)= ‘F’; ③ 60B7H单元起存放11H、00H、02H、09H、FCH、D2H 。

第4章 汇编语言程序设计 4.2 顺序结构程序设计 单片机程序设计和其他程序设计一样,程序结构一般采用以下三种基本控制结构,即顺序结构、分支结构和循环结构来组成,再加上使用广泛的子程序及中断服务子程序,共有五种基本结构。 所谓的顺序结构程序设计顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止。

4.2.1 数据传送程序设计 例1:将R2与R3内容互换,R4与内存70H单元内容互换。 第4章 汇编语言程序设计 4.2.1 数据传送程序设计 例1:将R2与R3内容互换,R4与内存70H单元内容互换。 解:这个程序只需要利用交换指令和传送指令就可以完成,其程序段如下: XCHR:MOV A,R2 XCH A,R3 XCH A,R2 ;R2与R3内容互换 MOV A,R4 XCH A,70H XCH A,R4 ;R4与70H单元内容互换

第4章 汇编语言程序设计 4.2.1 数据传送程序设计 例2:现有两个双字节无符号数,分别存在R3R4H,R5R6中,高字节在前,低字节在后,通过编程使两数相加,和数存放在20H21H22H单元中。 解: ORG 4000H CLR C ;清C MOV A,R4 ;把被加数的低位放到A ADD A,R6 ;将加数和被加数的低位相加 MOV 22H,A ;把结果的低位存入22H单元 MOV A,R3 ;把被加数的高位放到A ADDC A,R5 ;将加数和被加数的高位相加 MOV 21H,A ;把结果的高位存入21H单元 MOV A,#00H ;清A ADDC A,#00H ;加进位 MOV 20H,A ;存和的进位 END

第4章 汇编语言程序设计 4.2.2 算术运算程序设计 例3:若a、b、c三个数分别存放在存储器40H、41H、42H单元中,试编写计算Y=a+b-c的程序。 解:根据题意要求,可先似a+b的运算,然后再做(a+b)-c的返算,计算结果送入存储器Y的单元中,由算法分析先画出程序执行的流程图,如图4-2所示。根据图4-2所示流程图,编写Y=a+b-c源程序如下: ORG START:MOV A,40H ;将a送给A ADD A,41H ;将a+b送给A CLR C ;清c SUBB A,42H ;将(a+b)-c送给A MOV 43H,A ;将A送给43H END

第4章 汇编语言程序设计 4.2.2 算术运算程序设计 例4:设被加数存放于片内RAM的20H(低位字节)、21H(高位字节),加数存放于22H(低位字节)和23H(高位字节),运算结果的和数存放于20H(低位字节)和21H(高位字节)中。实现16位相加。其程序段如下: START:PUSH ACC ;将A中内容进栈保护 MOV R0,#20H ;将20H地址送R0 MOV R1,#22H ;将22H地址值送R1 MOV A,@R0 ;被加数低字节内容送A ADD A,@R1 ;低字节数相加 MOV @R0,A ;低字节数和存20H中 INC R0 ;指向被加数高位字节 INC R1 ;指向加数高位字节

4.2.2 算术运算程序设计 MOV A,@R0 ;被加数高位字节送A ADDC A,@R1 ;高字节数带进位相加 第4章 汇编语言程序设计 4.2.2 算术运算程序设计 MOV A,@R0 ;被加数高位字节送A ADDC A,@R1 ;高字节数带进位相加 MOV @R0,A ;高字节数和存21H中 CLR A ADDC A, #00H MOV 10H, A ;进位暂存于10H中 POP ACC ;恢复A原内容 【说明】:这里将A原内容进栈保护,如果原R0、R1 内容有用,亦需进栈保护。如果相加结果高字节的最高位产生进位且有意义时,应对标志CY位检测并处理之。

4.2.3 延时程序设计 例5: 采用查询方式实现定时延时 ORG 0000H AJMP START ORG 30H 第4章 汇编语言程序设计 4.2.3 延时程序设计 例5: 采用查询方式实现定时延时 ORG 0000H AJMP START ORG 30H START: MOV P1,#0FFH ;关所 灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB TR0 ;定时/计数器0开始运行

LOOP: JBC TF0,NEXT ; 如果TF0等于1, 则清TF0并转 第4章 汇编语言程序设计 4.2.3 延时程序设计 LOOP: JBC TF0,NEXT ; 如果TF0等于1, 则清TF0并转 NEXT处 AJMP LOOP ;否则跳转到LOOP处运行 NEXT: CPL P1.0 MOV TH0,#15H MOV TL0,#9FH ;重置定时/计数器的初值 AJMP LOOP END AJMP LOOP END

4.2.3 延时程序设计 例6: 采用中断方式实现定时延时 ORG 000BH ;定时器0的中断向量地址 第4章 汇编语言程序设计 4.2.3 延时程序设计 例6: 采用中断方式实现定时延时 ORG 000BH ;定时器0的中断向量地址 AJMP TIME0 ;跳转到真正的定时器程序处 ORG 30H START: MOV P1,#0FFH ;关所 灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB EA ;开总中断允许 SETB ET0 ;开定时/计数器0允许 SETB TR0 ;定时/计数器0开始运行

4.2.3 延时程序设计 LOOP: AJMP LOOP ; 真正工作时,这里可写任意程序 第4章 汇编语言程序设计 4.2.3 延时程序设计 LOOP: AJMP LOOP ; 真正工作时,这里可写任意程序 TIME0: PUSH ACC ;定时器0的中断处理程序 PUSH PSW ;将PSW和ACC推入堆栈保护 CPL P1.0 MOV TH0,#15H MOV TL0,#0A0H ;重置定时常数 POP PSW POP ACC RETI END

第4章 汇编语言程序设计 4.3 分支程序设计 简分支选择结构 如果给出的条件满足要求,则转向程序段A,执行完程序段A后继续执行下一段指令;如果给出的条件不满足要求,则不转向,自接执行下一条指令。单分支选择结构如图所示。

例:比较两个无符号8位二进制数的大小,将较大的数存入高地址中。(设两数分别存于30和31H中。) 第4章 汇编语言程序设计 例:比较两个无符号8位二进制数的大小,将较大的数存入高地址中。(设两数分别存于30和31H中。) 解:这是一个简单的分支程序,可以让两数相减,若cy=l,则被减数小于减数。其程序段如下: ORG 4000H CLR C MOV A,30H SUBB A,31H JC NEXT XCH A,31H MOV A,3OH NEXT: NOP END

例:试编写计算下式的程序 Y=a2+b (当b≥10时) Y=a2-b (当b<10时) 第4章 汇编语言程序设计 第4章 汇编语言程序设计 例:试编写计算下式的程序 Y=a2+b (当b≥10时) Y=a2-b (当b<10时) ORG 0000H START:MOV A,#a MOV B,A MUL AB ;BA= a2 MOV R0,A;R1R0= a2 MOV R1,B MOV A,#b CJNE A,#0AH,MMN;b≠10则转移 MM:ADD AR0 ;b≥10,a2+b=Y MOV R0,A MOV A,#00H ADDC A,R1 MOV R1,A JMP MMNN MMN:JNC MM;无借位(即b>10)转MM MOV R3,A ;R3←b MOV A,R0 CLR C SUBB A,R3 ; R1R0←a2-b MOV R0,A MOV A,R1 SUBB A,#00H MOV R1,A MMNN:MOV Y0,R0 ;Y1Y0←结果 MOV Y1,R1 HERE:AJMP HERE

4.3 分支程序设计 ⒉ 多分支选择结构 第4章 汇编语言程序设计 第4章 汇编语言程序设计 4.3 分支程序设计 ⒉ 多分支选择结构 多分支结构程序又称散转程序,它是根据输入条件或者根据运算结果来确定转向相应的处理程序,不仅判断一个分支条件无法解决的问题,需要判断两个或两个以上的条件,通常也称为复合条件。

4.3 分支程序设计 80C51设有两条多重分支选择指令: ① 散转指令 【格式】:JMP @A+DPTR ② 比较指令 第4章 汇编语言程序设计 4.3 分支程序设计 80C51设有两条多重分支选择指令: ① 散转指令 【格式】:JMP @A+DPTR ② 比较指令 【格式】: CJNE A,direct,rel(共4条)

第4章 汇编语言程序设计 4.3 分支程序设计

4.3 分支程序设计 CLR C START: MOV R1,A SUBB A,#64H JNC BJ MOV A,R1 第4章 汇编语言程序设计 4.3 分支程序设计 根据图4-6所示流程图编写其源程序如下: CLR C START: MOV R1,A SUBB A,#64H JNC BJ MOV A,R1 CJNE A,#32H,LOOP1 MOV B,#2H MUL A B SJMP LOOP3 LOOP1: JC LOOP2 MOV B,#3H SUBB A,#32H MOV RO,A MOV A,#32H MOV B,#2H MUL A B ADD A,RO SJMP LOOP3 LOOP2 :MOV B,#2H MUL A B LOOP3: MOV 80H,A SJMP EOF BJ: ;超重报警程序

4.4 循环程序设计 循环程序通常由以下几个部分组成 1.设置循环初值 2.循环体 3.修改循环控制变量 4.循环控制部分 5.结束部分 第4章 汇编语言程序设计 4.4 循环程序设计 循环程序通常由以下几个部分组成 1.设置循环初值 2.循环体 3.修改循环控制变量 4.循环控制部分 5.结束部分

假设该单片机晶振为6MHz,试编制一个延时程序, 延时时间为1s. 第4章 汇编语言程序设计 假设该单片机晶振为6MHz,试编制一个延时程序, 延时时间为1s. 解:软件延时时间与单片机执行指令的时间有关,由己知条件可知晶振频率为6MHz的一个机器周期为2us,计算出执行每条指令和一个循环所需要的时间,根据要求的延时时间便可确定循环次数。若单循环延时不能达到ls可以采用多重循环方式实现。所谓多重循环,就是在一个循环体中又包含了其他的循环程序,即循环中又嵌套循环,这种循环程序则称为多重循环。源程序如下: DELY: MOV R5,#05H DELY0: MOV R6,#0C8H DELY1: MOV R7,#0F8H NOP DELY2: DJNZ R7,DELY2 DJNZ R6,DELY1 DJNZ R5,DELY0

第4章 汇编语言程序设计 把内部RAM中起始地址为DATA的数据串传送到外部RAM以BUFFER为首地址的区域,直到发现“$”字符的ASCII码为止,数据串的最大长度在内存20H中。 MOV R0,#DATA ;数据区首地址 MOV DPTR,#BUFFER;数据区长度指针 LOOP: MOV A,@R0 CJNE A,#24H ,LOOP2 ;判是否为“$”符(24H) SJMP LOOP1 ;是“$”符,则结束 LOOP2:MOV A,@R0 ;不是“$”符,则传送 MOVX @DPTR,A INC R0 INC DPTR DJNZ 20H,LOOP ;数据串未查完,继续 LOOP1:RET DATA:… ;数据串

第4章 汇编语言程序设计 4.5子程序设计 子程序在结构上与主程序的结构没有根本的区别,子程序也可以由简单结构、分支结构或循环结构构成。不同的是在于程序在操作的过程中需要由其他程序来调用,执行完以后又需要将执行流程返回到调用该子程序的程序中。子程序的执行过程如图所示。

4.5子程序设计 1.子程序的调用过程 主程序与子程序之间的参数传递。 保护现场和恢复现场。 第4章 汇编语言程序设计 4.5子程序设计 1.子程序的调用过程 主程序与子程序之间的参数传递。 保护现场和恢复现场。 当然对每个具体的子程序哪些参数应当保护,是不是需要现场保护,还应视实际情况确定。

第4章 汇编语言程序设计 4.5子程序设计 ⒉ 常用子程序举例 例1: 四位BCD码整数转换成二进制整数子程序。入口参数:BCD码字节地址指针R0、位数(n-l)存于R2中。出口参数:二进制数存放于R3、R4中。处理方法:A=a3×103十a2×102+al×101+a0×100 其子程序如下:

4.5子程序设计 第4章 汇编语言程序设计 MUL AB BCDB:PUSH PSW;现场保护 ADD A,R3 PUSH ACC 第4章 汇编语言程序设计 4.5子程序设计 MUL AB ADD A,R3 XCH A,R4 INC R0 ADD A,@R0 XCH A,R3 ;(R3R4)+((R0))送R3R4 ADDC A,#0 MOV R4,A DJNZ R2,LOOP1 ;循环n-l次 POP B ;恢复现场 POP ACC POP PSW RET ;返回 BCDB:PUSH PSW;现场保护 PUSH ACC PUSH B MOV R3,#00H MOV A,@R0 MOV R4,A ;BCD码千位送R4 LOOP:MOV A,R4 MOV B,#10 MUL AB MOV R4,A MOV B,#10 ;(R3)、(R4)×10 XCH A,B ;交换 XCH A,R3

第4章 汇编语言程序设计 4.5子程序设计 例2:中值数字滤波子程序。为了保证采集数据的稳定和不受千扰影响,除了采用硬件滤波电路外,还常常应用软件来进行数字滤波。中值滤波就是连续输入三个检测信号,从中选择一个中间值为有效信号。入口条件:三次采集数据分别存储在内部存储器的20H、21H和22H中。出口结果:中间值在R0寄存器中。使用资源:累加器A、R0及内存20H、21H和22H。 其子程序如下:

第4章 汇编语言程序设计 FILLE: PUSH PSW ;PSW及ACC保护入栈 PUSH ACC MOV A,20H;取第一个数据 CLR C SUBB A,21H ;与第二个数据比较 JNC LOB1 ;第一个数据比第二个数据大,转LOB1 MOV A,20H ;第一个数据比第二个数据小,交换二个数的位置 XCH A,21H MOV 20H,A LOB1: MOV A,22H SUBB A,20H ;第三个数据与前二个数据中的较大数比较 JNC LOB3 ;第三个数据大于前二个数据中的较大数,转LOB3 MOV A,22H CLR C SUBB A,21H ;第三个数据与前二个数据中的较小数比较 JNC LOB4 MOV A,21H MOV R0,A LOB2: POP ACC ;恢复ACC和PSW POP PSW RET

4.6 单片机程序设计流程 4.6.1编程语言 80C51的软件设计可以采用汇编语言或高级语言。 第4章 汇编语言程序设计 4.6 单片机程序设计流程 4.6.1编程语言 80C51的软件设计可以采用汇编语言或高级语言。 汇编语言具有源代码小、效率高等优点,适合于对实时性要求较高的场合。 但是由于汇编语言调试比较麻烦,要求编程者对硬件的了解要很清楚。 随着高级语言的发展,编译效率的不断提高,加之应用系统的规模和复杂性都在提高。目前,在单片机的软件开发中,高级语言占据重要的地位。

4.6.2 单片机汇编语言开发流程 用汇编语言编写程序,一般可分为以下几个步骤: 第4章 汇编语言程序设计 4.6.2 单片机汇编语言开发流程 用汇编语言编写程序,一般可分为以下几个步骤: (1)建立数学模型:根据要解决的实际问题,反复研究分析并抽象出数学模型。 (2)确定算法:解决一个问题,往往有多种不同的方法,要从诸多算法中确定一种较为简捷的方法是至关重要的。 (3)制定程序流程图:算法是程序设计的依据, (4)确定数据结构:合理地选择和分配内存单元以及工作寄存器。 (5)写出源程序:根据程序流程图,精心选择合适的指令和寻址方式来编制源程序。 (6)机调试程序:将编好的源程序进行汇编,并执行目标程序,检查和修改程序中的错误的结果进行分析,直到正确为止。

4.6.3单片机C语言开发流程 1、编写C源程序 2、编译源程序生成目标文件 3、仿真调试目标文件 4、目标文件的烧写 第4章 汇编语言程序设计 4.6.3单片机C语言开发流程 1、编写C源程序 2、编译源程序生成目标文件 3、仿真调试目标文件 4、目标文件的烧写