4.4 实用程序举例 4.4.1 延时 在程序设计过程中,有时需要程序“等待”一会儿再去处理某些事情,称之为延时。计算机延时实际就是让计算机反复执行一些空操作,这样就能起到拖延时间的作用。需要执行空操作次数的多少,取决于延时时间的长短。

Slides:



Advertisements
Similar presentations
九十五年國文科命題知能 研習分享.
Advertisements

第四章 汇编语言程序设计 程序设计概述 一、程序设计步骤 二、程序设计方法 三、汇编语言源程序的格式
第7章 AT89S51单片机的 串行口 1.
2011年广西高考政治质量分析 广西师范大学附属外国语学校 蒋 楠.
知识回顾 1、通过仔细观察酒精灯的火焰,你可以发现火焰可以分为 、 、 。 外焰 内焰 焰心 外焰 2、温度最高的是 。
第5章 中断系统 5.1 中断的概念 5.2 MCS-51单片机的中断流程 5.3 MCS-51的中断响应条件和中断处理
发展心理学 王 荣 山.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
第四章 指令系统及汇编语言程序设计.
8051 指令.
第4章 MCS-51程序设计 4.1 汇编语言的格式与伪指令 4.2 汇编语言程序设计步骤 4.3 查表程序设计 4.4 循环程序设计
第四章 指令系统及汇编语言程序设计.
本章分为四节,主要介绍: 4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本程序结构 4.4 常用程序举例.
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
本章小结 C51单片机指令系统概述 C51单片机寻址方式 C51单片机指令系统
第七章 财务报告 主讲老师:王琼 上周知识回顾.
单片机原理与应用.
第9章 串行扩展技术 (课时:6学时).
第9章 数模转换器与模数转换器 本章学习目标 了解数模转换器的工作原理及性能指标 掌握模数转换器的应用 掌握数模转换器的应用.
第2章 MCS-51单片机指令系统与汇编语言程序设计
報告者:朱耿育 紀翔舜 組員:詹以群 張永傑 指導老師:梁新潁
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
第二部分 微机原理 第4章 汇编语言 程序设计 主讲教师:喻红.
单片机应用技术 项目一 循环彩灯装置 第6讲 指令功能及汇编语言程序设计(一) 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
第8章 模拟接口 8.1 模拟接口概述 8.2 DAC及其接口 8.3 ADC及其接口.
第二部分 微机原理 第3章 MCS-51的 指令系统 主讲教师:喻红.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第6章 MCS - 51单片机内部定时器/ 计数器 及串行接口 6.1 定时器/计数器的结构及工作原理 6.2 方式和控制寄存器
第七章 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单片机的系统扩展与应用.
走进编程 程序的顺序结构(二).
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的特性及接口电路的设计方法;
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
第六章 算术运算 6.1 十进制数加减运算 在计算机中采用BCD码来表示十进制数。BCD码就是使用四位二进制数表示一位十进制数。
单元五 MCS-51单片机内部资源 5.1 任务九 单片机计数并显示 5.2 任务十 单片机流水灯控制 5.3 任务十一 两台单片机数据互传
第四章 指令系统及汇编语言程序设计.
数码管数字时钟电路的设计 1. 系统硬件电路的设计
乘法公式 (1) 乘法分配律 (2) 和的平方公式 (3) 差的平方公式 (4) 平方差公式.
第3章 MCS-51指令系统 介绍MCS—51系列单片机的寻址方式 介绍MCS—51系列单片机的指令系统
第4章 80C51系列指令系统 教学目的:熟悉80C51系列单片机的寻址方式及 每一种寻址方式对应的寻址空间;掌 握每一条指令功能。
教学难点: 分支程序、散转程序与子程序的设计
本章内容 MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析
5-6 串列埠模式0輸出埠擴充實習.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
第三章 计算机系统的组成与工作原理.
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
四、手工汇编 完成汇编的方法有两种:手工汇编和汇编程序汇编 1.手工汇编步骤 A
单片机原理与应用.
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
简单芯片扩展I/O接口 8155可编程接口芯片及其使用 键盘及显示器接口设计 A/D和D/A转换接口技术
循环程序设计 在程序中包含重复执行的程序段称为循环程序设计。循环程序可以使程序结构性强、可读性好,从而大大提高了程序质量。
4.3 汇编语言程序设计 顺序程序设计 顺序程序设计是最基本的程序设计。它是按照指令排列的先后顺序依次执行,每条指令都必须执行,且只执行一遍。顺序程序设计一般比较单一、简单,常常作为复杂程序的一部分。
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
第二章 MCS-51单片机程序设计 第一章 8086程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第1章 微型计算机基础.
Presentation transcript:

