单片机第7章
合集下载
单片机原理及接口技术(C51编程)第7章 定时器计数器

30
图7-14 由外部计数输入信号控制LED的闪烁
(3)设置IE寄存器 本例由于采用T1中断,因此需将IE寄存器的EA、ET1位置1。
(4)启动和停止定时器T1 将寄存器TCON中TR1=1,则启动T1计数;TR1=0,则停止T1计数。
参考程序如下:
#include <reg51.h> void Delay(unsigned int i)
7.4 定时器/计数器的编程和应用 4种工作方式中,方式0与方式1基本相同,只是计数位数不同。方
式0为13位,方式1为16位。由于方式0是为兼容MCS-48而设,计数初 值计算复杂,所以在实际应用中,一般不用方式0,常采用方式1。
7.4.1 P1口控制8只LED每0.5s闪亮一次 【例7-1】在AT89S51的P1口上接有8只LED,原理电路见图7-
当TMOD的低2位为11时,T0被选为方式3,各引脚与T0的逻辑关系 见图7-8。
T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位 C/T* 、GATE、TR0 ,而TH0被固定为一个8位定时器(不能作为外部 计数模式),并使用定时器T1的状态控制位TR1,同时占用定时器T1的 中断请求源TF1。
13。采用T0方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮 一次。
23
图7-13 方式1定时中断控制LED闪亮
24
(1)设置TMOD寄存器 T0工作在方式1,应使TMOD寄存器的M1、M0=01;应设置C/T*=0,为定
时器模式;对T0的运行控制仅由TR0来控制,应使相应的GATE位为0。定时 器T1不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0x01。 (2)计算定时器T0的计数初值
图7-14 由外部计数输入信号控制LED的闪烁
(3)设置IE寄存器 本例由于采用T1中断,因此需将IE寄存器的EA、ET1位置1。
(4)启动和停止定时器T1 将寄存器TCON中TR1=1,则启动T1计数;TR1=0,则停止T1计数。
参考程序如下:
#include <reg51.h> void Delay(unsigned int i)
7.4 定时器/计数器的编程和应用 4种工作方式中,方式0与方式1基本相同,只是计数位数不同。方
式0为13位,方式1为16位。由于方式0是为兼容MCS-48而设,计数初 值计算复杂,所以在实际应用中,一般不用方式0,常采用方式1。
7.4.1 P1口控制8只LED每0.5s闪亮一次 【例7-1】在AT89S51的P1口上接有8只LED,原理电路见图7-
当TMOD的低2位为11时,T0被选为方式3,各引脚与T0的逻辑关系 见图7-8。
T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位 C/T* 、GATE、TR0 ,而TH0被固定为一个8位定时器(不能作为外部 计数模式),并使用定时器T1的状态控制位TR1,同时占用定时器T1的 中断请求源TF1。
13。采用T0方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮 一次。
23
图7-13 方式1定时中断控制LED闪亮
24
(1)设置TMOD寄存器 T0工作在方式1,应使TMOD寄存器的M1、M0=01;应设置C/T*=0,为定
时器模式;对T0的运行控制仅由TR0来控制,应使相应的GATE位为0。定时 器T1不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0x01。 (2)计算定时器T0的计数初值
第7章 单片机的系统扩展

第七章 单片机的系统扩展
74LS138是”3-8”译码器,具有3个选择输入端, 可组成8种输入状态。8个输出端,分别对应8种输 入状态中的1种,0电平有效。
第七章 单片机的系统扩展
第七章 单片机的系统扩展
7.2 数据存储器的扩展
MCS-51单片机内部有128B的RAM存储空间。
内部RAM通常作为工作寄存器、堆栈、软件标志 和数据缓冲区。
第七章 单片机的系统扩展
2864有四种工作方式,如表7-2所示。
第七章 单片机的系统扩展
7.1.3 程序存储器的扩展方法
1. 总线的连接与时序
第七章 单片机的系统扩展
图7-5为MCS-51单片机程序存储器的操作时序。
第七章 单片机的系统扩展
2.单片程序存储器的扩展
第七章 单片机的系统扩展
3.多片程序存储器的扩展
第七章 单片机的系统扩展
8255A的控制字
(1)工作方式控制字
第七章 单片机的系统扩展
(2)置位/复位控制字
第七章 单片机的系统扩展
例如,若将07H写入控制字 功能:PC3置位
若将08H写入控制字
功能:PC4复位
【例】 要求A口工作在方式0输入,B口为方式1输出, C口高4位PC7~PC4为输入,C口低4位PC3~PC0为 输出。设8255控制器地址为FFFDH MOV DPTR, #0FFFDH
第七章 单片机的系统扩展
第七章 单片机的系统扩展
2. 8255A芯片的控制字及其工作方式
方式0——基本输入/输出方式。 方式1——选通输入/输出方式。 方式2 ——双向传送方式。
端口A可工作于方式0、1、2,端口 B只可工作于 方式0、1,端口C只可工作于方式0。
单片机原理及应用(李桂林)章 (7)

