80C51按键的应用
80C51中文资料_数据手册_参数
找电子元器件网上商城就上万联芯城,万联 芯城销售IC电子元器件,芯片,电阻,电容,二极管,三极管等 多种类别,现货型号能够满足各种物料需求,BOM报价可有效提 高采购效率,只需提交物料清单,商城即可为您查询物料报价 ,整单下单有优惠,电子元器件一站式采购,满足客户多样化物的考勤系统,完整masteringof速度与CPU贸易。时钟源包括:•外部时钟输入•高速晶体或陶瓷振荡器•集成高 速RC oscillatorThe选择时钟源可以除以2 - 512在孵蛋的CPU和theperipherals之前。当设置X2函数时,CPU每周期需要6个时钟周期。时钟 由几个SFR寄存器控制:OSCON, CKCON0, CKCON1, CKRL。AT8xC5112包括以下振荡器:•晶体振荡器•集成高速RC振荡器,典型频率为 12 MHzCrystal振荡器:OSCAThe晶体振荡器使用两个外部引脚,XTAL1作为输入,XTAL2作为输出。80C51晶体谐振器和陶瓷谐振器都可 以使用。在振荡器源中,XTAL1是人工启动产品的。OSCCON寄存器中的OSCAEN是晶体振荡器或外部振荡器输入的使能信号。集成 高速RCOscillator: oscb高速RC振荡器的典型频率为12mhz。注意片上振荡器的频率容限为±50%,可能不适合在某些应用中使 用。OSCCON寄存器中的OSCBEN是一种用于高速RC振荡器的使能信号。CKS寄存器中的时钟选择器位用于从晶体到RC振荡器的选 择。OSCCON寄存器中的OSCBEN位用于启动RC振荡器。OSCCON寄存器中的OSCAEN位用于启用晶体振荡器或外部振荡器输入。时 钟预调器在提供CPU和外围设备之前,根据CKRL寄存器的定义,主时钟除以2到512的因数。80C51每条指令的CPU需要12到256*12个时 钟周期。这允许:•接受要在XTAL1输入上接受的任何循环比率。•降低CPU功耗。X2位允许绕过时钟预调器;在这种情况下,CPU每台机 器周期只需要6个时钟周期。在X2模式下,当这个分配器被绕过时,onXTAL1上的信号的循环比率必须在40到60%之间WDT的目的是作 为一种恢复方法,在某些情况下,CPU可能被细分为软件故障。WDT由一个14位计数器和看门狗TimerReset (WDTRST) SFR组成。默认 情况下,退出重置时禁用WDT。要启用WDT,用户必须将01EH和0E1H按顺序写入WDTRST、SFR loca-tion 0A6H。当WDT被启用时, 它将增加每一个机器周期(6个内部时钟周期),除了通过重置(hardwarereset或WDT溢出重置)之外,没有其他方法可以禁用 WDT。WDTPRG寄存器的T0位用于选择10位或14位之后的溢出。当WDT溢出时,它将生成一个内部重置。它还将在模拟器的st -pin上 驱动输出复位高脉冲。脉冲长度为WD时钟的24个时钟周期。使用wdto启用WDT,用户必须将01EH和0E1H按顺序写入WDTRST、SFR 位置0A6H。当启用WDT时,用户需要通过将to01EH和0E1H写入WDTRST来对其进行服务,以避免WDT溢出。当14位计数器达到16383 (3FFFH)或1024 (1FFFH)时溢出,这将重置设备。当WDT启用时,80C51将在振荡器运行时增加每一个机器周期。这意味着用户必须至 少每16383个机器周期重置一次WDT。要重置WDT,用户必须将01EH和0E1H写入WDTRST。WDTRST是一个只写寄存器。wdt计数器 不能读或写。当WDT溢出时,它将在RST-pin处生成一个输出集脉冲。复位脉冲持续时间为96x TOSC,其中TOSC =1/FOSC。为了更好 地利用WDT,应该在那些代码段中提供服务,这些代码段将在防止WDT重置所需的时间内定期执行。为了拥有更强大的WDT,增加 了27个计数器来扩展超时能力,在FOSC = 12mhz和T0=0时,从16ms到2s。要管理这个特性,请参考WDTPRG寄存器描述表13。 (SFR0A7h)。表12。WDTRST注册地址(0A6h)
单片机 80C51单片机的软件基础_2
单片机 80C51单片机的软件基础_2在现代电子技术领域,单片机扮演着至关重要的角色。
80C51 单片机作为其中的经典代表,其软件基础是我们深入理解和应用它的关键。
首先,让我们来了解一下 80C51 单片机的指令系统。
指令是单片机能够执行的基本操作命令,就如同我们日常做事的具体步骤。
80C51单片机的指令系统丰富多样,包括数据传送指令、算术运算指令、逻辑运算指令、控制转移指令等等。
数据传送指令用于在单片机内部的寄存器、存储器之间进行数据的移动。
比如说,将一个数值从一个寄存器传送到另一个寄存器,或者将存储单元中的数据读取到寄存器中。
算术运算指令则能实现加法、减法、乘法、除法等基本的数学运算。
这在处理各种数据计算的任务中是必不可少的。
逻辑运算指令用于对数据进行逻辑与、或、异或等操作,帮助我们实现对数据的逻辑判断和处理。
控制转移指令则决定了程序的执行流程。
它可以让程序根据特定的条件跳转到指定的地址继续执行,从而实现分支和循环等功能。
接下来,我们说一说 80C51 单片机的编程语言。
常见的编程语言有机器语言、汇编语言和高级语言。
机器语言是单片机能够直接识别和执行的二进制代码。
它由一连串的 0 和 1 组成,虽然执行效率高,但编写和阅读都非常困难。
汇编语言是一种符号化的机器语言,使用助记符来代替机器指令的操作码,用地址符号或标号来代替地址码。
相比机器语言,汇编语言更易于理解和编写,但仍然需要对单片机的硬件结构有较深入的了解。
高级语言,如 C 语言,具有更高的可读性和可维护性。
它能够让开发者更专注于解决问题的逻辑,而不必过多地关注单片机的底层硬件细节。
使用高级语言编写的程序,经过编译后可以在 80C51 单片机上运行。
在软件开发过程中,编程工具也是不可或缺的。
Keil 就是一款常用的 80C51 单片机编程软件。
它提供了方便的代码编辑、编译、调试环境,能够大大提高开发效率。
编写好程序后,我们需要将其下载到单片机中。
80c51汇编语言指令
80c51汇编语言指令80C51汇编语言是一种常用的低级程序设计语言,广泛应用于嵌入式系统中。
它是基于Intel 8051系列单片机的指令集架构,具有高效、灵活、可靠的特点。
本文将介绍80C51汇编语言的一些常用指令。
一、MOV指令MOV指令是80C51汇编语言中最基本、最常用的指令之一,用于将数据从一个寄存器或内存位置复制到另一个寄存器或内存位置。
例如,MOV A, #25H表示将立即数25H复制到A寄存器中。
二、ADD指令ADD指令用于执行两个操作数的相加运算,并将结果存储在目标操作数中。
例如,ADD A, R0表示将A寄存器和R0寄存器中的数据相加,并将结果存储在A寄存器中。
三、SUBB指令SUBB指令用于执行两个操作数的减法运算,并将结果存储在目标操作数中。
与ADD指令不同的是,SUBB指令会考虑进位位的值。
例如,SUBB A, R1表示将A寄存器中的数据减去R1寄存器中的数据,并将结果存储在A寄存器中。
四、MUL指令MUL指令用于执行两个操作数的乘法运算,并将结果存储在累加器A和可选的乘法寄存器B中。
例如,MUL AB表示将累加器A和B 中的数据相乘,并将结果存储在A和B中。
五、DIV指令DIV指令用于执行两个操作数的除法运算,并将结果存储在累加器A和可选的余数寄存器B中。
例如,DIV AB表示将累加器A和B 中的数据相除,并将商存储在A中,余数存储在B中。
六、JC、JNC指令JC指令用于在条件跳转时执行跳转操作,如果进位标志位(C)为1,则执行跳转。
JNC指令则相反,只有当进位标志位为0时才执行跳转。
七、JZ、JNZ指令JZ指令用于在条件跳转时执行跳转操作,如果零标志位(Z)为1,则执行跳转。
JNZ指令则相反,只有当零标志位为0时才执行跳转。
八、CJNE指令CJNE指令用于在条件跳转时执行跳转操作,它比较两个操作数的值,并根据比较结果来确定是否执行跳转。
如果两个操作数相等,则不执行跳转;如果不相等,则执行跳转。
简述80c51单片机布尔处理的功能
简述80c51单片机布尔处理的功能
80C51单片机是常见的51系列单片机之一,具有强大的布尔处理功能,包括:
1. 逻辑运算:支持逻辑运算符的乘、除、不等于、等于等操作,
包括AND、OR、NOT、XOR、NOTOR、逻辑对、逻辑反、逻辑加、逻辑
减等操作。
2. 位运算:支持位运算符的左移、右移、插入、删除、取反等操作。
3. 寄存器控制:可以通过寄存器操作实现布尔运算,包括赋值、
取值、比较、操作等。
4. 条件语句:支持条件语句,包括if-else、switch-case等。
5. 状态机:支持状态机编程,可以实现各种状态转换和条件判断。
6. 布尔数组:支持布尔数组编程,可以实现各种逻辑计算和组合
操作。
7. 定时器控制:可以通过定时器操作实现布尔运算,包括中断控
制和计时器控制。
8. 存储器控制:可以通过存储器操作实现布尔运算,包括读、写
存储器和位映射等操作。
这些功能使得80C51单片机成为一款功能强大的单片机,广泛应
用于各种电子设备和系统中。
第5章 80C51基本功能
TXD RXD 80C51 主机 TXD RXD 80C51 0#从机 TXD RXD 80C51 1#从机 TXD RXD 80C51 2#从机
图5-10 多机通信连接图
多机通信的实现,主要靠主、从机之间正确地设置与 判断多机通信控制位SM2和发送或接收的第9数据位 (D8)。以下简述如何实现多机通信。 在编程前,首先要给各从机定义一个地址字节,以辨 认从机。地址字节和数据字节可用第9数据位来区别,前 者的第9位为1,而后者的第9位为0。所以,在主机发送地 址帧时,地址/数据标识位TB8应设置为“1”,以表示是地 址帧。例如,可以这样编写指令: MOV SCON,#0D8H ;设串行口为方式3,TB8置“1”,允许接收
接收时,由REN置“1”,允许接收,同时将RI 清“0”。在满足这个条件的前提下,再根据SM2的 状态和所接收到的RB8的状态才能决定此串行口在 信息到来后是否会使RI置“1”,并申请中断,接收 数据。 当 SM2=0时,不管RB8为“0”,还是为“1”, RI都置“1”,此串行口将接收发来的信息。 当SM2=1,且RB8为“1”时,表示在多机通信 情况下,接收的信息为地址帧,此时RI置“1”。串 行口将接收发来的信息。 当SM2=1,且RB8为0时,表示接收的信息为 数据帧,但不是发给本从机的,此时RI不置“1”, 因而所接收的数据帧将丢失。
5.2.2.4 方式3
方式3为波特率可变的11位异步通信方式。除波特率 外,方式3和方式2完全相同。
5.2.2.5 多机通信
80C51的方式2和方式3有一个专门的应用领域,即多 机通信。这一功能使它可以方便地应用于集散式分布系统 中。这种系统采用一台主机和多台从机,它们的通信方式 之一如图 5-10所示。
方式1以10位数据为一帧传输,设有一个起始位“0”,8 个数 据位和一个停止位“1”。其帧格式为:
80C51单片机内部功能单元及应用
1)IT0:外部中断0触发方式控制位。
IT0=0,为电平触发方式,(低电平有效)。
IT0=1,为边沿触发方式(下降沿有效)。
2)IE0:外部中断0中断请求标志位。当IE0=1时, 表示/INT0向CPU请求中断。
3)IT1:外部中断1触发方式控制位,其操作功能 与IT0类似。
4)IE1:外部中断1中断请求标志位。当IE1=1时, 表示/INT1向CPU请求中断。
4.中断源 51单片机共有5个中断源:外部中断0、外部中断1、定时/ 计数器中断0、定时/计数器中断1、串行口中断。
中断源
请求标志
入口地址 优先级
外部中断0 定时器中断0 外部中断1 定时器中断1
串行口发送/接受中 断
IE0 TF0 IE1 TF1 TI/RI
0003H 000BH 0013H 001BH 002BH
TR1、TR0这2位与中断无关,仅与定时/计数器 T1和T0有关,它们的功能将在下一节中详述。
需要注意的是:当单片机复位后,TCON被清0, 则CPU关中断,所有中断请求被禁止。
2.串行口控制寄存器SCON(98H)
SCON是串行口控制寄存器,其低2位锁定串 行口的发送中断和接受中断的中断请求标志TI和 RI。对SCON可进行字节寻址和位寻址其格式如 下表:
6.2.2 中断的控制与实现
中断的控制与实现是通过4个与中断相关的特 殊功能寄存器配置来完成的,它们分别是定时 /计数器控制寄存器TCON、串行口控制寄存器 SCON、中断允许控制寄存器IE以及中断优先 级控制寄存器IP。
1.定时/计数器控制寄存器TCON(88H)
TCON是定时/计数器控制寄存器,它锁存2个 定时/计数器的溢出中断标志及外部中断/INT0和 /INT1的中断标志,对TCON可进行字节寻址和位 寻址。与中断有关的各位定义如下表:
单片机第八章80C51单片机的应用系统实例
第8章80C51单片机的应用系统实例8.1油井压力、流速数据采集系统8.2单片机控制的家用电加热锅炉电路8.1 压力、流速数据采集系统在石油开采过程中,需要确切地了解油井内部的原油压力和流速,这对于有效地提高油井的产量有十分重要的意义。
本系统可以随油井钻头深入井下,实地采集并存储第一手的压力和流速数据。
返回地面后,把数据送入计算机内,为分析油井状况提供准确的原始资料。
为取得特定油井深度下的原油压力及流速数据,本系统的工作时序必须与钻头进入油井的时间和所到达的深度相符合。
钻头进入油井后的确定时间内,系统处于等待状态;当钻头达到预定的深度以后,系统自动开启并开始采集第一次数据;随后进入等待状态,等待下一次的数据采集。
这样的采集进行六次,然后系统便停止工作,处于低功耗状态;待钻头重新回到地面后,再与计算机联接,把采集到的数据输入计算机进行进一步的处理系统总体框图硬件系统组成压力、流速数据采集系统由主机板、信号电路板及通信接口板三部分组成。
(1) 主机板(2) 信号电路板(3) 通信接口板电路软件的描述(1)主程序主程序的流程见如图所示。
由流程图可以看出,整个程序分为数据采集程序和流速标定程序两部分。
系统上电或复位之后,经系统初始化,首先判断P3.2(INT0)的状态:若为1,转入数据采集程序;若为0,则转入流速标定程序。
8.2单片机控制的家用电加热锅炉电路单片机控制的家用电加热锅炉电路,它能够显示温度和时间,可根据家人起居习惯来设定运行和停止的时间间隔和次数,从而可以节约电能消耗。
8.2.1 工作原理本电路设计是单片机系统的综合应用。
它包含了LCD显示接口,键盘组成的人机交互接口,I2C总线接口的时钟芯片和E2PROM存储器芯片,单总线接口的温度传感器芯片,和输出负载接口电路,工作原理如图所示。
本电路采用8位单片机(U1:AT89C52)作为主控制芯片,晶振采用12MHz。
家用电加热锅炉电路工作原理图1. LCD显示接口液晶显示屏的控制器为HD162022. 温度传感器的接口DS18B20 (U2)系列芯片是由美国DALLAS公司推出的一种单片集成温度传感器。
单片机原理及应用-第四章80C51单片机的功能
对两个操作数执行逻辑异或操作, 并将结果存放在目标地址中。
03
02
OR
对两个操作数执行逻辑或操作,并 将结果存放在目标地址中。
NOT
对操作数执行逻辑非操作,并将结 果存放在目标地址中。
04
控制转移指令
JMP
无条件跳转到指定地址。
JC/JNC
当进位标志位为1或0时,跳转 到指定地址。
JZ/JE
06
80C51单片机的串行通信 接口
串行通信的基本概念
串行通信
通过一条数据线,按照位顺序传输数据,实现数 据的发送和接收。
异步通信
数据传输速率不固定,发送器和接收器使用各自 的时钟。
同步通信
数据传输速率固定,发送器和接收器使用同一时 钟源。
80C51单片机的串行口结构及控制寄存器
要点一
串行口结构
算术运算指令
ADD
将两个操作数相加,并将结果存放在 目标地址中。
SUB
从源地址中减去目标地址中的值,并 将结果存放在源地址中。
MUL
将两个操作数相乘,并将结果存放在 目标地址中。
DIV
将源地址中的值除以目标地址中的值, 并将商存放在源地址中,余数存放在 累加器中。
逻辑运算指令
01
AND
对两个操作数执行逻辑与操作,并 将结果存放在目标地址中。
80C51单片机的应用领域
工业控制
80C51单片机在工业控制领域应用广泛, 如电机控制、自动化生产线控制等。
通信设备
80C51单片机在通信设备领域应用广 泛,如调制解调器、路由器、交换机
等。
智能仪表
80C51单片机可以用于各种智能仪表 的控制系统,如温度、压力、流量等 传感器采集和处理。
n第八章_80C51单片机的应用系统实例(1)
第八章
80C51单片机的应用系统 实例
② 负电压发生电路主要产生一个-5 V的 电压,为仪表放大器U4(INA118)提供负 电源。电路由U7(7660)和电容C5、C6组 成。 ③仪表放大器U4(INA118)可将压力传 感器桥路输出的毫伏(mV)级电压放大,以 适应VF变换器U5(AD654)的需要。电阻 R7是调节仪表放大器的放大倍数用的。
第八章
80C51单片机的应用系统 实例
图8-2 主机板电路原理图
第八章
80C51单片机的应用系统 实例
(2) 信号电路板 信号电路板电路原理图如图8-3所示。它 通过插座W1与主机板联接,通过插座W与 压力传感器相联,通过插座W′与流速传感 器相联。其中包含压力信号调理电路、流 速信号调理电路和模拟电源控制电路。
第八章
80C51单片机的应用系统 实例
图8-3 信号电路板电路原理图
第八章
80C51单片机的应用系统 实例
(3) 通信接口板电路 通信接口板电路的原理图如图8-4所示。 当系统从井下采集完数据回到地面或进行 标定实验时,该板用插座W1’与主机板上的 W1联接。
第八章
80C51单片机的应用系统 实例
第八章
80C51单片机的应用系统 实例
2) 流速数据采集子程序 设定T0为定时器,定时时间为100 ms/次,采集时 间为6 s=100 ms/次×60次;设定 T1 为计数方 式,所计流量脉冲写入片外RAM中。
第八章
LIU: MOV MOV MOV MOV MOV
80C51单片机的应用系统 实例
第八章
8.1.1
80C51单片机的应用系统 实例
设计目标 本系统使用89C51作为控制芯片,对来自压力 及流速传感器的信号进行采集,并把采集到的数 据存放在数据存储器中。系统可以工作在标定和 实际测量两种工作状态下。标定状态是为了修正 系统误差而在测量前进行一组标准压力和流速数 据的测量。具有可与通用计算机联接的串行通信 接口。在等待状态时,系统工作在低功耗方式。 系统具有工作状态显示系统,可以显示标定、测 量、通信、等待等不同的工作状态。
AT80C51的工作原理
AT80C51的工作原理AT80C51是一款8位微控制器,其工作原理如下:1. 寄存器:AT80C51包含了多个内部寄存器,用于存储数据和控制微控制器的操作。
这些寄存器可以通过特定的地址访问,并且用于存储输入/输出端口、时钟控制、中断向量等信息。
2. CPU:AT80C51的中央处理器(CPU)负责执行指令和处理数据。
它包含一个累加器(ACC)和多个通用寄存器(R0-R7),用于进行算术和逻辑运算。
CPU通过从寄存器中读取数据、执行指令、写入结果来完成计算。
3. 存储器:AT80C51具有内部存储器和外部存储器接口。
内部存储器包括程序存储器(ROM)和数据存储器(RAM)。
ROM用于存储程序指令,RAM用于存储临时数据和变量。
外部存储器接口可以连接额外的存储器设备,以扩展存储容量。
4. 时钟:AT80C51使用时钟来驱动CPU和其他部件的操作。
时钟可以通过内部时钟源或外部时钟源提供。
时钟速度决定了AT80C51的工作频率和指令执行速度。
5. 输入/输出(I/O)端口:AT80C51具有多个可编程输入/输出端口。
这些端口可以连接外部设备,如传感器、显示器、键盘等。
通过读取和写入I/O端口的状态,AT80C51可以与外部设备进行通信。
6. 中断:AT80C51支持中断功能,可以响应外部信号的触发。
当发生中断信号时,CPU会立即暂停当前的任务,并跳转到对应的中断处理程序。
中断可以用于实时响应外部事件,提高系统的实时性能。
总结起来,AT80C51的工作原理是通过CPU执行指令,从寄存器和存储器中读取数据,进行计算和处理,并与外部设备进行通信。
时钟驱动整个系统的运行,而中断机制能够实现实时响应外部事件。
80C51的定时、计数器
GATE:门控位。GATE=0时,只要用软件使 :门控位。 = 时 只要用软件使TCON中的 中的 TR0或TR1为1,就可以启动定时 计数器工作;GATA=1时, 计数器工作; 或 为 ,就可以启动定时/计数器工作 = 时 要用软件使TR0或TR1为1,同时外部中断引脚或也为高电 要用软件使 或 为 , 平时,才能启动定时/计数器工作 计数器工作。 平时,才能启动定时 计数器工作。即此时定时器的启动条 加上了或引脚为高电平这一条件。 件,加上了或引脚为高电平这一条件。 :定时 计数模式选择位。 定时/计数模式选择位 为定时模式; 定时 计数模式选择位。 =0为定时模式; =1 为定时模式 C/T C /T C /T 为计数模式。 为计数模式。 M1M0:工作方式设置位。定时 计数器有四种工作方式, 计数器有四种工作方式, :工作方式设置位。定时/计数器有四种工作方式 进行设置。 由M1M0进行设置。 进行设置
工作方式3将 分成为两个独立的 位计数器TL0和TH0 。 分成为两个独立的8位计数器 工作方式 将T0分成为两个独立的 位计数器 和
5.3.4 定时 计数器用于外部中断扩展 定时/计数器用于外部中断扩展
扩展方法是,将定时 计数器设置为计数器方式 计数器设置为计数器方式, 扩展方法是,将定时/计数器设置为计数器方式,计数初值 设定为满程,将待扩展的外部中断源接到定时/计数器的外部 设定为满程,将待扩展的外部中断源接到定时 计数器的外部 计数引脚。从该引脚输入一个下降沿信号,计数器加1后便产 计数引脚。从该引脚输入一个下降沿信号,计数器加 后便产 生定时/计数器溢出中断 计数器溢出中断。 生定时 计数器溢出中断。 例如,利用 扩展一个外部中断源 扩展一个外部中断源。 例如,利用T0扩展一个外部中断源。将T0设置为计数器方 设置为计数器方 按方式2工作 工作, 的初值均为0FFH,T0允许中 式,按方式 工作,TH0、TL0的初值均为 、 的初值均为 , 允许中 开放中断。 断,CPU开放中断。其初始化程序如下: 开放中断 其初始化程序如下: MOV TMOD,#06H 为计数器方式2 , ;置T0为计数器方式 为计数器方式 MOV TL0,#0FFH , ;置计数初值 MOV TH0,#0FFH , SETB TR0 启动T0工作 ;启动 工作 SETB EA ;CPU开中断 开中断 SETB ET0 允许T0中断 ;允许 中断
举例说明80c51系列单片机的算术运算指令
1. 概述在现代科技发展迅猛的今天,单片机作为嵌入式系统的核心,扮演着至关重要的角色。
而在单片机的指令集中,算术运算指令更是其中的重要组成部分。
今天,我们将深入探讨80c51系列单片机的算术运算指令,并通过具体的例子来详细说明其运行原理和应用场景。
2. 算术运算指令的基本概念在80c51系列单片机的指令集中,算术运算指令主要包括加法、减法、乘法和除法等基本运算。
这些指令能够对数据进行直接的操作和计算,为单片机的应用提供了强大的支持。
在接下来的内容中,我们将通过具体的例子来解释这些算术运算指令的具体运行方式。
3. 举例说明80c51系列单片机的算术运算指令3.1 加法指令我们将介绍80c51系列单片机中的加法指令。
这些指令可以使单片机对数据进行简单的加法运算,从而实现数据的累加和运算。
当我们需要对两个数据进行相加并将结果存储在一个特定的寄存器中时,我们可以使用ADD指令来实现。
具体的操作方式可参考下面的示例代码:```assemblyMOV A, #10H ; 将第一个数据10H加载到累加器A中ADD A, #20H ; 将第二个数据20H与累加器A中的数据相加```通过这段示例代码,我们可以清晰地看到,在80c51系列单片机中,使用ADD指令可以实现对累加器中数据的加法运算,为我们的应用提供了便利的操作方式。
3.2 减法指令除了加法指令之外,80c51系列单片机还提供了减法指令,用于实现数据的递减和运算。
当我们需要将一个数据减去另一个数据并将结果存储在一个特定的寄存器中时,我们可以使用SUB指令来实现。
具体的操作方式可参考下面的示例代码:```assemblyMOV A, #30H ; 将第一个数据30H加载到累加器A中SUBB A, #10H ; 将第二个数据10H与累加器A中的数据相减```通过这段示例代码,我们可以清晰地看到,在80c51系列单片机中,使用SUB指令可以实现对累加器中数据的减法运算,为我们的应用提供了更加灵活的操作方式。
单片机原理及应用--第四章80C51单片机的功能
;P1.i=1,跳转
JBC
P1.i ,rel ;P1.i=1,跳转且P1.i←0
逻辑运算 ANL C, P1.i ;CY←( P1.i· CY) ORL C, P1.i;CY←( P1.i+CY) 其中:P1.i中的i=0,…,7。
第四章(第 12页)
单片机原理及应用
第四章 80C51单片机的功能
第四章 80C51单片机的功能
3、P1口的操作 对于P1口不仅可以字节操作, 也可以按位操作。
字节操作指令:
输出 MOV P1,A ;(P1)← (A)
MOV
MOV
P1,#data
P1, direct
;(P1)←#data
;(P1)←(direct)
输入
MOV A ,P1
MOV direct,P1
; (A)←(P1)
;(direct)←(P1)
第四章(第 11页)
单片机原理及应用
第四章 80C51单片机的功能
位操作指令: 置位、清除 SETB CLR 输入、输出 MOV P1.i P1.i P1.i,C ;P1.i←1 ;P1.i←0 ;P1.i←CY
MOV
判跳 JB
C, P1.i
;CY← P1. I
P1.i,rel
第四章(第 21页)
单片机原理及应用
第四章 80C51单片机的功能
(2)替代功能。 替代输入功能: P3.0——RXD, 串行输入口。 P3.2——INT0, 外部中断0的请求。 P3.3——INT1, 外部中断1的请求。 P3.4——T0, 定时器/计数器0外部计数脉冲输入。 P3.5——T1, 定时器/计数器1外部计数脉冲输入。 替代输出功能: P3.1——TXD, 串行输出口。 P3.6——WR,外部数据存储器写选通,输出,低有效。 P3.7——RD,外部数据存储器读选通,输出,低有效。
第5章80C51的并行口应用
P0.7
P1.5
P1.6
P1.7 89S51
2019/12/16
20
a
com
+5V
b c
100Ω
d e
f g
dp
共阳极
判有无键按下。将列线设置为输出口,输出全0 (所有列线为低电平),然后读行线状态,若行线状 态不全为高电平,则可断定有键按下。
判按下哪个键。先置列线C0为低电平,其余列线为 高电平,读行线状态,如行线状态不全为“1”,则说 明所按键在该列;否则所按键不在该列,再使C1列线 为低电平,其它列为高电平,判断C1列有无按键按下。 其余类推。
获得相应键号。键号:键号 = 行首号+列号。行首 号为行数乘以行号。根据键号就可以进入相应的键功 能实现程序。
线反转法
键号:
2
C0 C1
C2 C3
0123
4567
R0
8 9 AB
R1
C D E F R2
R3 5.1K×8
P1.0 P1.1 P1.2 P1.3
P1.4 P1.5 P1.6 P1.7
B2
A2
B3
A3
74HC245
B4
A4
B5
A5
B6
A6
B7
A7
B8 G A8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
89S51
经缓冲器驱动
(245:单根线<25mA,总和<75mA)
【例5-1】如图所示电路,编程实现左右循环移动的流水 灯,间隔时间为0.5s
#include <reg52.h>
80C51的定时计数器原理与应用
ORG 0000H
LJMP MAIN ORG 000BH
;跳转到主程序
;T0的中断入口地址
LJMP DVT0
;转向中断服务程序
ORG 0100H
MAIN:MOV TMOD,#01H ;置T0工作于方式1
MOV TH0,#0D8H
;装入计数初值
MOV TL0,#0F0H
方式,低四位用于T0,高四位用于T1。其格式如下:
第五页,编辑于星期三:四点 十二分。
GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或 TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软 件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能 启动定时/计数器工作。即此时定时器的启动条件,加上了或引脚
中断引脚上正脉冲的宽度。
第九页,编辑于星期三:四点 十二分。
二、方式1
方式1的计数位数是16位,由TL0作为低8位、TH0作 为高8位,组成了16位加1计数器 。
TCON
申请 中断
TF1 D7
TR1
溢出
TF0
TH0 TL0
TR0
8位 8位
D0
1 0 &
≥1
T0引脚
机器周期 1
INT0引脚
TMOD
1 M0 D0 0 M1
5、定时/计数器的4种工作方式各有何特点? 6、要求定时/计数器的运行控制完全由TR1、TR0确定和完全由、 高低电平控制时,其初始化编程应作何处理?
第十七页,编辑于星期三:四点 十二分。
7、当定时/计数器T0用作方式3时,定时/计数器T1可以工作在何种
方式下?如何控制T1的开启和关闭?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六节按键的应用6.1按键简介同学们!现在你们已经能熟练的使用数码管了, 那么,我们就可以用数码管干些事情了,先设计个表吧。
调表需要用按键,0K ,让我们来练习使用按键 …八_ 。
按键分为编码按键和非编码按键。
如果按键的识别由专门的按键编码器识别并输出特定 的键值或编码,这种按键称为编码按键, 比如我们计算机的键盘, 它内部有一个单片机专门 识别按键并输出对应的编码。
如果按键的识别依靠单片机本身来识别,则称为非编码按键。
比如下面这些按键。
A _A・ 9《・• ■图6-1图6-1是单片机常用的几种按键。
其中弹性小按键一按下,开关就闭合,一松手,开关 就会自动断开。
自锁式按键按下时就会闭合并且自动锁定在闭合状态, 再次按下时才会弹起断开,这种按键通常当做电源开关。
6.2独立按键检测的原理一般情况下,按键与单片机的连接如下面这图6-2所示。
FO TAJPC rs _i ■ R :i 2-TJJD2 iRj 寸 I o . 5® I - A 閃图6-2图中上拉电阻R1、R2值一般在4.7k~10k 之间(对于内部端口有上拉电阻的单片机则 可省略此电阻,比如 51的P1、P2、P3 口),单片机对于按键的按下与否的检测,则是通过 检测相应引脚上的电平来实现的。
对于图6-2而言,当单片机检测(读取)到 P1.2和P1.3-1ECT-p; ~w. p: 11**1 K! n.wii F3.JA11 P3_Wk1]Plow TrfjM ^TCIPlTfij-JJ —JJ.亠!PUD P Ti H J pi a I s ! Pr £■ H € Pi 7引脚上面的电平为低时, 则表示按键已经按下,反之,则表明按键没有按下。
我们在程序中 只要反复的检测 P1.2和P1.3引脚上面的电平,一旦检测到为低了,就可以判断按键按下。
呵呵,简单吧。
等会,您先别乐呵,话还没说完呢。
下面我们来看看,当按键按下时, 引脚上面的波形是怎么变化的。
图6-3图6-3上图是一个理想波形图,当按键按下时,P1.2引脚的电平马上被拉低到0V 了。
但是实际上,当按键闭合时,由于按键的机械特性并不能马上保持良好的接触, 而是来回弹跳。
因此,实际的 P1.2引脚的波形图是图 6-3的下图所示。
尽管抖动的时间很短,我们的 手根本感觉不出来。
但是对于一秒钟执行百万条指令的单片机而言, 这个时间是相当的长了。
那么在这段抖动的时间内,单片机可能读到多次高低电平的变化。
如果不加任何处理的话, 就会认为已经按下,或者松开很多次了。
而事实上,我们的手一直按在按键上,并没有重复按动很多次。
要想能够正确的判断按键是否按下就要避开这段抖动的时间。
根据一般按键的机械特点,以及按键的新旧程度等而言,这段抖动的时间一般在 5ms~20ms 之间。
而一旦按键按下,稳定闭合的时间一般最短是 20ms (手最快的人按下到放开的时间)。
因此,我们通常需要使用如下的防抖措施:1•当P1.2检测到按键按下(即 P1.2引脚读到低电平)。
2•延时 10~20ms 。
3•再次检测P1.2按键是否仍被按下(即 P1.2引脚依旧读到低电平),如果此时P1.2引脚仍然能读到低电平,说明按键确实已经稳定的按下了。
4•等待按键被放开。
sbit BtnAdd=P1A 2; // 将 P1.2 引脚重新命名为 BtnAddif (BtnAdd==O ) //当P1.2检测到按键按下(即 P1.2引脚读到低电平) {Delay (20); // 延时 20ms 。
if (BtnAdd==O )〃再次检测P1.2按键是否仍被按下,如果此时 P1.2引脚〃仍然能读到低电平,说明按键确实已经稳定的按下了 {while (!BtnAdd );//等待按键被放开(按键没放开时BtnAdd 为低电平(逻辑 0),//取反后为高电平(逻辑 1),此时while 循环条件为真, //则继续执行该句,直到按键放开,后面的代码才能被执行)P1.2逹出Mr :6.3独立按键的使用请实现:一位数码管显示从 0~9的数字,使用两个按键“ Add ”和“ Sub ”,按一下Add , 显示数字加一,按一下 Sub ,显示数字减一,如显示数字小于 0或大于9,显示字符“ E ”, 即“ ERROR 的简写。
6.3.1硬件的选择与仿真电路的设计1. 打开Proteus ,选择“ File/NewDesign ”菜单选项,新建一个“设计项目” 。
并将项目保存为“ PushButton_1 ”。
2. 选择“ P ”按钮或菜单“ Library/Pick Divice/Symbol …P ”菜单,从“元件库”中选取 元件。
依次添加其他元件。
其名称和位置见下表。
元件名称 CategorySub-Category Results 单片机Microprocessor ICs 8051 Family AT89C52 一位7段数码管 Optoelectro nics 7-Segme nt Displays 7SEG-MPX1-CA 按钮Switches & RelaysSwitchesBUTTON电阻 Resistors Gen eric RES依次从备选元件库中摆放器件,连线,画出仿真电路图,如图 6-4所示。
图6-4 电路的说明:在仿真电路中,由于我们使用的是 P1 口,它内部已经有上拉电阻了,因此我们可以不再添加上拉电阻了。
但是,如果您使用的是P0 口(内部没有上拉电阻),大家必须添加上拉电阻,以确保单片机可以准确的检测到按键按下的动作。
632程序的设计1.新建一个keil 项目,并命名为"PushButt on _1”并添加一个名为tllu亠MqfFIh£H 1暫4--1・・I"ma in .c ”的源代码文件,然后键入如下代码。
如代码6.1所示。
6.4多位数码管的显示请实现:两位数码管显示从00~59的数字,使用两个按键Add和Sub,按一下Add,数字加一,按一下Sub,数字减一,如此反复。
641硬件的选择与仿真电路的设计1. 打开Proteus,选择"File/NewDesign ”菜单选项,新建一个"设计项目”。
并将项目保存为"PushButton_2 ”。
2. 选择“ P”按钮或菜单“ Library/Pick Divice/Symbol …P ”菜单,从“元件库”中选取6-5所示。
图6-5 电路说明因为我们使用了两位共阳数码管,由于51的驱动能力不足以直接驱动数码管,因此,我们通过两个PNP 三极管作为电子开关来驱动数码管位选线,当P3.0输出低电平时,PNP 三极管导通,Vcc 通过三极管Q1加在数码管的个位,从而使数码管的个位发光(P3.1控制数码管十位发光的原理相同)。
电阻R3和R4为限流电阻,通常取值为 1K 左右。
电阻R5和R6 为下拉电阻,保证 PNP 三极管可靠地截止,通常取值为 10K 左右。
642实现原理分析1. 我们使用一个变量 count 表示当前数值,让 count 从0开始,每按 Add 键加1,当count 增加到59时,让它回到0,每按Sub 键减1,当count 减少到0时,让它回到59重新开始。
这样,count 就在0~59之间反复变化。
2. 我们让数码管的个位显示 count 的个位,数码管的十位显示count 的十位。
6.4.3程序的设计 1.新建一个keil 项目,并命名为"PushButt on _2”并添加一个名为"ma in .c ”的源代码文 件,然后键入如下代码。
如代码 6.2所示。
代码6.2#in clude <reg52.h> #in clude "function .h" #i nclude "com mon .h" #define Seg7Port P2//数码管连接在 P2 口上//用一个数组来定义字符 0~9共阳极数码管编码园0呻 m <1从尉 n^AW 峠J IM 刼roaw*4 H>SMi4 RtfMK A|7M|iT 幷(MB APlfl PI ■ F14K 血・0 man 旧也码KrSAii R -EAI -In BL •哺 raj Mi 町urn raiffiiFHfc^6.5 4X4键盘的使用当我们的应用中要使用比较多的按键时,如果使用独立按键的话,将会占用很多I/O 口, 那么,为了节约I/O 口线,我们需要使用另一类按键,其中比较常用的是4X4键盘。
让我们实现如下功能:让1位数码管依次显示4X4键盘的编码(数字键显示对应的数字,功能键显示对应的A~F字符)。
6.5.1 4X4键盘实现按键检测的原理分析一般情况下,4X4键盘与单片机的连接如下面这图6-6所示。
图6-64X4键盘通常有4行4列共16个按钮,分别跨接在4根交叉的行线和列线上,我们通 常把4根行线和4根列线连接在单片机的一个I/O 口上,比如像图 6-6那样,4根行线连接在P2.0~P2.3上,4根列线连接在 P2.4~P2.7上。
当我们要检测键盘上那个按键被按下,我们通常采用如下方法:1•我们先拉低P2.02•依次检测 P2.4~P2.7,如果没有检测到任何低电平,说明没有按键被按下。
检测到有低电 平,比如P2.5为低电平,说明 P2.0和P2.5交叉的那个按键被按下了。
3•我们再拉低P2.14依次检测P2.4~P2.7o (同步骤2)5•我们再拉低P2.26依次检测P2.4~P2.7o (同步骤2)7•我们再拉低P2.38. 依次检测P2.4~P2.7o (同步骤2)9. 重复步骤1~8o 上述伪代码写成C51代码就应该是这个样子。
sbit Line_A=P2P; //将4X4键盘的4根行线连接在P2.0~P2.3 sbit Lin e_B=P2A 1;sbit Lin e_C=P2A2;sbit Lin e_D=P2A3;sbit Line_仁卩2人4; //将4X4键盘的4根列线连接在 P2.4~P2.7sbit Lin e_2=P2A5;sbit Lin e_3=P2A6;sbit Lin e_4=P2A7;Line_A=O; // 先拉低 P2.0if (Line 1==0)//检测每根列线是否被拉低。
如果没有检测到任何低电平,说明没有按键被按下-R BMMImg -nWH WU旳恤口FiWWi PS TiUJffEmwfl 野沁地 哙匹ii#?4A13'WH ; 悴昨■ ■Kl*f□&Wl^W.M±tfT常鲜■厂科SO皤 ti?r rj f.i^- .S3r£芒r£C6.5.2硬件电路的设计1. 打开Proteus,选择"File/NewDesign ”菜单选项,新建一个"设计项目” 。