4.4 实用程序举例 4.4.1 延时 在程序设计过程中,有时需要程序“等待”一会儿再去处理某些事情,称之为延时。计算机延时实际就是让计算机反复执行一些空操作,这样就能起到拖延时间的作用。需要执行空操作次数的多少,取决于延时时间的长短。

[例4.15] 编写一段延时程序。 ORG 2000H ;周期数×执行次数 MOV R0,#MT ;1×1 DL:NOP ;1×MT NOP ;1×MT DJNZ R0,DL ;2×MT

该程序的延时时间与系统所用的晶振和程序中每条指令的机器周期及其执行次数MT有关。设系统晶振为12 MHz,则可知一个机器周期为: T=1s/(12×106 )×12=1 μs 延时时间=T×(1×1+1×MT+1×MT+2×MT) =1 μs×(1+MT+MT+2MT) (4-1)

图4-6 双重循环延时程序流程图

[例4.16] 用双重循环完成延时程序。 程序如下: MOV R0,#MT1 ;1×1 DL1:MOV R1,#MT2 ;1×MT1 DL2:NOP ;1×MT2×MT1 NOP ;1×MT2×MT1 DJNZ R1,DL2 ;2×MT2×MT1 DJNZ R0,DL1 ;2×MT1

设晶振仍为12 MHz,则上面程序的执行时间T为: T=1μs×(1+1×MT1+1×MT2×MT1+1×MT2×MT1+2× MT2×MT1+2×MT1) (4-2) 4.4.2 代码转换 1.十六进制到ASCII码的转换 [例4.17] 将20H单元中的两个十六进制数转换成ASCII码,低4位的ASCII码保存在21H单元,高4位的ASCII码保存在22H单元。 由ASCII编码表可知,转换方法为:若十六进制数小于 10,则此数加30H,否则加上37H就可以将十六进制数转换成ASCII码。

MOV A,20H ;(20H)→A ANL A,0FH ;屏蔽高4位 ACALL CHANGE ;求低位十六进制数的ASCII码 MOV 21H,A ;保存低位十六进制数的ASCII码 ANL A,#0F0H ;屏蔽低4位 SWAP A ;高位十六进制数送低4位 ACALL CHANGE ;求高位十六进制数的ASCII码 MOV 22H,A ;保存高位十六进制数的ASCII码 RET

CHANGE: PUSH A ;操作数进栈保护 CLR C ;进位标志清零 SUBB A,#0AH ;与10比较 POP A ;取出操作数 JC NUM ;比10小转NUM ADD A,#07H ;大于等于10加37H NUM: ADD A,#30H ;加30H RET

2.单字节二进制数转换为BCD数 [例4.18] 已知20H单元存放一个二进制数,编程将它转换为BCD数,百位送入FIRST单元的低4位,十位和个位分别送入SECOND单元的高4位和低4位。 本题只需将20H单元中的内容除以100,得到的商就是百位BCD数,然后用余数除以10,其结果中,商为十位BCD数,余数为个位BCD数。

ORG 0100H FIRST DATA 30H SECOND DATA 31H MOV A,20H ;被除数送A MOV B,#64H ;除数100送B DIV AB ;A除以B MOV FIRST,A ;百位BCD数送FIRST MOV A,B ;余数送A

MOV B,#0AH ;除数10送B DIV AB ;A除以B SWAP A ;十位BCD数送高4位 ORL A,B ;十位和个位BCD数组合成一个字节 MOV SECOND,A ;送入SECOND单元 SJMP $ ;结束 END

4.4.3 数据处理 1.查询 [例4.19] 在外部RAM 1000H开始的地址单元中存放30个数据,找出其中的奇数存入内部RAM 20H开始的存储单元中,并统计奇数的个数,存入3FH单元。 用位操作指令对操作数最低位进行判断,若为1即为奇数。本题中,DPTR是片外数据缓冲区地址指针,R0是片内数据缓冲区地址指针。

ORG 0030H MOV DPTR,#1000H ;指向片外缓冲区首地址 MOV R0,#20H ;指向片内缓冲区首地址 MOV R7,#30H ;循环次数送入R7 MOV 3FH,#00H ;清零 LP: MOVX A,@DPTR ;取数 JNB ACC.0,EVEN ;偶数转EVEN MOV @R0,A ;奇数保存 INC R0 ;修改片内地址 INC 3FH ;修改统计个数 EVEN: INC DPTR ;修改片外地址 DJNZ R7,LP ;控制循环 RET