第 7 章 单片机并行扩展技术 图 7-1 8031 最小应用系统
第 7 章 单片机并行扩展技术
8031 芯片本身的连接除了 EA 必 须 接地 地外(选择外 部存储器),其他与 80C51 / 89C51 最小应用系统一样,也必须 有复位及时钟电路。
第 7 章 单片机并行扩展技术
7. 2 总线扩展及编址方法
第 7 章 单片机并行扩展技术
7. 1 单片机的最小系统
最小应用系统,是指能维持单片机运行的最简单配置的系 统。这种系统成本低廉、结构简单,常用来构成简单的控制系 统,如开关状态的输入/输出控制等。对于片内有ROM / EPROM 的单片机,其最小应用系统即为配有晶振、复位电路和电源的 单个单片机。对于片内无 ROM / EPROM 的单片机,其最小系统 除了外部配置晶振、复位电路和电源外,还应当外接 EPROM 或 E2 PROM作为程序存储器使用。
第 7 章 单片机并行扩展技术
图 7-3 所示为线选法应用实例。图中所扩展的芯片地址 范围如表 7 -1 所示,其中 ×可以取“0 ”,也可以取 “ 1 ”,用十六进制数表示的地址如下:
2764 ( 1 ): 4000H~5FFFH ,或 C000H~DFFFH ,有地址重 叠现象。
2764 ( 2 ): 2000H~3FFFH ,或 A000H~BFFFH ,有地址重 叠现象。
第 7 章 单片机并行扩展技术
当然,最小系统有可能无法满足应用系统的功能要求。比 如,有时即使有内部程序存储器,但由于程序很长,程序存储器 容量可能不够;对一些数据采集系统,内部数据存储器容量也可 能不够等,这就需要根据情况扩展 EPROM 、 RAM 、 I / O 口 及其他所需的外围芯片。
第 7 章 单片机并行扩展技术
《单片机原理及应用教程》第7章:单片机的串行通信及接口

8051单片机通过引脚RXD和TXD进行串行通信。其串行口结构包括控制寄存器SCON和PCON,分别用于配置工作方式和波特率。串行通信可选工作方式有四种:方式0为同步移位方式,方式1、方式2和方式3为异步收发方式,不同方式下帧格式和时序有所不同。波特率是数据传送速率,可通过设置定时器T1和SMOD位来调整。在方式0下,波特率固定为fosc/12;方3的波特率则通过T1溢出率和SMOD位共同决定。此外,文档还提供了波特率设计的实例和初始化程序,帮助读者更好地理解和应用8051单片机的串行通信功能。
第7章 MCS-51单片机常用接口技术

图7.3 用8031的P1口设计的4×4键盘
第7章 MCS-51单片机常用接口技术
7.1.2 键盘按键识别方法
首先在键处理程序中将P1.3~P1.0依次按位变低, P1.3~P1.0在某一时刻只有一个为低。在某一位为低时读行线, 根据行线的状态即可判断出哪一个按键被按下。 如9号键按下时,当列线P1.2为低时,读回的行线状态中 P1.4被拉低,由此可知2号键被按下。 一般在扫描法中分两步处理按键,首先是判断有无键按下, 即使列线(P1.3~P1.0)全部为低,读行线,如行线 (P1.4~P1.7)全为高,则无键按下,如行线有一个为低,则 有键按下。当判断有键按下时,使列线依次变低,读行线,进 而判断出具体哪个键按下。
第7章 MCS-51单片机常用接口技术
7.2.2 LED显示器接口及显示方式
表7.2 段选码、位选码及显示状态表
段选码 (字型) F9H A4H B0H 99H 92H 位选码 P2.4~P2.0 11110 11101 11011 10111 01111 1 2 3 4 5 显示器显示状态
第7章 MCS-51单片机常用接口技术
7.2.1 LED显示器原理
图7.6为LED显示器的内部结构及外形。
(a)共阴极 (b)共阳极 (c)LED实物 图7.6 LED显示结构及实物
第7章 MCS-51单片机常用接口技术
7.2.1 LED显示器原理
7段LED显示数字0~F,符号等字型见表7.1,其中a段为最 低位,dp为最高位。
第7章 MCS-51单片机常用接口技术
单片机原理及应用教程
第 7章 MCS-51单片机常用接口技术
主 编 范立南 谢子殿 副主编 刘 彤 尹授远 李雪飞
第7章 MCS-51单片机常用接口技术
单片机原理第7篇章串行接口

