这个图怎么用线切割单板机教视频程编程。一共五段。

当前位置: >>
单片微型计算机原理及应用
单片微型计算机原理及应用 第1章 单片计算机概述§1-1现代计算机技术的两大分支MPU―微处理器(用于大数量数值计算无止尽要求,满足数字模拟仿真,数字信号处理,图象分析,人工智能等领域)。 重要指标:数据总线宽度及外围寻址能力。数据总线宽度从8―16― 32―64位过渡,指令系统上突出了数字运算和逻辑运算MCU―微控制器(用于快速实时对外部事件、对象实现信号采集,判断、处理、参数控制等要求,构成工控系统,适应各种对象的控制 需要) 重要指标:高速I/O口,计数器的捕获,比较功能,A/D,D/A转换,功率 驱动I/O口,位寻址及位操作,程序运行监督等,数据总线宽度及外围寻 址只是单片机众多指标之一。 §1-2 微型计算机 单板机 单片机1.微型计算机若将运算器与控制器集成在一块硅片上,称该芯片为中央处理器 CPU或MPU。若再将它与大规模集成电路制成的主存储器,I/O接口 电路用总线结构联系起来就构成了微型计算机2.单板机将CPU 、 RAM、 ROM、 I/O接口封装在一块印刷电路板上,就 成为单板机3.单片机若在一块半导体芯片上,能容纳一台数字计算机的4个基本组成部 分,则这种芯片就被称为单片微型计算机
§1-3单片机的发展简况及应用1976年INTEL公司推出第一个8位单片机系列(MCS-48)至今,经历了外围集成、 总线完善、功能集成、 全方位发展阶段,已走过 了三代发展历程一、 第一代单片机始于1976年,主要实现单个芯片上计算机的集成,为初级阶段。 典型产品:Intel公司MCS-48系列、 Motorola公司6801系列、 Zilog公司 Z8系列 特点:采用专门结构设计,将CPU及外围单元集成在一块芯片上,指 令系统设计面向控制功能要求,具有较强的控制功能。8位CPU,并行 I/O口,8位定时/计数器,RAM等。无串行I/O口,寻址范围不大于4K。 二、 第二代单片机。高性能单片机阶段。 典型代表:Intel的MCS-51系列 特点:完善外部总线,确立了单片机的基本控制功能。单片机均带 有串行I/O口,具有多级中断处理系统, 16位定时/计数器,寻址范围 可达到64K三、第三代单片机1983―至今。8位单片机巩固完善,16位单片机推出普及应用及32位 单片机也投入使用 典型产品:各大公司纷纷开发出自己的单片机系列,如 Motorola,Philips,Intel等 技术特点:全速发展单片机的控制功能。16位单片机除CPU为16位 以外,片内RAM/ROM容量进一步扩大,片内RAM增加为232B, ROM为8KB,且片内带有高速I/O部件,保证程序可靠运行的WDT, 多通道10位A/D转换器,具有8级中断,人机接口等等。 §1-4我国单片机16年探索 起步 开拓 发展1 2 3 4 5探索时期(80年代初) 起步时期() 开拓时期() 发展时期(1995―至今) 新时期新理念 §1-5 单片机的结构特点以MCS-51系列举例: ①在数据RAM区开辟了一个工作寄存器区,区内共分4组, 每组8个寄存器,共计32个工作寄存器,提供21个特殊 功能寄存器,完成定时,串口,中断等功能 ②存储结构上:从空间将程序、数据存储器分开,采用 不同寻址方式,用两个不同地址指针。PC-程序存储器, DPTR-数据存储器 ③I/O接口特点:通道口引线在程序控制下都可有第二功 能,用户可灵活使用。 ④内部有一个全双功的串行接口,可同时发送接收数据 ⑤有专门的位处理机。 §1-6单片机的开发及开发工具开发:提出任务→定型生产→投入使用的过程称 对微机进 行开发 包括:系统(产品)总体方案论证,设计硬件, 软件开 发,目标样机的调试等。 开发过程明显特点:微计算机化的产品软,硬件分 不开为 此设计了专门的微 型机开发系统MDS P3图1-2
单片计算机开发系统一般应具有4方面的基本功能:①硬件电路诊断、检查 ②用户程序输入、修改 ③程序运行、调试、单步、断点运行 ④程序可固化到EPROM中去 §1-7 单片机的应用领域一 二 三 四 五 工业自动化 智能仪表及集成智能传感器 家用电器领域 办公自动化 汽车、航空航天电子系统 §1―8 嵌入式应用系统一 定义: 将计算机软件和硬件结合起来,构成一个专门的计算装 置,完成特定的功能或任务。是一个大系统或大电子设备中 的一部分,工作在一个与外界发生交互并受到时间约束的环境 中,在无人工干预的情况下进行实时控制。其中软件用以实现 有关功能并使其系统具有适应性和灵活性;硬件用以满足性能 甚至安全的需要。 二 特性: 1 完成单一或一组紧密相关的特定功能 2 具有高性能和实时的要求,且这些要求正不断增加 3 系统作为设备的一部分,其运行一般不需要人工干预 4 5系统的电源可靠性和安全性通常是影响设计的重要因素 处理器的选择是嵌入式系统设计关键一步三 用途: 用途很广,如移动通信设备(手机)、数字相机或摄像机、 洗衣机、微波炉、打印机、复印机、工业仪器/仪表、汽车刹 车、引擎控制等。对于各个嵌入式系统其要求是千变万化的, 既要求体积小(如手机),性能高(信号处理),又要求安全 可靠(如核电站) 四嵌入式系统的主要特征 实时性是嵌入式系统的主要特征。 五 嵌入式系统开发嵌入式系统开发或设计与一般意义计算机应用开发 或计算机软件设计有很大不同,不但要考虑软件,而且 还要考虑硬件设计,不但要考虑功能设计(如完成什么 功能),还应考虑性能设计(如精度,实时性,安全可 靠性等等一些指标)。
思考题 1 现代计算机技术的两大分支?各自适合的领域 2 什么叫单片机?简述微型计算机,单板机,单片机的异同 点。 3 世界上第一个单片机是什么系列?什么时间产生的?谁家 生产的?数据为几位? 4 (自查资料回答)我国单片机的发展现状?我国主要有哪 些从事单片机生产、制造的企业,它们各自产品的性能和 特点是什么? 5 什么是嵌入式应用系统?嵌入式系统的主要特征是什么? 嵌入式应用系统的开发或设计与一般意义计算机应用开发 或计算机软件设计的不用点在哪里? 第2章 MCS-51单片机的组成及结构分析§2-1 MCS-51单片机的内部结构框图(以8031为例)框图见P8 双总线:数据/地址 分时传送 8位CPU,片内振荡器 4K字节ROM,128字节RAM 21个特殊功能寄存器 4个P口共32根I/O线 可分别寻址64K的外部数据存储器、程序存储器空间 2个16位的定时/计数器 5个中断源,2个优先级 一个全双工串行口 可位寻址,适于布尔处理的位处理机§ 2-2 CPU结构单片机的CPU由三部分组成: 运算器 控制器 布尔处理机 一 运算器:看书P8 1 结构: ALU(8位)+TMP1+TMP2+ACC+B+PSW+布尔处理机 组成逻辑电路。 2 ALU作用:完成2#的四则运算及逻辑运算 ①ACC(A) 是一个8位的寄存器,又称累加器。 作用:一般在运算前暂存一个数,运算后保存结果,也即A既 可放源码,也可放目的操作数。 ②B 是一个8位的寄存器 作用:用于乘/除运算,或作为其它运算的暂存器。 ③PSW 为程序状态标志寄存器,8位。用来存放运算结果的一些特征, 每位含义如下表: CYPSW.7ACPSW.6F0PSW.5RS1 RS0 OV ―PSW.4 PSW.3 PSW.2 PSW.1PPSW.0进位标志 CY=1,D+‖运算 有进位,“-‖运 算有借位, CY=0 D+/-‖无 借进位半进位标志 用户使 寄存器 用 计算机内部 的选择 进行BCD码 调整时用, 0 AC=1,有半 0 进位,“+‖ 1 进位,“-‖借 1 位工作区 位0 1 0 1溢出 标志 ov=1 溢出 ov=0 无溢 出厂家 开发奇偶标 志,反 映A的 奇偶性 P=1 A 中1的 个数为 奇数 P=0 A 中1的 个数为 偶数 注意:CY特性(反映无符号数+/-,有无借进位)。OV (对带符号数而言) 2 功能 算术运算:+、-、×、÷、±1及BCD码加法的10#调整 逻辑运算:AND 、OR、 CLR、 XRL、 NOT 移位运算:左/右移、循环 二 布尔处理机 17条位操作指令,是单片机CPU中运算器的重要组成部 分,有自己的①位累加器 ②位寻址RAM ③位I/O空间 ④位指令系统 操作均围绕累加器C进行 位操作指令可寻址:内部数据RAM里的128个位和SFR里的位 地址空间,可进行置位,取反,满足条件转移等操作。 功能:①可方便利用指令完成硬件逻辑完成功能 ② 为用户设置标志。如:置1或置0含义? 三 控制器 是CPU的大脑中枢,包括: ①定时控制逻辑 ②指令寄存器 ③译码器 ④地址指针DPTR ⑤程序计数器PC ⑥堆栈指针SP ⑦RAM地址寄存器 ⑧16位地址缓冲器 功能:8031或51系列CPU从程序存储器中取出的指令字 节?指令寄存器储存。在整个分析、执行过程中一直 受控于这些指令。指令寄存器中的这些代码被分析翻 译成一种或各种电平讯号,这些电平讯号与外部时钟 脉冲在CPU定时与控制电路的组合后,形成各种按一 定时间节拍变化的电平和脉冲―控制信息,在CPU内 部协调各部分工作 PC:程序存储器指针,每取一条指令地址自动+1 SP:8位堆栈指针。指示当前堆栈栈顶地址。注意:单片 机复位后,SP=07H,若不重新定义SP,第一个压栈的 数据将存入08H单元 DPTR:外部数据存储器或I/O口的地址指针为16位,分成 两个字节,高字节―DPH,低字节―DPL 8031的时钟:由两种方式产生:①内部 ②外部 参看书P8 § 2-3 存储器空间及存储器 单片机存储器结构主要特点:程序存储器和数据存储器 的寻址空间是分开的。 51系列(除外) ,有4个物理上互相独立的存储 器空间即内部程序存储器 外部程序存储器 内部数据存储器 外部数据存储器 1 程序存储器的8051片内有4K ROM 8751片内有4K EPROM 片内有8K 字节的容量 注意:无片内程序存储器,需在片外外接程 序存储器,所以片内有无程序存储器是区别51系列 产品51的重要标志。 片外程序存储器容量,用户可根据需要任意选择,但 片内外总容量合起来不得超过64KB2片内存放数据的RAM容量为256字节,而片外RAM 一般为64KB,这对51均适用3 空间分配图
一 程序存储器 作用:存放要执行的程序指令及固定的表格,常数等。 程序计数器:PC 使用地址:16位地址 寻址范围:64K 寻址指令:MOVC对有内部ROM,EPROM的,内部程序存储器 地址安排在0000H~0FFFH的4K空间。外部程序存 储器的地址空间为1000H~FFFFH之间为60KB。 EA(头上有―)接高电平,执行程序 当PC? 0FFFH 寻址内部存储器 当PC? 1000H 控制自动转向外部程序存储器,执行其 间的内容 EA(头上有―)接低电平或接地,取址只对外部程序存储器 进行,不用内部程序存储器。8031因无内部程序存储器, EA(头上有―)应接地。 程序存储器容量可据需要扩展。地址空间原则上可由用 户安排 注意:单片机复位后程序计数器的内容为0,使单片机必然 从0单元取指令,执行程序。 0003H ~ 0023H为定死的5个中断服务子程序入口地址,往往 予留该存储空间,而由0000H开始存放一条绝对跳转指令。 用户设计的程序则由跳转后的地址开始存放。 单片机访问外部程序存储器需提供两类信号: 地址信号―确定选中某单元控制信号―接在ROM或EPROM的数据允许输出端单片机无专门的地址/数据总线,常用P2口输出高8位地址,P0口分时复用输出地址的低8位及8位数据线,并由ALE将 低8位地址锁存在地址锁存器中。 访问指令为MOVC单片机的程序存储器是只读的,是单片机的一个特点 二 数据存储器 作用:存放和读取数据。 数据存储器分为: 内部数据RAM外部数据RAM内部RAM地址空间为00H ~ FFH,访问指令为MOV 外部RAM地址空间为0000H~ FFFFH,访问指令为MOVX 一般情况应充分利用内部数据存储器,仅在数据采集,处理 或数据量太大时才扩充数据存储器,常用静态RAM。 访问外部数据存储器:采用16位数据存储器地址指针:DPTR 地址分配:P2口输出地址高8位,P0口输出地址低8位,ALE 锁存地址信号,数据存储器可读/写 三 内部数据存储器 地址:00H ~FFH共256个字节,由两部分组成 内部数据RAM―00H ~ 7FH(包括位地址空间) 特殊功能寄存器―80H ~ FFH 在内部数据RAM中,有些单元既可对其执行按字节的操 作,也可对其中每个单元的8位二进制代码执行按位操作 分配为: 255 128 有255 128专用 寄存器127 48 ?位地址3224 16 8 0R0 ~ R7R0 ~ R73区2区R0 ~ R7R0 ~ R71区0区 由图:在内部RAM128个单元中,32~48共计16个单元为位地 址空间,计16×8=128个位。SFR中有12个专用R是可位寻址 的计12×8=96个位,但要除去IP.7 IP.6 IE.6 (96-3)为93个 位,总的内部数据存储器共可进行的位操作为221个位地址 (128+93=221) 1 内部数据RAM 1)结构特点: 单片机内部共有128个字节的RAM,CPU为其提供了丰富 的操作指令,均可按字节操作。 用户:可当数据缓冲区,也可在其中开辟自己的栈区,还可 利用所提供的工作寄存区进行数据的快速交换和处理。 单片机的特点之一:内部工作寄存区以RAM形式组成。与 CPU直接有关或表示CPU状态的寄存器和堆栈指针SP,A, PSW等统统归并于SFR之中。 在RAM的00H ~ FFH区,按地址划分出四组工作寄存器,每组 有工作寄存器8个,分别是R0 ~R7,共可提供4×8=32个寄存器。 2)作用:①用来暂存运算的中间结果以提高运算速度 ②也可用R0, R1存放8位地址值访问256字节块中的单元, 此时高8位地址事先由P2已定好 ③ R0 ~R7也可用作计数器,在指令作用下±1 缺点:与通用寄存器不同的是它们不能组成所谓的寄存器对,因 而也不能当16位地址指针使用 3)堆栈指针SP的设置 由于它是8位的,只能限制在内部数据存储区,原则上可由用户 分配在片内的任意区,只要对SP赋不同初值就可指定不同的堆栈 区域。注意:具体操作时堆栈区的设置应和RAM的分配统一考虑 即工作寄存器和位寻址区域分配好后,再指定堆栈区域。8031复 位后人为做成SP为07H,指向工作寄存区0,因此用户初始化程序 都应对SP设初值。一般设在30H以后的范围为合适。8031的堆栈 是向上生成的 RAM空间分配建议表如下:7FH30H 2FH 20H 1FH数据缓冲区 堆栈区 工作单元 位地址:00H ~ 7FH 3区 2区 1区只允许字节寻址可位寻址区域(16个字 ×8=128位,也可按字节寻 址4组工作寄存器R0 ~ R700H0区 2 特殊功能寄存器SFR 1)地址空间:128 ~ 255 地址范围:80H ~ FFH 51系列中,除PC和4个工作寄存区外,所有其它寄存器均 位于这个地址空间,5个为双字节寄存器,后面学习。 MCS-51规定,对SFR只能直接寻址P16表2-6列出了单片 机的SFR及他们的映象地址。 2)功能:反映了8031的状态 8031的状态及控制字可分为两类: 一类与芯片引脚有关 如P口 另一类作芯片内部功能的控制用 如IE 8031中的一些中断屏蔽及优先级控制不是采用硬件优先 链方式解决,而是用程序在SFR中设定。定时器,串行口 的控制字等全以SFR出现,就使单片机有可能把I/O口与 CPU,M集成在一起,替代多片机中多个芯片连在一起完 成的功能,这是单片机设计的一大特色 P0 ~P3实际为4个锁存器,(每个锁存器)+(一个输出 驱动器)+(一个输入缓冲器)就构成了一个并行口。 51系列共有4个并行口,32根I/O线,每线为双向,且有第 二功能3 位地址空间 51系列有很强的位处理功能,丰富的位操作指令,硬件 上有位累加器及位地址空间。共有221个位 地址范围:00H ~ FFH 低128位处于内部数据RAM20 ~2F字节单元,见图2-8 高93位则在SFR区,但不连续,从80H开始,每8个单元 有一个可位寻址的专用寄存器,见图2-9 位处理的数据仅为一位二进制数,指令系统中位地址及 字节地址很好区分,因大多数位操作均围绕C进行 图2-8 图2-9 注意:在内部数据RAM128 ~255共128个字节单元,SFR 只占用了26个字节,其余单元现在无定义,用户不能对 这些单元读/写,若要访问会得到一个不确定的随机数 §2―4 I/O口及相应的SFRMCS-51系列单片机,数据线和地址线低8位分时合用通道口 0,且地址高8位亦与其它信号合用通道口2,借助于P0~P3使 每个通道在程序控制下都可有第二功能即可使有限的管脚完成 更多的功能。 P0~P3四个通道口都包含: 一个锁存器(特殊功能寄存器), 一个输出驱动器 两个(P3为三个)三态缓冲器输入/输出的指令有两类:(这两类的操作是有区别的) ①读锁存器 ②读引脚 一 P0口 1 结构:书P20由一个输出锁存器, 两个三态缓冲器, 一个输出驱动电路 (由一对FET组成) 和一个输出控制电 路组成。 2工作原理:①从P0口输出A(地址)/D(数据) 当P0口输出A/D时,控制信号电平应为1,MUX与地址控制线相连②将P0口作为一般I/O口使用 i&当CPU向端口输出数据时,对应的输出控制信号电平应为0, MUX与锁存器Q的反相连 ii&从P0引脚输入(读)数据从 P0 引脚输入数据应先向 P0 口写入 1 ,使两个 FET均截止,才能用作高 阻抗,但在P0口连接外部存储器时,由于访 问外部存储器期间,CPU会自动向口0的锁存器写入0FFH,因而对用户来讲,P0口用作A/D总线时则是一个真正的双向口。 注意:有时要用一根口线去驱动一个晶体管的B极,则应向 此口写1,晶体管导通,但引脚上的电平却被拉低,若此 时再从引脚上读数据,会错读为0。为避免错读的可能性, 单片机还提供了另一类所谓读锁存器操作。特点:先读口, 随之再对读入数据修改,然后再写到端口上。 例:ORL P0,A 操作如下: 先将P0口的内容―&CPU,再将P0口的内容与A按位“相或”, 再将结果―&P0口,实现读―&修改―&写操作的指令。目 的操作数一般为I/O口的某一位或I/O口 概括如下: P0口既可作A/D总线,也可作通用I/O线,在有外部存储器扩 充时,它作为A/D总线,时序上先输出低8位地址线到外部 地址锁存器,再输入/输出指令代码或数据。在没扩展到 外部存储器,作为通用I/O口。当用作输出口时,输出级 为漏极开路形式,在驱动NMOS器件时,应外接上拉电阻; 用作输入口时,应先由软件向输出锁存器写1,然后方可 输入信息。 二 P1口1 结构:是一个8位准双向并行I/O口。输出驱动器结构与P0不同,接 有内部上拉电阻,可加速输出数据从“0‖ ―&D1‖的转变 。 在位操作方式下,P1口可进行每位单独的I/O操作,给应用 带来许多方便。在中,P1.0,P1.1有复用功能。除用 作一般双向I/O口外,P1.0用作定时/计数器2的外部输入端, 并以T2表示,P1.1用作定时/计数器2的外部控制输入,以 T2EX表示。三P2口1 结构: 2工作原理:①地址输出:若MUX接通地址端,则地址信号加到 输出端经反相器,FET在输出引脚上出现地址信 号 ②数据输出:若MUX接锁存器,则输出信号线路连通。要输 出的数据经内部总线锁存入P2,该数据出现在口2的输出引脚 上。同样P2中的数据也可由读锁存器―&内部总线读入CPU。 ③ 从引脚输入:若要将口2的某一位做输入时,先要给锁存 器写入“1‖,使FET封闭,即Q=1,经反相器=0,使FET截止, 与P2.X相连的端口=1,不影响P2.X,再经缓冲器读引脚将信 号―&内部总线,读入CPU 注意:若不使Q=1的后果,可能使Q=0,反相后=1,使FET导 通,与P2.X相连的那一端为0,使口2钳位在低电平,不 可能将高电平送入。 复位后,各引脚均为高电平 四 P3口1结构: 是一个双功能口,用作I/O口时,功能和P2一样,每位可定 义为输入/输出。当P3口工作于第二功能时,应先由软件对 输出锁存器置“1‖,第二功能是单片机的控制信息,由主机 自动产生。各位含义如下: P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD 串行输入通道 TXD 串行输出通道 INT0 (头上有“-‖) 外部中断0 INT1 (头上有“-‖) 外部中断1 T0 定时器0外部输入 T1 定时器1外部输入 WR (头上有“-‖) 外部数据存储器写选通 RD (头上有“-‖) 外部数据存储器读选通 2 工作原理 ①输出:&用于一般I/O口的输出时,选择输出功能端应为 “1‖,使与非门对Q来说是畅通的。 &用于第二功能做专用信号输出时,应使锁存器Q=1,使与 非门对选择输出功能是畅通的。 ②输入:无论该位是用作 一般I口或第二功能入口,相应的 输出锁存器和选择第二功能均应置“1‖(道理同前) 注意: 51 系列单片机所有口上的锁存器在上电复位时均置 “1‖,自然符合要求,使用者不必做任何工作 小结 P0口:地址低8位与数据线分时使用 P1口:按位可编程的I/O口 P2口:PC高8位,DPTR高8位或I/O口 P3口:双功能口 实际应用时口子常用来扩展系统,要考虑P口的输出驱动能力 一般P1,P2,P3的输出能驱动3个LS TTL输入,P0能驱动8 个LS TTL输入,都可直接驱动固态继电器工作。对NMOS而 言,P1,P2 ,P3无需外加提升电阻就可直接驱动,P0需外加 提升电阻。但当P0用作地址/数据线时,可直接驱动MOS输入 而不必外加提升电阻,实际应用时这些因素都要加以考虑五 利用端口组成8031应用系统举例 何谓最小系统?包含有程序存储器的单片机系统为最小系统。 以8031 为例学习: 8031最小系统的结构图如P24图2-14
§2-5 MCS-51单片机的引脚信号和CPU时序 一 8051 单片机引脚功能注意: 51系列单片机是一个有40个引脚双列直插式器件。 4个并行I/O口共32根引脚,分别做: 地址线 数据线 I/O口 另外有6根控制线,2根电源线,共计40个引脚 1 P0 ~ P3(已学过) 2 控制信号引脚:6根 ①ALE/PROG (头上有“-‖) &地址锁存允许信号。访问外部存储器时,当ALE的下 降沿到来时,将P0口的低8位地址信息打入锁存器 & 进 行 EPROM 编 程 时 , 该 口 又 是 编 程 脉 冲 输 入 端 (PROG头上有“-‖) ②PSEN(头上有“-‖) 为外部程序存储器选通信号,低电平有效。 &在读外部程序存储器时,每个机器周期内输出两次有效 信号 &在执行内部程序存储器中的程序时该信号无输出 & 访问外部数据存储器时, PSEN(头上有“-‖) 无有效 信号输出 ③EA (头上有“-‖)/VPP & EA (头上有“-‖)为低电平,访问外部程序存储器 & EA (头上有“-‖)为高电平,若PC值《0FFFH,访问 内部程序存储器,若PC值&0FFFH,访问外部程序存储器, & VPP为内部EPROM的编程电源(+21V)输入 ④XTAL1 振荡器的倒相放大器的输入端,使用外振荡器时,须接地电位 ⑤XTAL2 振荡器的倒相放大器的输出端和内部时钟发生器的输入,使用 外振荡器时,须接外振荡器信号 ⑥RST/VPD 为复位端。VCC处于掉电情况下,作为内部RAM的备用电源。 复位后 P0~P3 口输出高电平,体现在编程上即 P0.0 ~P3.7 全为 “1‖, SP指针重新赋值为07H,其它SFR和程序计数器PC被清“0‖,复 位后各内部寄存器初态见书P28。 常见的复位电路有两类: 上电复位 电平/脉冲方式开关复位 C +5V ───││─―――→RST/VPP R上电复位图3 电源线 VCC―编程,检验及正常工作时的电源为+5V VSS―接地端 二 CPU时序 单片机的基本操作周期为机器周期。一个机器周期可分为6 个状态,分别记作S1……S6。每个状态由两个脉冲组成(即两 相),前一个脉冲叫(相位1)P1,后一个脉冲叫(相位2)P2 ,所以一个机器周期共有12个振荡脉冲。将一个机器周期的12 个振荡脉冲分别用S1P1S1P2…S6P6表示,书P29图2-19 规定:51系列单片机的振荡频率为1.2-12MHZ,P1在每个状态 的前半周期有效。P2在每个状态的后半周有效。一般情况下, P1期间进行算术/逻辑运算,P2期间进行内部寄存器之间的传 送。图2-19为外部时钟振荡信号和ALE信号作的示意图。在每 个机器周期(S1-S6)中,ALE下降沿有两次,一次在S1P2和 S2P1,另一次在S4P2及S5P1中
(a)/(b)图具体操作: 执行单字节单周期指令/双字节单周期。 在S1P2期间读入操作码,并将其锁存到指令寄存器中 ①若为双字节指令,第二字节在同一机器周期的S4期间读出 ②若为单字节在S4期间仍有一个读操作,但这时读出的字节 是不处理的。程序计数器也不+1。不论怎样,指令都在S6P2 期间执行完。 通常,两字节码在一个周期内从程序存储器取出,但在执行 MOVX指令时例外。MOVX指令是访问外部数据存储器的单 字节双周期指令。在MOVX指令期间少执行两次取指操作, 用以寻址和选通外部数据存储器。 具体操作过程如下: 执行MOVX指令,仍在第一个机器周期的S1期间读入操作码, 在S4期间也读入下一个操作码,但读入的该码不予处理。由 第一个机器周期的S5开始送出片外数据存储器地址,随后读/ 写数据,直至第二周期无ALE信号。在第二周期的S4期间, 由于片外数据存储器已被寻址及选通,所以也不产生取指操 作。 复习思考题1 2 3 4 5 6 7 8 MCS-51单片机由哪些功能部件组成?各部分功能? MCS-51单片机引脚ALE,PSEN(头上有“-‖)各是 什么信号?功能? EA (头上有“-‖)是什么信号?对8031芯片的处理? PC及DPTR各是几位寄存器?各自的功能? 工作寄存器位于单片机内部哪一个部件中?具体地 址是如何安排的? PSW是?由哪些位组成?每一位的含义? SP是?在堆栈操作中SP的内容变化怎样? 51系列内部RAM的低128个单元按其功用可分几部分? 各部分的功能? 9 10 11 12试简述四个并行I/O口的功能 什么是SFR?51系列有那些SFR及那些是可位寻址的? 常用单片机复位方式有哪些? 一个机器周期由几个状态组成?每个状态又分为几 相? 13 为什么要了解CPU的时序? 14 位地址7CH与字节地址7CH有什么区别?位地址7CH 具体在内存中什么位置 第三章 指令系统 指令系统指单片机能执行的全部指令的集合 MCS-51单片机共有111条指令,其中 64条指令可在一个机器周期完成 45条指令可在两个机器周期完成 乘/除指令指令可在四个机器周期完成 单字节49条 双字节45条 三字节17条 系统时钟为12MHZ,有42种助记符,7种寻址方式 § 3-1MCS-51单片机的助记符语言助记符就是根据机器指令不同的功能和操作对象来描述指令, 便于记忆,理解和分类的一种符号语言。由两部分组成: 操作码―反映指令功能 操作数―代表指令的操作对象例:ADD A,#00H(一)操作码 是指令功能的英文缩写。例: 1 传送类: MOV MOVC MOVX 2数据操作类: ADD SUBB MUL | | | 加 带借位减 乘 3 程序控制: AJMP SJMP LJMP CJNE 4 逻辑操作 ANL ORL XRLDIV | 除等ACALL 等(二)操作数: 是一条指令操作的对象,功能不同指令,操作对象形式也不同 1 传送类指令: 指明操作对象从哪来(源)传到哪去(目的) 书写格式:助记符 目的地址 源地址 例:MOV A,R0 2 数据操作类: 靠运算器完成。常用到A,既参与运算又存储结果 书写格式:助记符 被运算数 运算数 例:ADD A,#00H 3 程序控制类指令: 操作对象是PC和一个数(控制去向的绝对或相对转移地址) 实际上操作数是2个,但因一个是PC,故省略不写 如:AJMP 操作数 4 逻辑操作类: 单操作数双操作数 一般 LA、RA等为单操作数而 AND 、 OR、 XRL等需双 操作数,结果CCCC&目的操作数 位移操作固定在累加器A中进行。位移只需一个操作数,操 作数可是数据,也可是地址 何谓立即数? 若操作数是数据时,被称为立即数,“#‖为其标志,分为两 种: 8位 16位操作数更常见的是存放数据的地址,这些地址通常是: 1&某一个工作寄存器区的R0 ~R7,A,B,C,DPTR等可编 址的寄存器 2 &片内数据存储器低128字节,SFR可寻址的221位 3 &片外数据存储器空间 4 &程序存储器空间 参看P33,表
例:MOV A,#03H相当于:A为:00000011MOV DPTR,#2400H 注意:1 同样是data,前加“#‖表示立即数,否则表示地址 2 同样是选定工作区寄存器的R0-R7,但既能存放数据也能 存放地址的只有R0,R1。若R0,R1前加“@‖表示其中存放地 址 否则表示存放数据。DPTR同理 3 对SFR讲,仅有直接寻址 §3-2 MCS-51 指令格式及分类 一 指令格式: 51系列单片机指令: [标号]: 操作码 目的操作数 源操作数:注释 | | |表示该指令 所在符号地 址,由字母 打头的字母 数字串组成 表示执行 什么功能 可有可无 被操作对象可是一个,也 可是两个,也可无操作数 例:MOV 74H,#00H INC A RETI 二 分类 1 单字节指令格式 操作码 这种格式只有一个字节,操作码中包含了操作数的信息。两 种情况下其指令为一字节。 (1)操作数固定,无须附加空间来指定即它可完整明确的 表示出指令的功能 例:INC A 机器代码为04 (2)操作数在工作寄存器中,其寻址变化只需3位2#码即 可表示,此时操作码占一个字节中的5位,操作数占3 位。 例:MOV A,Rn1 1 1 0 1 r r r机器代码为E8H~EFH,归纳起来基本都与A,C,Rn有关 2 双字节指令 操作码 操作数或地址 双字节指令中,操作码,操作数各占一个字节 例:MOV A,#0FH――机器代码为740FH 3 三字节指令 操作码 操作数或地址 操作数或地址 各占一个字节 例:MOV DPTR ,# data16---机器代码为指令字节数data15-8data7-090H DPH DPL 注意:指令字节数越多,占用内存单元越多,但不一定 执行时间越长。 例:乘/除法指令为一个字节,执行时间要4个机器周期。 若将111条指令按功能可分为5大类: 数据传送 28 逻辑操作 24 算术运算 25 位操作 17 控制转移 17 §3-3 寻址方式 寻址-即寻找操作数的地址。 寻址方式―是通过确定操作数的位置或地址,将操作数提取 出来的方法。51系列共有7种寻址方式 1 立即寻址: 指令中跟在操作码后面 PC
操作数的一个字节就是实际操作数 ,参加指令规定的操作.立即寻 址在立即数前加“#‖ 例:MOV A,#30H 2 直接寻址 : 指令中包含了操作数的真实地址.该地址直接给出了参加运算 或传送的单元或位,可访问三种地址空间 (1)SFR (2)内部数据RAM128个字节单元 (3)221个位地址空间 例:MOV A,30H 内部RAM : 类加器A 30H 68H 68H 3 寄存器寻址 操作数在寄存器中.指定了寄存器就得到了操作数,寄存器寻 址方式的指令均是一字节指令,以符号名称表示寄存器。 例: MOV A, R1 功能:将寄存器R1的内容送A 寄存器寻址方式的寻址范围: (1)工作寄存器组R0~R7,4组共32个寄存器 注意:指令中只能使用当前工作寄存器组中的寄存器,因此 使用前可通过对PSW寄存器中的位RS1RS0的设置来选择当 前工作寄存器组 具体操作如下:先看是4组寄存器中的哪一组,再用操作码 低3位确定组内哪一个寄存器得到地址 例:INC R3程序存储器Pc …D5 D61 1 0D0 D1片内RAM…D7… R3 …运算D20 0 0…RS1 RS0…PSW 4 寄存器间接寻址 (1)定义:寄存器内存的是操作数的地址。即操作数是通 过寄存器间接得到的,因此称寄存器间接寻址。 (2)寄存器间接寻址表示形式: 寄存器间接寻址符号@+寄存器名 (3)51系列可用来寻址的寄存器有选定工作寄存器区的R0, R1,SP,及16位数据指针DPTR 例:MOV A,@R0,设R0中的内容为30H R0 内部RAM …30HA 30H68H …68H 规定:1)用R0,R1作间接寻址,寻址范围为片内数据RAM 的低128字节和片外数据存储器的头256字节 2)用DPTR间接寻址,寻址范围为整个数据存储器的 64KB空间 3)SP用于指示堆栈操作的地址5 变址寻址 指由指令指定的偏移量寄存器和变址寄存器DPTR或PC相加 所得的结果作为操作数地址 例:MOVC A,@A+PC 功能:将PC和A的内容相加得到的程序存储器中的地址单元 的内容传送给A 设该指令执行前,A=30H,PC=22F1H 则:2 2 F 1 +) 3 0 ――――――― 2 3 2 1 (H) PC 22F1H A最后结果A的内容为38H2321H38H30H 6 相对寻址 为程序相对转移设计的 将PC的当前值+指令给出的偏移量(rel),构成程序转移的 目的地址 注意:PC的当前值为该相对转移指令的下一条指令的地址。 转移目的地址可表示如下: 目的地址=转移指令地址+转移指令字节数+rel Rel―一个8位带符号2#补码。范围:当前PC值的+127~-128之间 例:JZ 30H JZ:A=0,跳转 A=1,不跳转 转移时要刨掉操作码+操作数占的字节数,再加偏移量 本例:JZ 30H 是2字节指令 假设JZ即操作码原PC为1005H,则操作数占据1006H,刨掉 这两个单元此时PC应指向37H程序存储器… PC? 1005H PC? 1006H PC?1007H PC?00 操作码 偏移量PC 1007HALUxx …… 7 位寻址 指令能对片内数据RAM中的128位和SFR的93位进行位操作, 即对地址空间的每一位都可进行运算和传送操作 1)位寻址范围: ?内部RAM中字节地址20H~2FH的16B单元共128个2#位,位 地址为00H~7FH ?字节地址可被8整除的11个SFR中的各个有定义的位 2)51系列中位地址的表示可采用以下几种形式: ?直接使用位地址表示,如A的位的4的位地址为E4H ?采用字节单元地址加位的表示法,如 20H.5表示字节单元地 址20H的位5. ?对可位寻址的SFR可直接用寄存器名称加位的方法.如 ACC.4表示A的位4 ?使用位名称.例:PSW中位5是F0可用F0表示该位 注意:位地址与直接寻址中的字节地址形式完全一样,主 要由操作码来去分 8 小结 见书P38 § 3-4 数据传送类指令: 共28条,8种助记符,按操作方式可分为三种: ?数据传送 ?数据交换 ?堆栈操作 见下表或书P39
按操作码助记符又可分为三类:MOV MOVX MOVC 注意: ?除了在用POP或MOV指令将数据传送 到PSW时,一般传送操作不影响标志位 ?源地址的内容?目的地址后,源地址 内容不变 ?SFR只能直接寻址 几个表示法: Rn―表示R0 ~R7 Ri ― 表示R0 ~ R1 ? ―表示源,目的地址可互换 ? ―表示内容可互换一 通用传送指令―MOV 格式:MOV &目的字节 & , &源字节& 功能:传送字节变量 允许有15种源目的寻址方式组合 范围:内部数据存储器中工作寄存器Rn,片内数据RAM, SFR及A之间的传递 立即数―&A ―&Rn ―&片内RAM ―&SFR 目的 源 机器代码 操作 MOV A, #data 74data A?#data MOV data, #data 75data (data) ?#data MOV @Ri, #data 76data ((Ri)) ?#data MOV Rn, #data 78data (Rn) ?#data 例:?MOV @R0,#data 设R0的内容为20H,则指令执行结果:20H ?# data 例?:MOV 40H,#20H 1 …#20H40H#20H …例?:MOV A, #20H 例?:MOV R3,#20H 例?: MOV P1,#80H 例?:MOV R1, #82H MOV A, @R1 指令本身没错,但要注意82H是SFR的DPL的地址值,对SFR 来讲,只有直接寻址,故该种寻址方式无效,使用时要注意, 若要从DPL中取值送A,可用直接寻址方式 MOV A, 82H 就可 2 片内数据存储器(Rn, 片内RAM,SFR)与类加器A 传送数据,共6条指令 操作码 目的 源 功能 MOV A, data A ?(data) MOV A, @Ri A ?((Ri)) MOV A, Rn A ?(Rn) MOV data, A (data) ?(A) MOV @Ri, A ((Ri)) ?(A) MOV Rn, A (Rn) ?(A) 注意:SFR仅能被直接寻址,而在SFR地址范围 (128~255)中很多单元又无定义。若对之读/写会得 到不确定的值,要写入的数也被丢失。所以对内部数 据存储器来讲,间接寻址的真正范围实际上只有0~127 个单元的片内数据RAM地址 3内部数据存储器中Rn,SFR和片内数据RAM之间的数 据传送,共5条 MOV data, data MOV data, @Ri MOV data, Rn MOV @Ri, data MOV Rn, data这5条指令共有3种寻址方式: 直接寻址 寄存器寻址 寄存器间接寻址 注意:Ri与Rn的区别 例:执行一段程序后(A)=?,(R1)=?,(B)=?, (25H)=?,(P3)=? MOV 20H, #25H; MOV 25H, #10H MOV P1, #0CAH MOV R0, #20H MOV A, @R0 MOV R1, A MOV B, @R1 MOV @R1, P1 MOV P3, P1 4 目标地址传送 1 条指令 MOV DPTR , #data16 功能:将16位常数装入数据指针 例:MOV DPTR,#2003H二 外部数据存储器(或I/O口)与A传送指令―MOVX 格式:MOVX &目的字节& &源字节& 功能:外部传送 共4条指令 MOVX A, @DPTR MOVX A, @Ri MOVX @DPTR, A MOVX @Ri, A 注意:?上述指令有2条采用DPTR作间址寄存器。因DPTR 为16位地址指针,所以这2条指令可寻址外部RAM的整个 64KB空间,另2条采用R0,R作8位地址指针,寻址范围只 限于外部RAM最低256个单元 ?外部数据传送采用MOVX,内部数据传送采用MOV体现了 51对内部RAM和外部RAM的独立编址,采用不同的指令 访问。 ?外部RAM单元只能与累加器A进行数据交换 三 程序存储器向A传送指令―MOVC 共2 条 格式: ? MOVC A, @A+PC ? MOVC A, @ A+DPTR 功能:完成从程序存储器读取数据的功能 注意:DPTR虽说是数据存储器指针,但也应用于程序存储器,显示 数据,故此时可指向程序存储器 注意:(1)这2条指令均为一字节指令 (2)都采用了基址寄存器+变址寄存器的间接寻址方式 (3)这2条指令主要用于查表 (4)2条指令使用的基址寄存器不同,因此适用范围也不同 理解:指令?以PC为基址,在CPU取完操作码时PC会自动+1,指向 下1条指令的第一字节地址,所以此时的PC已不是原值而是 PC+1。又因为A中的内容为8位无符号数,就使得该指令查表 范围只能在以PC当前值开始后的256个字节范围内,使表格 地址分配受限制,同时编址时还需进行偏移量的计算 偏移量DIS=表首地址―(该指令所在地址+1)…例: 原来PC?1000H PC ?1001H操作码PC最大 活动范 围?对DPTR作基址寄存器,DPTR可任意赋值。因该指令寻址范围是 整个程序存储器的64KB空间。 缺点:若DPTR已有它用,在赋首地址之前要保护现场,执行完查表 后再予以恢复。… 256 … … 例:编制根据累加器A中的数(0-9)查其平方的子程序 解:COUNT:PUSH DPH; 保护现场 TABLE PUSH DPL; MOV DPTR, #TABLE;赋表首址到DPTR MOVC A, @ A+DPTR ;据A的内容查表 POP DPL; POP DPH ; RET ; 返回主程序 TABLE: DB 00 DB 01 DB 04 DB 09 DB 16 DB 25 DB 36 DB 49 DB 64 DB 8100H 01H 04H 09H 10H 19H 24H 31H 40H 51H 四 数据交换指令 共5条,完成A和内部RAM单元之间的字节或半字节交换 1 字节交换 格式:XCH A,data XCH A,@Ri XCH A,Rn 功能:完成A与内部RAM单元内容的全字节交换 例:设(R0)=20H,(A)=3FH,(20H)=75H,则执行 XCH A, @R0 后(A)=?,(20H)=? 2 半字节交换 将A与RAM单元内容的低4位进行交换 格式:XCHD A, @Ri 例:(R1)=30H,(A)=67H,(30H)=84H,则执行 XCHD A,@R1 后(A)=?(30H)=?A 6 | 730H 8 | 43 累加器自身半字节交换 完成A内容高4位与低4位的交换 格式:SWAP AA 高4 | 低4 五 栈操作指令 1 入栈 格式:PUSH data 2 出栈 格式:POP(sp)?(sp)+1 ((sp)) ?(data) (data) ?((sp)) (sp) ?(sp)-1data特点:?后进先出 ?堆栈编址采用向上生成方式,即栈底占用较低地址,栈顶 占用较高地址 入栈:先(sp)+1?sp,指向栈底的上一个单元后把直接寻址单元的内 容?sp所指的单元 例:…dataSP+1? SP? (data)栈底 出栈:先弹出栈顶内容到直接寻址单元后(SP)-1 ?sp 形成新的堆 栈指针 PUSH,POP是一个逆过程。常用在保护恢复现场当中,使程序执行 迅速,安全 六 小结 (1)对不同存储器空间采用不同指令访问 MOV MOVX 的区别? MOVC (2)数据传送类指令不影响PSW (3)51指令没专门I/O指令,采用数据传输指令进行I/O操作§3-5 逻辑操作指令共24条,9种助记符,完成各种逻辑运算。 按操作数可分为: 单操作数 双操作数 单操作数―专门对A进行逻辑操作,主要是清“0‖,求反,左/右移等, 结 果仍在A中 双操作数―是A和第二操作数间执行逻辑与,或,异或操作。 #立即数 第二操作数可是:Rn 片内数据RAM单元 SFR 对应的寻址方式:寄存器寄存器间址 直接寻址也可将直接寻址单元作为第一操作数 一 逻辑“与”―共6条指令 ANL A, Rn; ANL A, ANL A, @Ri ANL A, #data ANL data, A ANL data, #data 逻辑“与”按“位”操作 二 逻辑“或”―共6条指令 ORL A, Rn ORL A, data ORL A, @Ri ORL A, #data ORL data, A ORL data, #data三 逻辑“异或”―共6条 XRL A, Rn XRL A, data XRL A, @Ri XRL A, #data XRL data, A XRL data, #data 四 累加器清“0‖,取反―共2条 CLR A CPL A五 1移位指令―共4条 循环左移 RL A;A7CYAn+1?(An), A0A0 ?(A7)2 带进位循环左移动 RLC A; An+1?(An), CY ?(A7),A0 ?(CY) A7CYA0 3循环右移RR A ; (An) ?(An+1), (A7) ?(A0) A7CYA04带进位循环右移 RRC A; (An) ?( An+1), (A7 ) ?( CY) , (CY) ? (A0)A7CYA0六 举例: 例1:将内部RAM中30H单元的最高位取反,其它位保持不变 解: MOV A, 30H XRL A, # 80H MOV 30H, A 例2:从P1口输入一个数据,将其高4位变为“0‖后存入内部 RAM30H单元中 解:MOV A, P1 ANL A, # 0FH MOV 30H,A 例3:利用移位指令实现累加器A的内容乘6 解:CLR C RLC A MOV R1, A CLR C RLC A ADD A,R1 例4:双字节数移位。将R2,R3中的一个双字节数左移一位,最低位补零, 最高位存CY中。设R2中为高字节,R3中为低字节。 解:CLR C MOV A, R3 RLC A ; 低字节左移一位,高位?CY,最低位补“0‖ MOV R3,A MOV A,R2 RLC A; 高字节左移一位,低字节原最高位进入最低位 MOV R2,A通过例子看出?逻辑操作按位进行 ?ANL 常用来屏蔽字节中的某些位,欲清除该位用“0‖去“与”,保留 该位用“1‖去“与” ?ORL常用来使字节中的某些位置“1‖,欲保留不变的位用“0‖去“或”, 欲置位的位用“1‖去“或” ? XRL用来对字节中某些位取反。若取反用“1‖去“异或”,想保留用 “0‖去“异或”。 注意:当用逻辑与,或,异或指令修改一个并行I/O口输出内容时, 则原始值将从该输出口的锁存器中读取,而不是从该输出口的引 脚读取。 § 3―6 算术运算类指令 51的算术指令共25条,8种助记符。全部指令均是8位数据运算 一加/减运算指令 1 加法指令 ?一般加法指令 共4条,被加数总是A,且结果也放入A中 ADD A, #data ADD A, data ADD A, @Ri ADD A, Rn 功能:源内容与A内容相加,结果送目的A 注意:运算影响AC,CY,OV,P 溢出判断规则: 溢出―运算结果的最高的位6与符号位7二者只有一个产生进位(或 借位时)认为溢出,OV将置位 不溢出―若二者同时有进位或均无进位时,将不认为溢出 例:A=49H,则执行 ADD A,#6BH01001001 +) 0110101110110100结果:A=B4H,OV置“1”,表示两正数相加和变为负数, 或两负数相加和变为正数的错误结果 ?带进位加法指令 共4条,被加数总是A,结果也放入A中 ADDC A, #data ADD C A, data ADDC A, @Ri ADDC A, Rn 这些指令除考虑进位外,其它与一般加法指令完全相同,影响PSW 的状态位,主要用于多字节数的加法运算 ?加“1‖指令 共5条,对指定的单元内容+D1‖ INC A INC Rn INC data INC @Ri INC DPTR 注意: ? +D1‖指令不影响PSW,前4条指令对一个字节单元内容+1,后一条给16位寄存器内容+1?若用该指令使I/O口内容+1时,其原始值将从输出数据锁存 器读入,非输出口引脚 例:有两个双字节数,按低字节在前分别存放在内部RAM的30H,31H,和 40H,41H中,求两数的和并存于内部RAM30H,31H单元,假定和仍不 超过2字节 解:MOV R0, #30H MOV R1, #40H MOV A, @R0ADDMOVA, @R1@R0, AINC INCMOVR0 R1A, @R0ADDCA, @R1AMOV @R0 , 2 减法指令 51系列没有不带借位的减法 ?带借位减法指令共4条。被减数和结果均存在A中 SUUB A,#data SUUB A, data SUUB A,@Ri SUUB A,Rn 注意: ?减法运算影响PSW的CY,OV。CY=1,表示有借位,CY=0 表示无借位。OV=1表示带符号数相减时,从一个正数中减去 一个负数得到一个负数或是从一个负数减去一个正数得到一个 正数的错误情况。 判定法则同加法:由位6,位7借位状态异或=1而得 ?单字节相减时,须先清借位位,以免相减后结果出错 例(A)=D9H,R0内容为87H,求相减结果
解:CLR C -)
SUBB A, R0 ―――――――― 则A=52H,CY=0,OV=0 ?减“1‖ 共4条指令DEC A, DEC data DEC @Ri DEC Rn 注意:若用该指令使I/O口内容-1时,其原始值将从输出数据锁存 器读入-1, 再写入锁存器,非对输出口引脚内容-1 二 乘/除法运算指令 共2条指令。乘/除各一条,完成2个8位无符号整数的乘法或除法运算。 均为一字节指令,执行时需4个机器周期 1 乘法指令 格式:MUL AB 功能:A与B内容相乘,结果为16位无符号数。高字节? B ,低字节送? A 注意:?若乘法结果&255,即B的内容不为“0‖,溢出标志OV置“1‖, 否则置“0‖ ?该指令执行后,CY总被清“0‖ ?乘/除法均是对累加器A和寄存器B操作,都影响PSW 2 除法指令(A)?(B) ? (A) , (B) ? ? 结果: (商) (余数) 注意: ? A为被除数,B为除数,两数均为8位无符号整数,运算结果, 商送A,余数送B,若除数为“0‖,结果不定,溢出标志OV置“1‖, 否则置“0‖ ?执行后CY总是被清“0‖ 格式:DIV AB; 例:设(A)=80H,(B)=32H,则 MUL AB ?) __________________________结果:1900H,无进位,CY=0 其中(B)=19,(A)=00 积的10#为即 1900 H&FFH,OV=100 00 ____________________________ 000 例(A)=87H,(B)=0CH, DIV AB1100 商为1011送入A,余数为0011送入B1
110011 三 二―十进制调整指令 格式 :DA A 条件及方法:?若(A0-3)&9 或AC=1 则(A0-3)? (A0-3)+06H ?若(A4-7)&9或CY=1 则(A4-7) ? (A4-7)+60H 说明: ?两个压缩的BCD码按2#数相加,须经过本指令调整后,才 能得到压缩型的BCD码和数 ?因要用到CY或AC,因此须跟在加法(ADD,ADDC)指 令之后才能使用注意:DA不能对减法进行10#调整。若要对减法进行调整, 方法:将BCD数减法化为BCD加法运算,再进行调整。具体讲将减 数化为10#数的补码再进行加法运算 例:将存于外部RAM中2000H单元的一字节2#数(假定其值小于64H即 100D)转换为10#,以2位BCD码的形式存于内部RAM的30H的单元 中 解:MOV DPTR,#2000H;将DPTR指向2000H MOVX A, @DPTR;将2#数从片外取到片内的A中 MOV B, #0AH; 置除数为10 DIV AB ;分离十位,个位数 SWAP A ;将分离出的十位数的值(0-9)送入A的 高4位 XCHD A, B; 将A与B低位交换结果 (或ORL A, B) MOV 30H, A 四 1小结 ?算术运算类指令大多影响PSW ?INC,DEC不影响标志位 ?MUL,DIV对标志位的影响有自己的特殊性 ?二―十进制调整指令只影响CY,影响方式由调整规则决定 2 减法只有带借位减法指令 3 10#调整指令,只能调整BCD数加法,运算后的结果对BCD数减 法要转换为加法后再调整 4 不能用INC,DEC后DA A实现?1运算 若想实现须如此操作:+1: ADD A, #01H DA A -1:ADD A,#99H DA A § 3―7 位操作指令 共17条,均以位为处理对象,分别完成位传送,位状态控制,位逻 辑操作,位条件转移等功能。 按指令存储长度分为: 单字节双字节 三字节 见书P57表3―9或下表 一 位数据传送指令 共2条。 格式:MOV C, MOV bit, C 功能:完成可位寻址的各位与位累加器C之间互相传送内容 注意:2个可位寻址数之间无直接的传送指令,因此若要完成这种传 送,可通过CY作中间媒介
例:将位地址1AH内容?位地址3BH 解:,MOV F0,C; 暂存CY到PSW.5 MOV C,1AH; CY?(1AH); MOV 3BH,C; 3BH ?(C) MOV C,F0; 恢复CY内容 二 位状态控制指令 1 位清“0‖ CLR CLR C; 例:片内数据RAM字节地址25H内容为34H, 执行 CLR 2AH 结果:? 解:34H为B,2A为字节地址25H第2位的位地址,而2AH的 内容为“1‖,故25H内容变为此30H 2位求反 CPL CPL C; 3 位置位指令 SETB SETB C; 例:SETB P1.7(设P1=49H=B,即P1.7=0) 结果:P1=B=C9H三 位逻辑操作指令 共2种,逻辑“与”,逻辑“或” 1 位逻辑“与” ANL C, C ?(两位地址内容相与结果) ANL C, / C ?( 先将bit位地址内容取反再与“C‖相与结果) 2 ORL ORL位逻辑“或”指令 C, C, /四 位条件转移指令 分为: 判C转移判直接寻址位状态转移均为2字节指令 1 判C转移 JC rel;40―;若(C)=1,则(PC) ?(PC)+2 (PC) ?(PC)+ rel, 否则顺序执行 JNC rel;若(C)=0,则(PC) ?(PC)+2 (PC) ?(PC)+ rel, 否则顺序执行例:ORG 2000H CLR C; JC L1; CPL C; JC L2; L1: … … L2: 2 判直接寻址位转移指令均为3字节指令 JB bit, 20若(bit)=1, 则(PC) ?(PC)+3 (PC) ?(PC)+ rel, 否则顺序执行 若(bit)=0,则(PC) ?(PC)+3JNB bit, 30 (PC) ?(PC)+ rel, 否则顺序执行 若(bit)=1, JBC bit, 10 则(PC) ?(PC)+3 (PC) ?(PC)+ rel,(bit) ?0;否则顺序执行 例:?MOV P1, #0CAH; MOV A, #56H; JB P1.2, L1; JNB ACC.3, L2;情况 L1:… L2: … #43H; L1; L2;(P1) ? (A) ? (P1.2) =0不转,继续执行 (ACC.3)=0,转L2处执行例:?MOV A, JBC ACC.2, JBC ACC.6, L1: … … L2:(A) ?B (ACC.2)=0不转 (ACC.6)=1转L2,且(ACC.6)?0 例:欲将2个位地址20H,21H 中的内容异或,结果放入位地址 22H中 ― ― 解:异或公式Z=X?Y=XY +X YMOV C, 21H; ANL C, /20H; MOV 22H,C; MOV C,20H; ANL C, /21H; ORL C, 22H; MOV 22H,C;暂存中间结果 § 3―8 控制类转移指令单片机有一定的智能作用,主要是控制转移类指令的功劳。控制指 令可控制程序的走向,所以其作用区间必然是程序存储器。该类指 令可分为两种: 参看书P62 程序转移 子程序调用和返回 一 程序转移指令 1 无条件转移 该指令控制程序计数器从现行值转移到目标地址,该目标地址可经 直接,间接或相对寻址得到。 LJMP―长转移 可分为4种:AJMP―绝对转移 SJMP―相对短转移JMP@A+DPTR―间接转移 (1)长转移指令 格式:LJMP;addr16, (PC)?addr0―15 功能:完成将16位地址?PC,实现程序转移。为三字节指令,本指 令不影响标志位 (2)绝对转移指令 格式:AJMP addr11; 功能:将PC内容+2,使PC (PC) ? (PC+2) 指向本绝对转移指令的下一 条指令,然后将addr11送入 (PC0-10) ? addr0-10 PC的低11位,PC的高5位 (PC11-15)不变 保持不变,形成新的PC值, 实现程序的转移。 本指令转移范围:本指令的 下一条指令地址所在2K页面 之内。本指令不影响标志位 页面概念? 定义256字节为一个页面,故2K可分为8个页面。则AJMP 指令操作码形成如下表:地址页 a10-a8 000 001 010 011 100 101 110 111操作码 01H 21H 41H 61H 81H A1H C1H E1H页内寻址 a7_-a0 0(8) 1(9) 2(A) 3(B) 4(C) 5(D) 6(E) 7(F) 例:AJMP 0397H 在程序存储器中的地址为1880 H,执行该指令后PC从哪执行? 解:执行此指令时,PC=1880H,PC+2=1882为下 一条指令地址,转移目的地址为PC+2的高5位不动,低位从0 397H传送中获得。0001 1000 1000 0010高5位不动 0397H:0000 0011 1001 01110001结果: 11011B1001901117 程序转移到1B97H继续执行 例2:在地址1FFEH有一绝对转移指令AJMP017AH, 则PC+2=2000H,将11位地址?PC低11位,则PC转 移到217AH执行0010000000000000高5位不动 0000 0001 0111 10100010结果: 200011011171010A (3)相对短转移指令 格式:SJMP rel 功能:将PC内容加2, 再与rel相加形成转移目的地址。 rel是 8位补码表示的相对偏移量, 指令转移范围是以本指令所在地址 +2为基准,向低地址转移128B,向 高地址转移127B 优点:指令中只给出了相对转移 地址,不具体指出地址值,若 修改程序只要相对地址不变,该指令 就不需做任何改动(PC) ?(PC)+2 (PC) ?(PC)+rel (4)间接转移指令 格式:JMP @A+DPTR; 功能:(PC)?(A)+(DPTR) 为一字节指令。指令执行后不影响A和数据指针中的原内容,不影响 PSW 与前三条指令的区别:转移地址不是汇编或编程时确定的,而是在 程序运行时动态决定的,由于此特点,可在DPTR中装入多分支转移 程序的首地址,由A来动态选择其中某一个分支予以转移。即可用一 条指令代替众多转移指令,实现以DPTR内容为起始的256个字节 范围的选择转移。 例:书P65 2 条件转移指令 某条件满足时,转移进行,否则程序将顺序执行。目标地址在以下 一条指令的起始地址为中心的256字节范围中(-128~+127) (1)累加器判零转移指令(A) 格式:JZ 累加器为“0‖转移 JNZ 累加器不为“0‖转移 均为双字节指令。该指令执行后不改变A的值,不影响PSW由右表知,PC+2后再+偏移量 即得转移地址pc?+0 +1 +2JZrelrel 例:书P66 (2)比较转移指令:共4条 格式:CJNE 目的字节, 源字节, rel CJNE A, #data, CJNE A, data , CJNE @Ri, #data, CJNE Rn , #data , 功能:比较前两个操作数,若二者不等转移,否则顺序执行。 均为三字节指令。 转移地址:(PC当前值+3) ?(PC)+rel 分3种情况: ?若目的操作数=源操作数,则CY=0,(PC)?(PC)+3 ?若目的操作数&源操作数,则CY=0,(PC)?(PC)+3+rel ?若目的操作数&源操作数,则CY=1,(PC)?(PC)+3+ 该指令影响CY,可利用本指令判别两数大小 (3)循环转移:共2条 格式:DJNZ 字节 , 功能:先将操作数内容-1,然后判断。若操作数不等于“0‖,则转移 到指定单元,否则顺序执行。具体为本2条 ?DJNZ data, 为3字节指令 (data) ?(data)―1 data rel 若data=0,则(PC) ?(PC)+3 若data ≠0,则(PC) ?(PC)+3+rel ?DJNZ Rn, 为2字节指令(Rn) ?(Rn)―1 若Rn=0,则(PC) ?(PC)+2 若Rn≠0,则(PC) ?(PC)+2+rel11011rrr rel例:将内部RAM中从data单元开始的10个无符号数相加,结果送入内部 RAM的SUM单元。设相加结果不超过10#的255 解: MOV R0,# MOV R1, #0AH; CLR A; LOOP: ADD A, @R0; INC R0; DJNZ R1, LOOP; MOV SUM , A 例:软件延时 CLR P1.7; MOV R2, #18H; LOOP: DJNZ R2,LOOP; SETB P1.7 编程思路:DJNZ指令执行时间为2个机器周期,循环一次可产生2个机 器周期延时,上述程序可在P1.7 引脚输出一个50us的脉冲。 具体算法:当主频为12MHZ,循环次数为24时(#18H),可产生48个 机器周期的软件延时,而一个机器周期=12/晶振频率 =12/12=1us,(1:1*106=x:12)所以执 行DJNZ R2,LOOP共需24?2=48us,执行MOV R2,#18H为一个机器 周期需1us,SETB P1.7为一个机器周期需1us,总共需 1+48+1=50 该程序段功能:先清P1.7再经过49us延时,在P1.7引脚上输出一个50us 的脉冲 二子程序调用和返回指令LCALL (长调用) (绝对调用)分为:ACALL和它们配对的子程序返回指令RET 注意:LCALL及ACALL在调用前,要把执行完该指令后PC的内容自 动压入堆栈,再作addr16(addr11) ?PC的工作。Addr16或addr11称子程序 首地址或子程序入口地址。 RET―子程序返回指令,即从堆栈中把原出发地址弹回PC,让CPU返回 执行原主程序。由此知,LCALL及ACALL指令在主程序中,RET指令 一定在子程序中 1 长调用指令 格式:LCALL addr16; 为3字节指令,可在64KB范围 内调用(PC) ?(PC)+3; (SP) ?(SP)+1,((SP)) ?(PC)7~0; (SP) ?(SP)+1, ((SP)) ?(PC)15~8 (PC) ?addr16例:设(SP)=53H,子程序首地址在3000H单元,并以标号STR表 示,在(PC)=2000H处执行指令 LCALL STR 则 (PC) ?(PC)+3=2003H; (SP) ?(SP)+1=53+1=54H; ((SP)) ?PC0~7,即(54H)=03H; (SP) ?(SP)+1=55H,(55H)=20H PC将变为3000H 2 绝对调用 格式:ACALL addr11; 2字节指令,11位地址, 限于2K地址内调用 例:LCALL 2678H 地址 2345H,执行后为2347H;即 :即从地址 2678H开始执行(PC) ?(PC)+2 (SP) ?(SP)+1 ((SP))?(PC7~0) ((SP))?(SP+1) ((SP))?( PC15~8) (PC10~0) ?addr10~0 (PC15~11)不变(PC15-8) ?((SP))3 子程序返回指令 格式:RET 功能:子程序结束返回主程序(SP) ?(SP)-1 (PC7-0) ?((SP)) (SP) ?(SP)-1 4 中断返回指令 格式:RETIPC15-8) ?((SP)) (SP) ?(SP)-1 (PC7-0) ?((SP)) (SP) ?(SP)-1注意:上述2指令都完成从堆栈中取出以前压入的16位地址送入PC,从而完成子程序的返回。但中断服务子程序返回指令除完成上述功 能外,还要清除中断响应时被置位的优先级状态触发器,开放较低 级中断及恢复中断逻辑等操作 5 空操作指令 格式:NOP; (PC)?(PC)+1; 单字节指令 功能:控制CPU不作任何事情,只消耗这条指令执行所需的一个机 器周期,常用于等待或延时。 例:利用NOP产生方波 解:CLR P2.7; NOP; NOP; NOP; 4us NOP SETB P2.7 设晶振fosc=12MHZ,则一 个机器周期=12/fosc=12/12=1us, NOP可产生4us的延时。 第 九章 汇编语言及应用程序设计名词解释: 1 汇编语言源程序 用汇编语言编写的程序称之为汇编语言源程序。 2 目标程序 将可在计算机上直接运行的机器语言程序称之为目标程序 3 汇编 由汇编语言源程序“翻译”为机器语言目标程序的过程称为汇编,该 翻译过程可人工完成,也可由计算机系统软件―汇编程序完成,即 机器汇编 § 9―1 伪指令 用51指令编的程序都可一一产生对应的目标程序。但有一些指令,如 指定目标程序或数据存放的起始地址,给一些指定的标号赋值,在内 存中预留工作单元,表示源程序结束等。这些指令并不产生目标程序, 不影响程序执行,仅产生供汇编用的某些命令,以便汇编时执行一些 特殊操作,称为伪指令 一 设置起始地址伪指令 ORG 格式: ORG nn | |伪指令操作 码助记符 16位2#|后续源程序 经汇编后目 标程序安排 存放位置|存放目标程 序起始地址ORG总是出现在每段源程序或数据块的开始 。注意:一般ORG定义地址空间由小?大,不能重叠。若源程序开始不放ORG指令,汇编将从0单元开始编排目标程序 例:ORG 2000H MOV A, 20H; … 表示后续目标程序从2000单元开始存放ORG 3000H MOV A, 20H; ORG 2700H MOV A,21H; 大地址在前,拒绝执行 ORG 2000H MOV A, 20H; ORG 2001H MOV A,21H; END. 有重叠,拒绝执行 二定义字节格式: & 标号& : DB& 项或项表& | 指一个字节,数或字符串 或以引号括起来的ASCII 码字符串 功能:将项或项表中的数值存入从标号开始的连续单元中 例:here: DB 84H; DB 43H; here 84H注意:项或项表若为数值,取值范围为00~FFH 若为字符串,长度在80个字符内here+143H 三 定义字 格式: & 标号& : DW & 项或项表& 功能:将项或项表中的数值存入从标号开始的连续单元中。与DB不同 (8位)DW为16位数。汇编时,机器会自动按高位字节在前,低位字 节在后的格式排列。所以DW常用来建立地址表 例:ABC:DW 1234H,0008H; 与 ABC: DB 12H,34H,00H,08H等价ABC+012H 34H 00H 08H+1 +2 +3 四 预留存储器区DS或DEFS 格式:& 标号& : DS & 表达式& 功能:由标号指定单元开始,定义一个存储器区,以备源程序使用。存 储区内预留的存储单元数由表达式的值决定。 例: ORG 3C40H T: DS 10…含义:由3C40H地址开始保留连续10个存储单元的存储区 DB,DW,DS均是据源程序需要或用来定义程序中用到的数据或为中间 结果保留一部分存储空间,一般放在源程序之后。起始地址可用ORG指 定,也可不指定。若伪指令紧跟在源程序之后,则汇编后的数据块将紧 挨着目标程序的末尾开始存放。 五 为标号赋值EQU 格式: & 标号& : EQU nn或表达式 功能:将语句操作数的值赋于本语句的标号 例:AB:EQU 1000H; 给标号赋地址值为1000H 注意:同一程序,用EQU对标号赋值后,该标号的值在整个程序中 不能再改变 六 源程序结束END 格式: & 标号& : END & 表达式& 功能:END告诉汇编程序,该程序段已结束。不论END在哪出现, 汇编程序不汇编其后的语句。END的标号可有可无。 § 9―2 汇编语言源程序汇编过程 由汇编语言编写的源程序,须―变成?机器语言才能被单片机执行。 ??若由人工完成:?先由指令查出每条指令对应的机器代码,列一 张和源程序对应的机器程序清单。 ?在监控程序管理下,从键盘直接? 计算机内存。 人工方法效率低,易出错,麻烦。 ?现一般都用微机系统或开发装置汇编,可在同一计算机中既汇编 源程序,又执行汇编后的目标程序,即自汇编。 ?? ?后来也有采用交叉汇编。用计算机对源程序汇编,再将目标程序 打印成清单输入或通过介质转存到小型或专用微型机中。单板机一般用 此法。 1 自动编排目标程序中指令存放地址 2 源程序翻译?机器码 3 分析源程序语法。若出错,给出错误信息 4 输出目标程序及源程序文件列表 §9―3 汇编语言程序基本结构及程序设计举例 和大多数高级语言编程一样,单片机的汇编语言也有4种编程形式顺序结构 分支结构 循环结构 子程序结构 一 顺序结构形式: 如前讲例题,将2位地址异或,放入另一单元 二 分支结构―通过条件转移指令实现 分为: 单分支 多分支 三 循环结构 程序循环是通过条件转移指令进行控制的。 包括4个部分: 循环准备―设循环次数,起始地址,结果初值 循环体―循环程序的主体,重复执行部分循环修改―修改次数及参变量循环控制部分―由循环结束条件判断是否结束循环 四 子程序结构 1 子程序应具备特性 ?通用性―必须适应各种应用程序的调用。子程序的参数是可变的。 ?可浮动性―子程序可不参加任何修改放置在存储器的任何区域。这 要求子程序设计中应避免使用绝对转移指令。子程序的首地址也该用 符号地址 ?可递归性及可重入性? ?子程序可 自己调用 自己子程序可同时被多个程 序调用2 参数传递方法 ?传递数据 将数据通过R0~R7或A来传送。 具体操作:调用子程序前将数据送入寄存器中,子程序就对这些寄 存器中的数据进行操作,子程序执行后,结果仍由寄存器送回 ?传递地址 数据存于数据存储器中,参数传递时用R0,R1,DPTR传递数据存 放的地址。调用结束,结果也放在数据存储器中,传送回的也是寄 存器中的地址 ?堆栈传递参数调用前,将要传递的参数?堆栈,进入子程序后,再将堆栈中的参 数弹出到R ~ 0R7或其它内部RAM单元。弹出时,堆栈顶2个字节数 据应是断点地址 3 现场保护 进入子程序,应注意除了要处理的参数数据和要传递回主程序的参 数之外,有关的内部RAM单元和工作寄存器的内容及各标志状态都 不因调用子程序而改变。 现场保护:一旦进入子程序,就将子程序中使用的或会被改变内容 的工作单元的内容压入堆栈。子程序处理完,将要返回前,将堆栈 中的数据弹出到原来对应的工作单元,恢复原态,再返回。 4 子程序接口说明 包括:?子程序名 ?子程序功能;给自己或读者看的 ?入口参数及格式 ?出口参数及格式 ?程序中使用的寄存器和工作单元 ?调用?设计举例:1 定时或延时 例1: MOV R5,#TIME; LOOP: NOP; NOP; DJNZ R5, LOOP;(一个机器周期) (一个机器周期) (一个机器周期) (二个机器周期) 设晶振fosc=12MHZ,, 则一个机器周期=1us,一次循环4us.故 最小延迟时间:4 最大延迟时间:=1024 长时间循环可加多重循环 2 算最大定时时间 设:Fosc=12MHZ; MOV R5, #TIME1; LOOP1: MOV R4, #TIME2; (一个机器周期) LOOP2: NOP; (一个机器周期) NOP; (一个机器周期) NOP; (一个机器周期) DJNZ R4, LOOP2; (二个机器周期) DJNZ R5, LOOP1; (二个机器周期) 内循环一次最大占时(1+1+1+2)*256 外循环一次最大占时((1+1+1+2)*256 +2+1)*256 2 逻辑操作 计算机的智能作用表现在它有判断功能。某些过程中,常用到逻辑 判断,以决定走向。判断其实质即对逻辑函数程序进行模拟。 51单片机具有丰富的位操作指令,为用程序模拟各种硬件逻辑功能 提供了方便。利用逻辑指令可组成任何逻辑函数。 (1)“与”程序模拟 当完成一件事的所有条件均满足,该事件才会发生,为“与”逻辑关 系。 如某控制用的计算机在执行初始化程序后,需接收到: ?准备就绪信号为“1‖ ?主回路工作正常信号为“1‖ ?启动开关闭合信号为“1‖ 方可指令主程序,否则循环检测,等条件满足。设该3个信号由P1口 的P1.2,P1.4,P1.6位输入,分别称D2,D4,D6则当D2=D4=D6=1时, f=D2=D4=D6=1,方执行主程序,否则等待。 MOV A, ANL A, CJNE A,P1; #54H; #54H, L1;… MAIN:…例:用软件实现 F=XY W+/(XYZW+XYZ) 解:令 X Y Z | | | 20H.0 20H.1 20H.2―W | 20H.3F | 20H.4TEMP | 20H.5 MOV ANL ANL MOV ANL ORL MOV MOV ANL ANL ORL MOV SJMP END.C, C, C, TEMP, C, C, TEMP, C, C, C, C, F, $X; Y; Z; C; W; TEMP; C X; /Y; W; /TEMP; C; 3 代码转换 例:将两位BCD码十进制数转换成相应的ASCII码,存入两个内部 RAM单元 解:假设两位BCD码存放在内部RAM的20H单元,转换后的ASCII码 存在21H和22H单元,高位数存放在21H单元 分析:数字0-9的ASCII码为30H-39H。本题要将一个字节内的两个 BCD码拆开,放到另外两个单元的低4位,并在其高4位赋 0011H。可用XCHD将个位BCD码与22H单元的低4位交换,在 高4位添上0011,完成一次转换。再用SWAP将高位BCD码转换 到低4位,并将高4位变为0011,完成第2次转换。先清22H单元 为“0‖,便于编程。 MOV R0, #22H; MOV @R0, #00H; MOV A, 20H; XCHD A, @R0; ORL 22H, #30H; SWAP A; ORL A, #30H; MOV 21H, A;本题也可用除法完成。BCD码送A 低位BCD码送22H单元 完成低位转换 高位BCD码转换到低位 完成高位转换 送高位ASCII码 例2:8位2# ?3位BCD数 将R3中的8位无符号2# ?3位BCD数,十位,个位为压缩BCD数?R5, 百位数?R4的低4位。 分析:将8位2#?100,商为百位数,再将其余数?10,商为十位数, 最 后的余数为个位数。 MOV A, R3; MOV B, #100D; DIV AB; MOV R4, A; BCD码的百位数已求出 MOV A, #10D; XCH A, B; 将第1次除剩下的余数送A,将“10‖送B DIV AB; 分离十位数,即商为A,余数为B即为个位 SWAP A; 将十位数移到A的高4位处, ADD A, B; 使十位占半个字节,个位占半个字节 MOV R5, A; 将BCD码的十位,个位存入R5中 4 算术运算程序 例:多字节2#减法 被减数首址?R0,减数首址?R1, 2数字节长?R2, 相减结果被减数?所在单元。 多字节2#按低字节在前的顺序存放 解: CLR C; LOOP: MOV A, @R0; SUBB A, @R1; MOV @R0 A; INC R1; DJNZ R2, LOOP 5 其它编程 复习思考题 1 MCS―51有几种寻址方式?各用于访问哪种存储器空间?列出 寻址范围 2 要访问特殊功能寄存器,可使用哪些寻址方式? 3 什么是指令系统?简述MCS―51的指令格式。 4 SJMP指令的转移范围是256KB,AJMP指令的转移范围是2KB, 所以程序中的SJMP指令均可用AJMP代替。这种说法是否正确, 为什么? 5 请用数据传送指令实现下列要求的数据传送 (1) R0的内容输出到R1 (2) 内部RAM20H单元的内容传送到“A‖中 (3 ) 外部RAM30H单元的内容送到R0 (4) 外部RAM30H单元的内容送到内部RAM 20H单元 (5) 外部RAM1000H单元的内容送内部RAM20H单元 (6) 程序存储器ROM2000H单元的内容送R1 (7) ROM2000H单元的内容送内部RAM20H单元 (8) ROM2000H单元的内容送外部RAM30H单元 (9) ROM2000H单元的内容送外部RAM1000H单元 6 对下列程序进行手工汇编 ORG 1000H CLR A MOV R0,#20H LOOP: CJNE @R0, #24H,NEXT SJMP QUIT NEXT: INC A INC R0 SJMP LOOP QUIT: MOV R1, A HALT: SJMP HALT END 7已知片内RAM中(A)=78H,(B)=04H,(R1)=78H, (PSW)=80H,(78H)=0DDH,(80H)=6CH,分别写出 下列指令的执行结果和PSW的状态 (1) ADD A, @R1; (2) ADDC A, 78H; (3) SUBB A, #77H; (4) INC R1; (5) DEC 78H; (6) MUL AB; (7) DIV AB; 8 说明下列程序的功能: MOV R0, # MOV A, @R0; RL A; MOV R1, A; RL A; RL A; ADD A, R1; MOV R0, A 9 已知(A)=83H,(R0)=17H,(17H)=34H,写出执行下面的程 序后A的内容: ANL A, #17H; ORL 17H, A; XRL A, @R0; CPL A 10 已知片内RAM中(A)=02H,(R1)=7FH,(DPTR)=2FFCH, (7FH)=70H,片外RAM中(2FFEH)=11H,片外ROM中 (2FFEH) =64H,写出下列各条指令的执行结果 MOV A, @R1; MOVX @DPTR ,A; MOVC A, @A+DPTR; XCHD A, @R1 11编写程序,将外部RAM1000H~10FFH区域内的数据逐个搬到从 2000H开始的区域 12 编写程序,查找在内部RAM的30H ~50H单元中出现FFH的次数, 并将查找的结果存入51H单元。 13 内部RAM有一数据块,存放在20H-2FH中。要对这些数据奇偶 校验,凡是满足偶校验的数据(1的个数为偶数)都要转存到外 部RAM8000H开始的数据区中,编程。 14 已知A=76H,PSW=81H,转移指令所在地址为2080H,当执行 以下指令后,程序是否发生转移?PC值等于多少? (1)JNZ 12H; (2)JNC 34H; (3)JB P,56H; (4)JBC AC,78H; (5)CJNE A,#50H,9AH (6)DJNZ PSW ,0BCH 1516已知SP=25H,PC=2345H,标号LABEL所在地址为3456H,问 执行长调用LCALL LABEL 后,堆栈指针和堆栈的内容发生 什么变化?PC值等于多少? 设计一个循环灯系统。要求单片机P1口并行输出驱动8个发光 二极管。编写程序,使这些发光二级管每次只点亮一个,循环 左移(或右移),一个接一个的亮,循环不止。 +5V1 O 1 O 1 OP1.0P1.1P1.2P1.3 P1.4 P1.5 P 1.6 P1.71 O 1 O 1 O 1 O 1 O 17软件模拟逻辑电路P1.0P1.1O OP1.7OP1.2 P1.3+ 第四章定时/计数器控制系统实际应用中常需要定时,延时或外部计数。MCS-51单片机可提 供2个16位的定时/计数器 :定时/计数器0(T0)和定时/计数器1(T1) §4-1 1 结构框图 振荡器 ?12 定时/计数器结构及工作原理C / T=0。 。Tx端加1 计数器TFx中断控制信号C / T=1 2 工作原理 定时/计数器的核心是+1计数器加1计数器脉冲来源: ?外部脉冲源 ?系统时钟振荡器 计数器对2脉冲源之一计数。每来1个脉冲计数器+1,当计数器计数 到全1(16位,FFFFH),再输入1个脉冲就使计数值回“0‖。同时从 最高位溢出1个脉冲使特殊功能寄存器TCON的某1位TF0或TF1置“1‖, 作计数器溢出中断标志。 若定时/计数器工作于定时状态,表示定时时间到; 若定时/计数器工作于计数状态,表示计数器回“0‖; 由此可见计数器的基本功能是对输入脉冲进行计数,到底工作于定时还 是计数,由外接脉冲源决定。?若脉冲为时钟振荡器(等间隔序列脉冲),则脉冲数*时间即为定时时间 ?若脉冲源间隔不等,即为计数器。3 具体操作?定时方式:计数输入信号是内部时钟脉冲。每个机器周期产生一个脉冲使计数器+1,因此定时/计数器的输入脉冲周期与机器周期一样为振荡 频率的1/12(即每来12个脉冲,计数器+1)。?计数方式:计数脉冲来自外部输入引脚T0或T1,当T0或T1有一个由“1‖?D0‖跳变时,计数器的值+1。每个机器周期的S5P2期间对外部输入 采 样。 假设在第一周期采的值为“1‖,而在下一个周期采的值为“0‖,计 数 器+1。因确认一次下跳变要花2个机器周期共24个脉冲,所以最快的计数速 率是1/24 4 模拟开关作用 ?前一开关:决定定时还是计数 开关接振荡器―定时 开关接Tx端―计数 ?后一开关: 决定脉冲源是否加到计数器输入端,即+1的开启与运行 §4―2 定时/计数器方式和控制寄存器专用寄存器TMOD,TCON―确定定时/计数器工作方式并控制其功 能,每当执行一次改变TCON,TMOD内容的指令,所改变的值在下一 条指令的第一个周期的S1P1期间进入SFR。 TMOD―控制工作方式 TCON―控制T0,T1的启动,停止计数,包含定时器状态。?定时/计数器是一种可编程的部件,在其工作之前必须将控制字写入TMOD和TCON,用以确定工作方式,该过程称为定时/计数器的初始化。 一 工作方式寄存器TMOD TMOD用于控制定时/计数器四种工作方式。 格式: D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0定时器1(T1)定时器0(T0)低4位为T0控制段 高4位为T1控制段 1 M1 0 0 1 1 2工作方式选择位M1M0 M0 0 1 0 1 方式 0 1 2 3 13位的定时/计数器 16位的定时/计数器 可自动再装入的8位定时/计数器 仅用于T0,将T0分为两个8位计数器,对T1停止计数 说明C/T ―选择定时/计数功能 ? C/T =0,定时方式 ? C/T =1,计数方式 采用外部引脚T0(P3.4)、T1(P3.5)的输入脉冲作计数脉冲。当T0或 T1发生由高?低负跳变时,计数器+1 3 GATE 门控位(选通信号) ― GATE=1 ,定时/计数器的计数受外引脚输入电平控制(INT0 控制T0, ― INT1 控制T1) GATE=0,定时/计数器运行不受外部输入引脚控制。注意:复位时TMOD全清“0‖,TMOD不能位寻址,只能用字节方式设置工作方式 二 定时/计数器控制寄存器 TCON用于控制定时/计数器的启动,停止及反映定时/计数器的溢出和中 断情况。 字节、位寻址均可 D7 位 D6 D5 D4 D3 D2 D1 D08FH 8EH 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 在中断章学习88H字节 1 TR0―T0的运行控制位 由软件置位/清除控制T0的开启/关闭 2 TR1―T1的运行控制位 由软件置位/清除控制T1的开启/关闭 3 TF0―T0的溢出标志位 当TF0被允许计数以后,T0从初值开始+1计数,最高位产生溢出时将 TF0置为“1‖,并向CPU申请中断,当CPU响应时,由硬件清TF0为0 4 TF1―T1溢出标志位 当TF1被允许计数以后,T1从初值开始+1计数,最高位产生溢出时将 TF1置为“1‖,并向CPU申请中断,当CPU响应时,由硬件清TF1为0。由TMOD,TCON知,T0,T1是可编程的。所以在任何一个定时/计 数器开始计数或定时之前,要先写入相应的控制字。 §4―3定时/计数器工作方式TMOD中M1M0不同取值,可使硬件上有4种不同动作,形成定时/计 数器的4种不同工作方式。 一 方式0 1 结构框图 ?12 C/T =0―振荡器。 。。T1引脚GATE― INT1(5位)|(8位)TL1 |TH1TF1中断。TR1C/T =1&―控制》1 当M1M0=00时,选择工作方式0,为13位定时/计数器,16位计数器的 TL1低5位存放计数值,高3位不定不用。当TL1的低5位计满时,向 TH1 进位,而TH1溢出后对中断标志TF1置位,并申请中断。T1是否溢 出可查询TF 1是否为“1‖。示意图: THx 高8位 TLxX XX低5位以T1为例解释: ― 当C/T =0为定时,12分频的振荡脉冲数做加法计数?时间为定时。 ― C/T =1对引脚T1的输入脉冲加法计数,可随时读出计数寄存器的计数 值。计数值全为“0‖溢出,并置TCON中的溢出中断标志位TF1=1,向 CPU请求中断,进入中断由内部硬件自动清除该标志。 GATE=0 定时/计数器控制仅由TR1状态确定 (TR1=1,启动 =0,停止) 此时不论INT1 为何值,不影响整个系统。 GATE=1, ― 启动计数由INT1 控制,也即GATE=1,TR1=1,只有INT1引脚输入高 电平,才被计数。利用这个特点可方便测量脉冲宽度。―二 方式1 为16位计数器其它同方式0 THx作为高8位 TLx作为低8位 振荡器?12C/T =0―。 。。T1引脚GATE― INT1(8位)|(8位)TL1|TH1TF1中断。TR1C/T =1&―控制》1 三方式2振荡器?12C/T =0―。 。。T1引脚GATE― INT1TL1(8位)TF1中断。TR1C/T =1&―控制 重新装入 TH1(8位)》1定时/计数器构成一个能自动重置初值的8位计数器(TLx)。 TH1在此方式中作缓冲器(保存初值)用。当TL1计数溢出时,在置 “1‖溢出标志TF1的同时,还自动将TH1中的常数?TL1,使TL1从初 值开始计数。该方式可连续多次重复工作,直到有停止计数命令为止。 四 方式3 把T0的2个8位计数寄存器TH0及TL0分开使用,成为2个独立的8位计数器。振荡器 1/12fosc T0引脚GATE― INT0?121/12foscC/T =0―。 。。TR0》1TL0(8位)TF0中断。1/12fosc TR1C/T =1&―控制。。控制TH0(8位)TF1中断 图中,8位定时/计数器TL0占用了引脚T0,INT0 及TR0,GATE, 溢出标志位。该8位定时/计数器的功能同方式0,1。 另一个8位定时/计数器TH0只能完成定时,并使用了启动控制位TR1 和溢出标志位TF1。此时定时/计数器不能设置为方式3,若设为方式 3停止计数。―注意:该 工作方式只适用于定时/计数器T0。方式3是为使用串行口时,要2个独立的计数器而特定提供的。常将T1作串行通信的波特 率发生器,并设定为方式2,使用时只将计数器初值送到计数寄存器 就可工作,不需软件启动,不用溢出标志 §4―3 定时/计数器编程举例 应用定时/计数器编程时应注意两点:能正确写入控制字(初始化) 会进行时间常数的计算 1 写入控制字次序 ?将工作方式控制字写入TMOD ?将定时/计数初值写入TLx,THx ?置位TRx,用以启动计数 ?置位ETx允许定时/计数器中断 ?置位EA使CPU开放中断 2 时间常数计算 已知定时/计数器以+1方式计数。假定要计数值为x,则应装入定时/ 计数器的初值为2n―x。 对方式0: n=13 1: n=16 2,3: n=8 对2n―x的理解:以n=13为例 当13位全为1,为计满,再计溢出。也即初值+要计数值(x)= 2n,再 +1就溢出。X,n已知 计算;当工作于定时状态,由于定时/计数器是计数机器周期,每个 机器周期包含12个振荡周期,设晶振fosc为6MHZ,则 1个机器周期 : Tp=12/晶振频率=12/(6*106)=2us, 定时时间为:Tc=X*Tp;即x=Tc/Tp 应装入的初值很容易算出 X―计数值 Tc―定时时间 Tp―机器周期 例1:计算从T0端输入的脉冲个数,当X=5000时结束。假设T0工作在 方式0,则初值=213―= (B) XXX11000即 TH0=63H TL0=18H 例2:若定时Tc=1ms,已知Tp=2us,则x=TC/Tp=1*103/2=500 仍设工作 于 方式0,时间常数:213―500=7692 理解:要想定时1ms,要计数器从7692值开始计数再加500次就溢出。 2=213,再加一次就发生溢出 例3:设T0为定时状态,工作于方式1,Tc=2ms,每当2ms到申请中断, 在中断服务程序中将累加器A的内容左环移一次送P1口,已知晶振 fosc=6MHZ,编程实现。 解:Tp=12/6=2us 计算初值x=Tc/Tp=2ms/2us=1000,则216―D=FC18H MAIN:ORG 2000H AJMP MAIN ORG 200BH MOV TL0,#18H; MOV TH0, #0FCH RLC A MOV P1, A RETI MOV SP, #53H MOV TMOD ,#01H MOV TL0,#18H; MOV TH0, #0FCH MOV A, #01H SETB TR0 SETB ET0 SETB EA SJMP $ 小论文:对本门课的某一个知识点谈自己的理解或新的解题思路 要求:标题 单位 姓名 摘要 正文 参考文献 1 2 3 45复习思考题 51系列单片机内部有几个定时/计数器?由哪些专用寄存器组成? 定时/计数器用作定时时,其定时时间与哪些因素有关?用作计 数器时,对计数频率有何限制? 定时器T0和T1各有几种工作方式?简述之。 已知单片机系统时钟频率fosc=6MHZ,若要求定时值分别为 0.1ms,1ms,和10ms,定时器T0工作在方式0,方式1,方式2时,定时 器对应的初值各为多少? 能读懂书中所有例子,并能编程 第五章 串行通讯及其接口§5―1 串行通讯的一般概念 一 并/串行通讯 计算机的CPU与其外设的基本通讯方式有两种: 并行通讯―数据各位同时传送特点:传输速度快。距离远时,位数多会导致线路复杂,成本高特点:传输速度慢。节省传输线,只用串行通讯―数据一位一位顺序传送计 算 机 D0 D7 选通 状态 计算 机或 外设一对传输线或电话线即可。成本相对较 低 发送 计 计算 算 机 接收 机或 外设T…8T 二串行通讯的两种基本形式:异步传送同步传送1 异步传送 异步传送规定了字符数据的传送格式。每个数据以相同的帧格式传送。 每一帧由起始位,数据位,奇偶校验位,停止位组成。 ?起始位―表示字符传送开始 通讯线上无数据传送时处于逻辑“1‖态。若发送设备要发送一个字符数据时, 先发一个逻辑“0‖信号,即为起始位。由通信线传向接收设备,接收设备检测 到 “0‖后,开始准备接收数据信号。 ?数据位―有意义的信息 接收设备接收到起始位后,紧接着就会收到数据位。数据位的个数可是 5,6,7或8位。传送过程中,数据位从最小有效位开始传送。 ?奇偶校验位―用于有限差错检测通讯双方需约定一致的奇偶校验方式。就数据传送而言,它是冗余位, 但其表示数据的一种性质,用于检错。 ?停止位―一帧信息结束标志 在奇偶位或数据位之后发送的是停止位。可是1位,1.5位或2位。停止位后加 空闲位,用高电平表示,用于等待传送。这样接/发可随时或间断进行,不受时 间限制。 起始位 数据位 奇偶校验 停止位0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1(a)无空闲位 起始位 数据位 奇偶校验1停止位 空闲位0 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1(b)有空闲位111 2同步传送 去掉异步传送时的每个字符的起始位和停止位的成帧标志信号。仅在 数据块的开始处用同步字符表示。 特点:?以同步字符作传送开始,使收/发双方取得同步 ?每位占用的时间都相等 ?字符数据间不允许有间隙。若线路空闲或没字符发送,发送同步字符。 同步字符可由用户选择一个或二个特殊的8位2#码作为同步字符。 与异步通讯收/发方须使用相同的同步字符一样,同步收/发方须使用相同 的同步字符。SYN字符1SYN字符2数据同步传送适用场合:异步:传输速率低,传输信息量不太大50―9600位/秒 同步:传输速率高,传输信息量大800,000位/秒 三波特率-------数据传送率的规定 通讯线上的字符数据是按位传送的。每一位宽度由数据传送率确定. 波特率:指单位时间内传送的信息量。以位/秒表示。单位:波特 1波特=1位/秒(1bps) 例:数据传输的速率为120字符/秒,每个字符为10位,则传送的波特率为 10位/字符*120字符/秒=1200位/秒,每一位的传送时间Td为波特率的倒 数。T d=1/(ms)四 串行通讯中数据传送方向 1 点―点通讯(单机通讯) 分为3种情况: (1) 单工方式: A 单工方式 B (2)半双工方式: K KA 半双工方式B(3 )全双工方式:AB全双工方式 2 主从多终端通讯方式 分为2种形式: (1)主从多终端半双工通讯方式 主机A可向多个从机B,C,D发信息, 在满足一定条件下,从机也可分别 向主机发信息。AB C D主从多终端半双工通讯方式 (2)主从多终端全双工通讯方式 主机A可同时向从机B,C,D发信息 ,同时从机在满足一定条件下也可向 主机发信息,各从机之间不能直接 通讯。ABCD主从多终端全双工通讯方式 五 通用异步接收器/发送器UART 串行传送:数据是一位位顺序传送 计算机内部:数据是并行传送。 计算机向外传送数据,要将并行数据?串行数据再传送 由外向计算机传送数据,要将串行数据?并行数据再?计算机 上述数据传送过程可用软件也可用硬件实现。软件实现会增加CPU工作 量,降低了利用率。目前主要用硬件完成转换。UART(Universal Synchronous Receiver/Transmitter)为通用异步接收/发送器的简称,为串 行接口的核心部件。(完成同步通讯的硬件电路称USRT,)电路图书P83,图5―6 发送:并?串输出。由CPU来的信息?并行缓冲器?移位寄存器?逐位由 TXD输出 接收:串?并输入。串行数据经RXD进入移位寄存器?并行数据缓冲器 再经数据总线?CPU 发/收前提:均在时钟信号及其它控制信号作用下完成
典型的UART电路型号 INS 8250公司 National类型 UART结构传送 位/字 速率 符停止 位同步 方式 异步校验 方法 奇偶 溢出 帧错 奇偶 溢出 帧错双缓冲 56K5,6, 1, 7,8 1.5, 2 7,8 1,2MC 6850― Motorola UART ACIA双缓冲 1M异步 注意:不只是传送,还要检测传送的正误。UART发送时会检查每个要传送的字符中“1‖的个数,自动在奇偶校验位添1或0使“1‖的总和在偶校验时为偶数,奇校验时为奇数。UART接收时也会检查字符中每一位(含奇偶校验位)计其“1‖的总 和是否符合要求,确认是否发生传送错误。 UART设置的出错标志一般有3种: ?奇偶错 ?帧错 ?溢出错一旦出现上述错误,会发出出错信息。 注意:UART是用外部时钟方法与数据进行同步的。 外部时钟周期Tc和数据中每一位数据所占的时间Td有关系如下:Td Tc ? kK=16或64K=16,在每一时钟脉冲的上升沿采样接收数据线,当发现了第一个 “0‖,即起始位的开始。以后有连续采样8个“0‖,则确定它为起始 位 (非干扰),然后开始读出接收数据的每个数据位。 §5―2MCS―51串行通讯接口MCS―51单片机具有一个采用UART工作方式的全双工的串行通讯接口, 可同时发送/接收数据。 51系列有2个独立的接收/发送缓冲器。 发送缓冲器只能写入,不能读出 接收缓冲器只能读出,不能写入 由于缓冲器的上述特点,两个缓冲器占用同一个地址(99H) 串行接口有4种工作方式,有的可改变波特率 一 串行接口的控制寄存器 分为2个: 串行控制寄存器―SCON 可变波特率SFR―PCON 1 SCON 字节地址:98H,可位寻址格式: SM0 SM1 SM2 REN TB8 RB8 TI RI1 选择工作方

我要回帖

更多关于 tp801单板机何时诞生 的文章

 

随机推荐