2.排序 [例4.20] 将片内RAM 30H开始的连续16个单元的数据按从小到大的顺序排序。 此题采用的是冒泡排序法,即对这16个数据组成的数据串,依次将相邻两数分别进行比较,若后面的数小于前面的数,则比较的相邻两数互换,且置位地址单元7FH为1。若这组数据比较完后,相邻两数有交换(即交换标志位7FH为1),则再重新进行两两比较,直到16个数已从小到大排序,相邻两数比较后不再交换为止。交换标志位7FH用来控制是否再需要重新两两比较。程序流程如图4-7所示。

图4-7 排序程序流程图

程序如下: ORG 2000H SORT: MOV R1,#30H ;指向数据块首地址 MOV R7,#10H ;数据块长度送R7 CLR 7FH ;交换标志位清零 DEC R7 ;块长减1为比较次数

LOOP1:MOV A,@R1;取相邻两数中的前一个数 MOV 20H,A INC R1 MOV A,@R1 ;取相邻两数中的后一个数 CJNE A,20H,LOOP ;相邻两数比较 LOOP: JNC NEXT ;前者小于后者转至NEXT XCH A,20H ;前者大于后者,相邻两数互换 MOV @R1,A

DEC R1 MOV @R1,20H INC R1 ;恢复数据块指针 SETB 7FH ;置1标志位 NEXT: DJNZ R7,LOOP1 ;所有相邻两数未比较完,转至LOOP1 JB 7FH,SORT ;交换标志位为1,转至SORT RET

4.4.4 算术运算 1.多字节BCD码加法 [例4.21] 已知在BLOCK1和BLOCK2为始址的存储区中分别有长度为N字节压缩的BCD码,请编写程序使它们相加并将和送入BLOCK1为始址的存储单元。 使用加法指令从低字节相加,因为是BCD码相加,还需用DA指令调整。

ORG 0100H MOV R7,#N ;数据块长度送R7 MOV R0,#BLOCK1 ;被加数始址送R0 MOV R1,#BLOCK2 ;加数始址送R1 CLR C ;CY清零 LOOP: MOV A,@R0 ;被加数送A ADDC A,@R1 ;相加 DA A ;BCD码调整

MOV @R0。A ;存和 INC R0 ;修改被加数地址指针 INC R1 ;修改加数地址指针 DJNZ R7,LOOP ;未加完,则转至LOOP JNC RTN ;最高位无进位转至RTN MOV @R0,#01H ;有进位则保存 RTN: RET

2.双字节无符号数乘法运算程序 [例4.22] 已知在寄存器R4R5和R2R3中分别存放有双字节的被乘数和乘数(R5、R3存放低8位,R4、R2存放高8位),试编程求积并存入BLOCK开始的连续四个存储单元(低字节在前,高字节在后)。 AT89C51乘法指令只能完成两个8位无符号数相乘,因此16位无符号数求积必须将它们分解成四个8位数相乘来实现,其方法是边乘边加。原理和过程如图4-8所示。

图4-8 双字节无符号数乘法原理图

图中ab为16位被乘数,cd为16位乘数(a、c代表高8位,b、d代表低8位),而其后跟H表示乘积后的高8位,跟L表示乘积后的低8位。 ORG 1000H BLOCK EQU 30H MOV R0,#BLOCK ;指向积单元首址 MOV A,R5 MOV B,R3 MUL AB ;b×d MOV @R0,A ;保存bdL

MOV A,B INC R0 MOV @R0,A ;保存bdH MOV A,R4 MOV B,R3 MUL AB ;a×d ADD A,@R0 ;bdH+adL MOV @R0,A ADDC A,#00H ;adH+进位

MOV @R0,A DEC R0 MOV A,R5 MOV B,R2 MUL AB ;b×c ADD A,@R0 ;bcL与bdh、adL、进位累加 MOV A,B

INC R0 ADDC A,@R0 ;bcH与adH、进位累加 MOV @R0,A CLR A ADDC A,#00H MOV @R0,A ;保存进位 MOV A,R4

MOV B,R2 MUL AB ;a×c DEC R0 ADD A,@R0 ;acL与adH、bcH、进位累加 MOV @R0,A MOV A,B INC R0 ADDC A,@R0 ;ac与进位累加 RET