总结和重点强调
串行接口的定义和作用
串行接口是一种用于在计算机系统或电子设备之间传输数据的接口,实现设备之间的通信和 数据交换。
串行通信的特点和优势
逐位传输数据、使用较少的信号线、较高的数据传输速率,节省空间、提高传输效率。
常见的串行接口类型及其应用场景
USB接口、RS-232接口等,应用于计算机、外部存储设备等设备的数据传输。
单片机原理第7篇章串行 接口
串行接口是一种用于在计算机系统或电子设备之间传输数据的接口。它通过 逐位地传输数据,能够有效地减少信号线的使用数量,提高数据传输速率。
串行接口的定义和作用
定义
串行接口是一种数据传输的接口,将数据逐位传输,通过时钟信号同步。
作用
串行接口用于在计算机系统或电子设备之间传输数据,实现设备之间的通信和数据交换。
协议
串行通信需要定义通信协议,规定数据的传输格 式和通信规则。
常见的串行接口类型及其应用场景
USB接口
应用于计算机、外部存储设备、打印机等设备 的数据传输。
RS-2 32 接口
应用于计算机和串行设备之间的长距离数据传 输。
串行通信的标准和协议
1 标准
例如RS-232、USB、SPI、I2C等标准规 定了接口的电气特性和 了数据的传输方式、速率和控制信号。
串行接口的发展趋势和未来展望
1
提高速率
随着技术的发展,串行接口的传输速率将进一步提高,满足对高速数据传输的需 求。
2
减少功耗
为了满足节能环保的需求,串行接口将朝着功耗更低、效率更高的方向发展。
3
应用扩展
串行接口将广泛应用于更多领域,例如物联网、智能家居等。
重要性
串行接口在现代计算机和电子设备中起着至关重要的作用,是数据传输的基础。
《单片机原理与应用及上机指导》第7章:80C51单片机系统扩展

表7.4 常用SRAM芯片的主要性能
表7.6 80C51与6264的线路连接
7.2 并行I/O扩展
MCS-51系列单片机共有4个并行I/O口,分别是P0、P1、 P2和P3。其中P0口一般作地址线的低8位和数据线使用; P2口作地址线的高8位使用;P3口是一个双功能口,其第 二功能是一些很重要的控制信号,所以P3一般使用其第二 功能。这样供用户使用的I/O口就只剩下P1口了。另外,这 些I/O口没有状态寄存和命令寄存的功能,所以难以满足复 杂的I/O操作要求。因此,在大部分MCS-5l单片机应用系 统的设计中都不可避免地要进行I/O口的扩展。 7.2.1 并行I/O扩展原理 7.2.2 常用的并行I/O扩展芯片
线选法
若系统只扩展少量的RAM和I/O口芯片,可采用线选法。 线选法是把单片机高位地址分别与要扩展芯片的片选端相连,控制选 择各条线的电路以达到选片目的,其优点是接线简单,适用于扩展芯 片较少的场合,缺点是芯片的地址不连续,地址空间的利用率低。
图7.7 片外RAM的读时序
图7.8 片外RAM的写时序
4.数据存储器芯片及扩展电路
(1) 数据存储器 数据存储器扩展常使用随机存储器芯片,用得较多的是 Intel公司的6116(容量为2KB)和6264(容量为8KB), 其性能 如表7.4所示。 (2) 数据存储器扩展电路 80C51与6264的连接 如表7.6所示。
全地址译码法
利用译码器对系统地址总线中未被外扩芯片用到的高位地址线进行译 码,以译码器的输出作为外围芯片的片选信号。常用的译码器有 74LS139、74LS138、74LS154等。优点是存储器的每个存储单元只 有唯一的一个系统空间地址,不存在地址重叠现象;对存储空间的使 用是连续的,能有效地利用系统的存储空间。缺点是所需地址译码电 路较多,全地址译码法是单片机应用系统设计中经常采用的方法 。
单片机讲义第七章

一、中断的起因
什么可以引起中断? 生活中很多事件可以引起中断:有人 按了门铃了,电话铃响了,你的闹钟闹响 了,你烧的水开了….等等诸如此类的事件, 我们把可以引起中断的称之为中断源,单 片机中也有一些可以引起中断的事件, 8051中一共有5个:两个外部中断,两个 计数/定时器中断,一个串行口中断。
三、中断的响应过程
当有事件产生,进入中断之前我们必须先记住现 在看书的第几页了,或拿一个书签放在当前页的位置, 然后去处理不同的事情(因为处理完了,我们还要回 来继续看书):电话铃响我们要到放电话的地方去, 门铃响我们要到门那边去,也说是不同的中断,我们 要在不同的地点处理,而这个地点通常还是固定的。 89C51中也是采用的这种方法,五个中断源,每个 中断产生后都到一个固定的地方去找处理这个中断的 程序,当然在去之前首先要保存下面将执行的指令的 地址,以便处理完中断后回到原来的地方继续往下执 行程序。
二、中断的嵌套与优先级处理
设想一下,我们正在看书,电话铃响了,同时又 有人按了门铃,你该先做那样呢?如果你正是在等一 个很重要的电话,你一般不会去理会门铃的,而反之, 你正在等一个重要的客人,则可能就不会去理会电话 了。如果不是这两者(即不等电话,也不是等人上 门),你可能会按你通常的习惯去处理。总之这里存 在一个优先级的问题, 单片机中也是如此,也有优先级的问题。优先级 的问题不仅仅发生在两个中断同时产生的情况,也发 生在一个中断已产生,又有一个中断产生的情况,比 如你正接电话,有人按门铃的情况,或你正开门与人 交谈,又有电话响了情况。考虑一下我们会怎么办吧。
电平触发的外部中断的清除
对于电平触发的外部中断,CPU响应中断后, 虽然也是由硬件清除了相应的标志位,但是不 能对外部引脚上的电平进行处理,也就是说, 这时如果外部引脚上的低电平依然存在,会造 成重复中断,因此我们应该在电路上增加对外 部引起中断的信号进行处理。P148图7-5是一 个可行的方案之一。通过I/O口输出一个信号, 使得外部引脚上的中断请求信号变为高电平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JZ rel ;(PC) ←(PC) +2
当 (A) = 0, (PC) = (PC) + rel,即转移
当 (A) ≠ 0, 则程序顺序执行 JNZ rel ;(PC) ←(PC) +2 当 (A) ≠ 0, (PC) = (PC) + rel,即转移 当 (A) = 0, 则程序顺序执行
执行这两条指令时,首先对累加器A内容进行判断,满足条件则转移, 否则程序顺序执行。 相对位移量rel=(目的地址-PC当前值),由CPU自动算出。
例49(P93),编程实现下列逻辑运算要求:
若(P1.0)=1,(ACC.7)=1,且OV=0时,位累加器C置1。 分析:相当于逻辑函数式C=P1.0∧ACC.7 ∧(/OV) 参考程序: MOV C,P1.0 ;若P1.0=1,则C=1 ANL C,ACC.7;若ACC.7=1,则C继续保持为1 ANL C,/OV ;若/OV=1(或OV=0),则C=1
的内容转向由P1口输出,若输入为00H,则停止
转发。
参考程序:
NEXT:MOV JZ MOV SJMP DONE:…… A,P2 DONE P1,A NEXT
(2)条件转移指令- 比较转移指令CJNE
基本格式: CJNE (目的操作数DST), (源操作数SRC), rel
比较两个操作数的大小, 如果不相等则转移;如果相等,则 顺序执行。
例:设(C)=0,P3口的内容为1 1 1 1 1 0 1 0 B。 执行指令: SETB P3.0 SETB C 则(C)=?,(P3)=? 执行结果为(C)=1,(P3)=1 1 1 1 1 0 1 1 B。 若将SETB改为CLR或CPL指令,则结果分别是?
例:把累加器A中的数据送入第2组工作寄存器的R7中。
LCALL ZERO ;区域20H~2AH清0 MOV R0,#30H MOV R1,#15 LCALL ZERO;区域30H~3EH清0 MOV R0,#40H MOV R1,#16 LCALL ZERO;区域40H~4FH清0
SJMP
$
例4,流水灯的控制。有8盏灯依次接在P1口的8位引脚,当 P1口输出低电平,对应的灯点亮。编写程序段,分别实现 下述功能: (1) 8盏灯轮流点亮; (2)8盏灯依次点亮。 (2) MOV A,#0FEH 参考程序: NEXT:MOV P1,A (1) MOV A,#0FEH ACALL DELAY_1S NEXT: MOV P1,A CLR C ACALL DELAY_1S RLC A RL A SJMP NEXT SJMP NEXT
2、位操作指令:清0、置1、取反 (1)位清0指令 (CLR) CLR C ;(C)←0 CLR bit ;(bit)←0 功能:将C或指定位(bit)清0。 (2) 位置1指令 (SETB) SETB C ;(C)←l SETB bit ;(bit)←1 功能:将C或指定位(bit)置1。 (3) 位取反指令 (CPL) CPL C ;(C)←(/C) CPL bit ;(bit)←(/bit) 功能:将 C或指定位(bit)取反。
回顾上节课内容
逻辑运算类指令
CLR/CPL RL/RLC/RR/RRC ANL/ORL/XRL
控制转移类指令
无条件转移类ACALL/LCALL、RET/RETI、 AJMP/LJMP/SJMP/JMP、NOP
控制转移类-条件转移指令:JZ/JNZ、CJNE、DJNZ 分为三类: 1、判零转移指令 JZ/JNZ
例7(P88 ,例42 ):从P1.7引脚输出4个正脉冲,其脉宽为4 个机器周期。 MOV R2,#8 LOP: CPL P1.7 ;4个正脉冲,8个状态 ;P1.7状态取反
NOP
DJNZ R2 ,LOP
布尔(位)处理类指令
共有17条指令,处理1位数据。 位处理指令可分为:
位数据传送(2条,MOV)
若 T=1 μs ,则上述程序段实现 1.024ms的延时。思考:如要实 现10ms、100ms、1s的延时又该如何修改程序段?
例 6,若单片机的主频为12MHz,分析下列程序能实现的延时
时间为多少? MOV R1, #0AH DELAY: DJNZ R1, DELAY
分析:单片机主频为 12 MHz,则机器周期为1 μs : MOV R1,#0AH为单周期指令,执行时间为1 μs; DJNZ R1, DELAY为双周期指令, 执行1次所需时间为2 μs。 R1 中存放着循环的次数 10 , DJNZ指令需执行10次,共需20 μs 。 执行上述程序共需要时间:(1T+2T*10)=21T=21*1μs=20 μs ,即 可产生21 μs的延时时间。
(3) 条件转移指令-循环控制转移指令或减1转移指令 DJNZ
;(PC) ←(PC)+2, (Rn)←(Rn)-1 当(Rn)≠0时, (PC) ←(PC) +rel,即转移; 当(Rn)=0时, 程序顺序执行。 DJNZ direct,rel ;(PC)←(PC)+3,(direct)←(direct)-1 当(direct)≠0时,(PC) ←(PC) +rel,即转移; 当(direct)=0时, 程序顺序执行。 DJNZ Rn, rel
例41(P85):设(A)=01H,分析下列程序后(A)=? JZ LABEL1 DEC A JZ LABEL2 ;(A)≠ 0,程序继续执行 ;(A)-l=00H ;(A)=00H,程序转向标号LABEL2
……
LABEL1:MOV A,#2 …… LABEL2:MOV A,#3
例42(P85),编写一段程序实现:由P2口输入
参考程序: MOV MOV CLR ADDSUM: ADD INC DJNZ MOV SJMP R2,#10 R0,#DAT A A,@R0 R0 R2,ADDSUM SUM,A $
例3:将片内RAM的20H~2AH区域清0。
参考程序段: MOV R0,#20H MOV R1,#11 ZERO:MOV @R0,#0 ;清0 INC R0 DJNZ R1,ZERO SJMP $ 若是要将多个区域清0,如何设置程序结构更合理?例如,将 20H~2AH,30H~3EH,40H~4FH这三个不同大小的区域清零?
CJNE指令执行过程中的比较操作实际上是减法操作,但不 保持两数之差,只形成了Cy标志,具体而言: 若DST=SRC, 则 (PC)←(PC)+3 ,顺序执行程序; 若DST>SRC, 则 (PC) ← (PC)+3+rel, 转移且C=0; 若DST<SRC, 则 (PC) ← (PC)+3+rel,转移且C=1;
比较转移指令的格式: CJNE A , direct, rel CJNE A , #data, rel
CJNE CJNE
Rn , #data, rel @Ri , #data, rel
例:设(A)=34H , (R7)=56H 分析下列程序执行过程: CJNE R7, #60H, N1 ;(R7)<60H,转向N1, 且Cy=1 …… N1:CJNZ A,#30H, N2 ; (A)>30H,转向N2,且Cy=0 …… N2: ……
编写程序,实现如下图所示的逻辑运算功能。(P94,例51) 其中,输入变量U、V是P1.1、P2.2的状态,W是T0的溢出
将20H~2AH,30H~3EH,40H~4FH三个不同大小的区域都清零?
参考程序:
MOV MOV MOV SP, #70H ;清0子程序 R0,#20H R1,#11
;参数R0表示初始存储单元地址
;参数R1表示存储单元个数 ZERO: MOV INC DJNZ RET END @R0,#0 R0 R1,ZERO
SFR和I/O端口),另一个必须是位累加器C(进位位标志Cy)。
例,位传送指令的应用。将片内数据存储器中的00H和07H位 的内容相交换。
分析:根据位传送指令的特点,00H位与07H位之间不可直接进行交换,选 用某一位作暂存,例如选用01H位做中间量。 参考程序: MOV C,00H MOV 01H,C MOV C,07H MOV 00H,C MOV C,01H MOV 07H,C
参考程序:MOV MOV LOOP: MOVX JZ MOV INC INC SJMP DONE: SJMP R0,#DATA1 R1,#DATA2 A,@R0 ;外部RAM DONE @R1,A ;内部RAM R0 R1 LOOP $
例2,以DAT为起始的片内RAM中连续存放了10个无符号数,编 写程序段实现:10个无符号数相加,并将和送入SUM单元。 假设相加的结果不超过8位二进制数所能表示的范围。
分析:8051内部有4组R0~R7,由RS1(PSW.4)和RS2 (PSW.3)选择工作寄存器组。例中要求第2组工作寄存器,因 此,需将RS1、RS0分别设置为0、1。 参考程序: CLR PSW.4 SETB PSW.3 MOV R7,A 或者 CLR RS1 SETB RS0 MOV R7,A
条件转移指令JZ/JNZ/CJNE/DJNZ都是相对短转移,其
转移范围为-128~127,若超过此范围,该如何实现转移?
可以借助一条长转移LJMP指令的过渡来实现。 下面举例分析各类转移指令的应用。
控制转移指令的应用举例 例1,以DATA1起始的片外RAM连续存放一系列数据,以“0”
为结束标志。编写程序段实现:将DATA1起始的数据传送到以 DATA2为起始的内部RAM中。
例50(P93),编程实现下列逻辑运算要求:
若(P1.0)=1或(ACC.7)=1或OV=0时,位累加器C置1。 分析:相当于逻辑函数式C=P1.0∨ACC.7 ∨(/OV) 参考程序: MOV C,P1.0 ;若P1.0=1,则C=1 ORL C,ACC.7 ;若ACC.7=1,不管原有的C为何值,C为1 ORL C,/OV ;若/OV=1,不管原有的C为何值,C为1
当 (A) = 0, (PC) = (PC) + rel,即转移
当 (A) ≠ 0, 则程序顺序执行 JNZ rel ;(PC) ←(PC) +2 当 (A) ≠ 0, (PC) = (PC) + rel,即转移 当 (A) = 0, 则程序顺序执行
执行这两条指令时,首先对累加器A内容进行判断,满足条件则转移, 否则程序顺序执行。 相对位移量rel=(目的地址-PC当前值),由CPU自动算出。
例49(P93),编程实现下列逻辑运算要求:
若(P1.0)=1,(ACC.7)=1,且OV=0时,位累加器C置1。 分析:相当于逻辑函数式C=P1.0∧ACC.7 ∧(/OV) 参考程序: MOV C,P1.0 ;若P1.0=1,则C=1 ANL C,ACC.7;若ACC.7=1,则C继续保持为1 ANL C,/OV ;若/OV=1(或OV=0),则C=1
的内容转向由P1口输出,若输入为00H,则停止
转发。
参考程序:
NEXT:MOV JZ MOV SJMP DONE:…… A,P2 DONE P1,A NEXT
(2)条件转移指令- 比较转移指令CJNE
基本格式: CJNE (目的操作数DST), (源操作数SRC), rel
比较两个操作数的大小, 如果不相等则转移;如果相等,则 顺序执行。
例:设(C)=0,P3口的内容为1 1 1 1 1 0 1 0 B。 执行指令: SETB P3.0 SETB C 则(C)=?,(P3)=? 执行结果为(C)=1,(P3)=1 1 1 1 1 0 1 1 B。 若将SETB改为CLR或CPL指令,则结果分别是?
例:把累加器A中的数据送入第2组工作寄存器的R7中。
LCALL ZERO ;区域20H~2AH清0 MOV R0,#30H MOV R1,#15 LCALL ZERO;区域30H~3EH清0 MOV R0,#40H MOV R1,#16 LCALL ZERO;区域40H~4FH清0
SJMP
$
例4,流水灯的控制。有8盏灯依次接在P1口的8位引脚,当 P1口输出低电平,对应的灯点亮。编写程序段,分别实现 下述功能: (1) 8盏灯轮流点亮; (2)8盏灯依次点亮。 (2) MOV A,#0FEH 参考程序: NEXT:MOV P1,A (1) MOV A,#0FEH ACALL DELAY_1S NEXT: MOV P1,A CLR C ACALL DELAY_1S RLC A RL A SJMP NEXT SJMP NEXT
2、位操作指令:清0、置1、取反 (1)位清0指令 (CLR) CLR C ;(C)←0 CLR bit ;(bit)←0 功能:将C或指定位(bit)清0。 (2) 位置1指令 (SETB) SETB C ;(C)←l SETB bit ;(bit)←1 功能:将C或指定位(bit)置1。 (3) 位取反指令 (CPL) CPL C ;(C)←(/C) CPL bit ;(bit)←(/bit) 功能:将 C或指定位(bit)取反。
回顾上节课内容
逻辑运算类指令
CLR/CPL RL/RLC/RR/RRC ANL/ORL/XRL
控制转移类指令
无条件转移类ACALL/LCALL、RET/RETI、 AJMP/LJMP/SJMP/JMP、NOP
控制转移类-条件转移指令:JZ/JNZ、CJNE、DJNZ 分为三类: 1、判零转移指令 JZ/JNZ
例7(P88 ,例42 ):从P1.7引脚输出4个正脉冲,其脉宽为4 个机器周期。 MOV R2,#8 LOP: CPL P1.7 ;4个正脉冲,8个状态 ;P1.7状态取反
NOP
DJNZ R2 ,LOP
布尔(位)处理类指令
共有17条指令,处理1位数据。 位处理指令可分为:
位数据传送(2条,MOV)
若 T=1 μs ,则上述程序段实现 1.024ms的延时。思考:如要实 现10ms、100ms、1s的延时又该如何修改程序段?
例 6,若单片机的主频为12MHz,分析下列程序能实现的延时
时间为多少? MOV R1, #0AH DELAY: DJNZ R1, DELAY
分析:单片机主频为 12 MHz,则机器周期为1 μs : MOV R1,#0AH为单周期指令,执行时间为1 μs; DJNZ R1, DELAY为双周期指令, 执行1次所需时间为2 μs。 R1 中存放着循环的次数 10 , DJNZ指令需执行10次,共需20 μs 。 执行上述程序共需要时间:(1T+2T*10)=21T=21*1μs=20 μs ,即 可产生21 μs的延时时间。
(3) 条件转移指令-循环控制转移指令或减1转移指令 DJNZ
;(PC) ←(PC)+2, (Rn)←(Rn)-1 当(Rn)≠0时, (PC) ←(PC) +rel,即转移; 当(Rn)=0时, 程序顺序执行。 DJNZ direct,rel ;(PC)←(PC)+3,(direct)←(direct)-1 当(direct)≠0时,(PC) ←(PC) +rel,即转移; 当(direct)=0时, 程序顺序执行。 DJNZ Rn, rel
例41(P85):设(A)=01H,分析下列程序后(A)=? JZ LABEL1 DEC A JZ LABEL2 ;(A)≠ 0,程序继续执行 ;(A)-l=00H ;(A)=00H,程序转向标号LABEL2
……
LABEL1:MOV A,#2 …… LABEL2:MOV A,#3
例42(P85),编写一段程序实现:由P2口输入
参考程序: MOV MOV CLR ADDSUM: ADD INC DJNZ MOV SJMP R2,#10 R0,#DAT A A,@R0 R0 R2,ADDSUM SUM,A $
例3:将片内RAM的20H~2AH区域清0。
参考程序段: MOV R0,#20H MOV R1,#11 ZERO:MOV @R0,#0 ;清0 INC R0 DJNZ R1,ZERO SJMP $ 若是要将多个区域清0,如何设置程序结构更合理?例如,将 20H~2AH,30H~3EH,40H~4FH这三个不同大小的区域清零?
CJNE指令执行过程中的比较操作实际上是减法操作,但不 保持两数之差,只形成了Cy标志,具体而言: 若DST=SRC, 则 (PC)←(PC)+3 ,顺序执行程序; 若DST>SRC, 则 (PC) ← (PC)+3+rel, 转移且C=0; 若DST<SRC, 则 (PC) ← (PC)+3+rel,转移且C=1;
比较转移指令的格式: CJNE A , direct, rel CJNE A , #data, rel
CJNE CJNE
Rn , #data, rel @Ri , #data, rel
例:设(A)=34H , (R7)=56H 分析下列程序执行过程: CJNE R7, #60H, N1 ;(R7)<60H,转向N1, 且Cy=1 …… N1:CJNZ A,#30H, N2 ; (A)>30H,转向N2,且Cy=0 …… N2: ……
编写程序,实现如下图所示的逻辑运算功能。(P94,例51) 其中,输入变量U、V是P1.1、P2.2的状态,W是T0的溢出
将20H~2AH,30H~3EH,40H~4FH三个不同大小的区域都清零?
参考程序:
MOV MOV MOV SP, #70H ;清0子程序 R0,#20H R1,#11
;参数R0表示初始存储单元地址
;参数R1表示存储单元个数 ZERO: MOV INC DJNZ RET END @R0,#0 R0 R1,ZERO
SFR和I/O端口),另一个必须是位累加器C(进位位标志Cy)。
例,位传送指令的应用。将片内数据存储器中的00H和07H位 的内容相交换。
分析:根据位传送指令的特点,00H位与07H位之间不可直接进行交换,选 用某一位作暂存,例如选用01H位做中间量。 参考程序: MOV C,00H MOV 01H,C MOV C,07H MOV 00H,C MOV C,01H MOV 07H,C
参考程序:MOV MOV LOOP: MOVX JZ MOV INC INC SJMP DONE: SJMP R0,#DATA1 R1,#DATA2 A,@R0 ;外部RAM DONE @R1,A ;内部RAM R0 R1 LOOP $
例2,以DAT为起始的片内RAM中连续存放了10个无符号数,编 写程序段实现:10个无符号数相加,并将和送入SUM单元。 假设相加的结果不超过8位二进制数所能表示的范围。
分析:8051内部有4组R0~R7,由RS1(PSW.4)和RS2 (PSW.3)选择工作寄存器组。例中要求第2组工作寄存器,因 此,需将RS1、RS0分别设置为0、1。 参考程序: CLR PSW.4 SETB PSW.3 MOV R7,A 或者 CLR RS1 SETB RS0 MOV R7,A
条件转移指令JZ/JNZ/CJNE/DJNZ都是相对短转移,其
转移范围为-128~127,若超过此范围,该如何实现转移?
可以借助一条长转移LJMP指令的过渡来实现。 下面举例分析各类转移指令的应用。
控制转移指令的应用举例 例1,以DATA1起始的片外RAM连续存放一系列数据,以“0”
为结束标志。编写程序段实现:将DATA1起始的数据传送到以 DATA2为起始的内部RAM中。
例50(P93),编程实现下列逻辑运算要求:
若(P1.0)=1或(ACC.7)=1或OV=0时,位累加器C置1。 分析:相当于逻辑函数式C=P1.0∨ACC.7 ∨(/OV) 参考程序: MOV C,P1.0 ;若P1.0=1,则C=1 ORL C,ACC.7 ;若ACC.7=1,不管原有的C为何值,C为1 ORL C,/OV ;若/OV=1,不管原有的C为何值,C为1