第1章51单片机基础知识
51单片机基础知识
51单片机基础知识单片机作为一种嵌入式微控制器,具有广泛的应用领域和技术需求。
本文将介绍51单片机的基础知识,包括其概述、硬件结构、编程语言和开发环境等内容。
通过本文的学习,读者可以对51单片机有初步了解,并为之后的学习和应用打下基础。
一、概述51单片机,是指Intel公司开发的一种8位微处理器。
它以其简单、稳定和可靠的特点,成为嵌入式系统开发中最常用的单片机之一。
51单片机由存储器、中央处理器、输入输出端口、计时器/计数器和各种外围设备组成。
二、硬件结构51单片机的硬件结构主要包括中央处理器、存储器、输入输出端口和计时器/计数器。
1.中央处理器51单片机的中央处理器是一种基于哈佛架构的8位微处理器,具有高性能和低功耗的特点。
它可以执行指令、进行算术逻辑运算和控制外围设备的工作。
2.存储器51单片机的存储器包括程序存储器和数据存储器。
程序存储器用来存储运行的程序代码,而数据存储器用于存储程序需要的数据。
3.输入输出端口51单片机通过输入输出端口与外部设备进行通信。
输入端口用于接收外部信号,输出端口用于输出控制信号。
4.计时器/计数器51单片机内置了多个计时器/计数器,用于定时和计数应用。
它们可以实现精确的时间控制,并为系统提供准确的时间基准。
三、编程语言51单片机的常用编程语言有汇编语言和C语言。
汇编语言是51单片机最早的编程语言,它直接与硬件进行交互,执行效率高。
而C语言是一种高级编程语言,具有结构化、可移植等特点,编写的程序更加易读易维护。
1.汇编语言汇编语言是一种低级别的编程语言,需要程序员直接处理寄存器和内存地址。
它的语法相对复杂,但可以更直接地控制硬件资源,实现更高效的程序执行。
2.C语言C语言是一种结构化的高级编程语言,具有简洁、易读和可移植等特点。
C语言程序需要通过编译器将源代码转化为机器指令,然后才能在51单片机上运行。
四、开发环境51单片机的开发环境包括硬件开发工具和软件开发工具。
51单片机基础入门
单片机基础一、 单片机基础知识1.1 51系列单片机简介:51系列单片机是单片机领域中的一类,也是影响最为深远,使用最为广泛的单片机系列。
51单片机是指Intel的MCS‐51系列及和其具有兼容内核的单片机。
51系列单片机最早由Intel公司发展起来,随后将51内核授权给其他各个厂商。
因此,现在MCS‐51兼容的单片机种类繁多,如:Atmel公司的AT889C系列、AT89S系列、Silicon Laboratories的C8051F 系列以及STC的单片机等。
这些系列的单片机都有着十分接近的指令系统和硬件结构,在开发起来很方便移植。
1.2 STC系列单片机:STC89C51RC系列单片机是STC推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择,HD版本和90C版本内部集成MAX810专用复位电路。
特征:1) 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可任意选择,指令代码完全兼容传统80512)工作电压:5.5V ‐ 3.3V (5V单片机) / 3.8V ‐ 2.0V (3V单片机)3) 工作频率范围:0~40MHz,相当于普通8051的 0~80MHz,实际工作频率可达48MHz.4)用户应用程序空间:4K / 8K / 13K / 16K / 32K / 64K字节5)片上集成1280字节或512字节RAM6)通用I/O口(35/39个),复位后为:P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O 口);P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7)ISP(在系统可编程)/ IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(RxD/P3.0, TxD/P3.1)直接下载用户程序,数秒即可完成一片8)有EEPROM功能9)看门狗10)内部集成MAX810专用复位电路(HD版本和90C版本才有),外部晶体20M以下时,可省外部复位电路。
单片机(51)入门-基础介绍
3.原有电气设备比较,市场宽阔: 以前没有单片机时,这些东西也能做,但是只能使用简单的模拟电路,然而这样做出来的产品不仅体积大,而且本钱高,并且由于长期使用,元器件不断老化,掌握的精度自然也会达不到标准。在单片机产生后,我们就将掌握这些东西变为智能化了,我们只需要在单片机外围接一点简洁的接口电路,核心局部只是由人为的写入程序来完成。这样产品的体积变小了,本钱也降低了,长期使用也不会担忧精度达不到了。所以,它的魔力不仅是在现在,在将来将会有更多的人来承受它、使用它。 据统计,我国的单片机年容量已达1—3 亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。特殊是沿海地区的电气设备厂等生产产品多数用到单片机,并不断地辐射向内地。所以,学习单片机在我国是有着宽阔前景的。
*
1975年4月,MITS公布第一个通用型Altair 8800,售价375美元,带有1KB存储器。这是世界上第一台微型计算机。
1976年intel公司研制出MCS-48系列8位的单片机,这也是单片机的问世。 Zilog公司于1976年开发的Z80微处理器,广泛用于微型计算机和工业自动掌握设备。当时,Zilog、Motorola和Intel在微处理器领域三足鼎立。
1946年2月15日,第一台电子数字计算机ENIAC问世,这标志着计算机时代的到来。 〔CALCULATOR〕
*
ENIAC是电子管计算机,时钟频率仅有100 KHz,但能在1秒钟的时间内完成5000次加法运算。 与现代的计算机相比,有很多缺乏,但它的问世开创了计算机科学技术的新纪元,对人类的生产和生活方式产生了巨大的影响 。(光源)
*
我们首先从它的构成说起:单片机,亦称单片微电脑或单片微型计算机。它是把中心处理器〔CPU〕、随机存取存储器〔RAM〕、只读存储器〔ROM〕、输入/输出端口〔I/0〕等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。计算机的产生加快了人类改造世界的步伐,但是它究竟体积大。微计算机〔单片机〕在这种状况下诞生了,它为我们转变了什么?纵观我们现在生活的各个领域,从的导航装置,到飞机上各种仪表的掌握,从计算机的网络通讯与数据传输,到工业自动化过程的实时掌握和数据处理,以及我们生活中广泛使用的各种智能IC 卡、电子宠物等,这些都离不开单片机。
第1章 MCS-51单片机结构
一个8位的CPU。 程序存储器:4KBROM。
128字节RAM。
两个16位可编程定时器/计数器。 可寻址64KB外部数据存储器和64KB外部程序存储器的控制电路。
32条可编程的I/O线(四个8位并行I/O端口)。
一个可编程全双工串行口。 具有两个优先级嵌套的中断结构。
★ 掌握51系列单片机各存储空间的地址分配、使用特点。
位名称
1.3 特殊功能寄存器
CY:进/借位标志,反映最高位的进位借位情况,加法为进位、 减法为借位。CY=1,有进/借位 ; CY=0,无进/借位。 AC:辅助进/借位标志,反映高半字节与低半字节之间的进/借 位,AC=1有进/借位; AC=0无进/借位 。 FO:用户标志位,可由用户设定其含义。 RS1,RS0:工作寄存器组选择位。 OV:溢出标志,反映补码运算的运算结果有无溢出 有溢出 OV=1,无溢出OV=0。 -:无效位。 P:奇偶标志,运算结果有奇个“1”,P=1;运算结果有偶个“1”, P=0。
1.5 引脚功能
8XX51单片机有44引脚的方形 封装和40个引脚的双列直插式封 装形式,最常用的40个引脚DIP 封装。
各个引脚的功能如下: Vss:接地端。 Vcc:电源端,接+5V。 XTAL1,XTAL2: 接外部晶体或外部时 钟。 RST/VPD:①复位信号输入。 ②接备用电源,当VCC掉电
在中断入口地址中通常用一条无条件转移指令,转到 中断处理子程序。
1.2.2 外部数据储存器
用于存放随机读写的数据;
外部数据存储器和外部I/O口统一编址。 控制信号相同,使用相同的MOVX指令访问。 最多可扩展64KB外部数据存储器
1.2.3 内部数据储存器
第1章 51单片机的基础知识
第1章 51单片机的基础知识51单片机是一种广泛应用的嵌入式微控制器,具有强大的功能和灵活性。
在学习和使用51单片机之前,了解其基础知识是至关重要的。
本章将介绍51单片机的基础知识,包括硬件结构、寄存器、指令集和编程语言。
1.1 51单片机的硬件结构51单片机的硬件结构是指其内部的组成部分和外部连接。
51单片机包含中央处理器(CPU)、存储器、输入/输出(I/O)口、定时器/计数器、串行通信口等功能模块。
这些功能模块共同协作,完成各种任务。
1.1.1 中央处理器(CPU)51单片机的中央处理器是核心部件,负责执行指令、控制程序运行和处理数据。
51单片机采用哈佛结构,将程序存储器和数据存储器分开。
它包含一个8位的累加器(A)和一个指令寄存器(IR),用于指令的执行。
1.1.2 存储器51单片机的存储器包括程序存储器和数据存储器。
程序存储器用于存储程序指令,可以是内部存储器或外部存储器。
数据存储器用于存储程序运行中产生的数据,包括RAM和ROM。
1.1.3 输入/输出(I/O)口51单片机具有一定数量的I/O口,用于与外部设备进行数据交互。
输入口用于接收外部信号,输出口用于发送数据或控制外部设备。
它们可以是并行口或串行口,根据需要进行配置。
1.1.4 定时器/计数器定时器/计数器是51单片机的重要组成部分,用于产生定时延迟和计数脉冲。
定时器可以设置为定时模式或计数模式,定时器中断可用于实现时间控制和精确计时。
1.1.5 串行通信口串行通信口是51单片机与外部设备进行串行通信的接口,常用的有UART和SPI。
它们通过串行传输数据,实现与外部设备的数据交换和通信。
1.2 51单片机的寄存器51单片机具有一组特殊功能寄存器,用于配置和控制其各项功能。
这些寄存器负责存储和传输数据,执行各种功能操作。
常见的寄存器包括通用寄存器、状态寄存器、特殊功能寄存器等。
1.2.1 通用寄存器通用寄存器是用于存储临时数据的寄存器,包括8个存储器编号,分别为R0 - R7。
第一章MCS-51系列单片机知识
单片机电子产品设计
主讲人:胡克满 2013年3月 E_mail:hukeman@ 办公室:3114(东校区) 电话:668181
第一章 MCS-51单片机基本知识
本章主要内容: 1.1 什么是单片机 1.2 单片微型计算机及单片微型计算机系统 1.3 MCS-51系列单片机分类 1.4 MCS-51系列单片机的内部结构及引脚 1.5 MCS-51系列单片机的内部数据存储器 本章重点: MCS-51系列单片机选型
单片机电子产品设计
1.5 MCS-51单片机内部数据存储器
MCS-51单片机的芯片内部有RAM和ROM两类存储器,
即所谓的内部RAM和内部ROM。
单片机电子产品设计
1.5.1内部数据存储器低128单元
30H ~7FH
20H ~2FH 18H ~1FH 10H ~17H 08H ~0FH 00H ~07H
单片机电子产品设计
微型计算机系统组成示意图如图所示。
微型计算机系统
输 入 设 备
输 入 接 口 电 路
CPU
运算器 控制器
输 出 接 口 电 路
输 出 设 备
+
存储器
软 件 系 统
硬件系统
单片机电子产品设计
(1)运算器 运算器是计算机的运算部件用于实现算术和逻辑运算。计算机的 数据运算和处理都在这里进行。 (2)控制器 控制器是计算机的指挥控制部件,使计算机各部分能自动协调地 工作。运算器和控制器是计算机的核心部分,常把它们合在一起称之 为中央处理器,简称CPU。 (3)存储器 存储器是计算机的记忆部件,用于存放程序和数据。存储器又分 为内存储器和外存储器。例如实训中使用的EPROM2764。 (4)输入设备 输入设备用于将程序和数据输入到计算机中,如键盘。 (5)输出设备 输出设备用于把计算机数据计算或加工的结果,以用户需要的形 式显示或保存,如显示器、打印机。
第一章_4_STC51系列单片机简介
•ISP/IAP在系统可编程和在应用编程
STC51单片机
1.1.2 典型代表型号性能简介 •STC12C2052AD
STC51单片机
1.1.3 STC51单片机的编程
STC51单片机
1.1.3 STC51单片机的编程 ISP程序
51单片机工程应用实例
第一章 STC51单片机简介
STC51单片机
1.1.1 STC51单片机的特点 •速度快:一个机器周期主要一个时钟,工作频率
达35MHZ
•可在线编程和在系统编程,无需专用编程器和仿真器 •加密性强 •抗干扰能力强 •宽电压工作范围,低功耗 •增加硬件看门狗、高速SPI通信端口、PWM、A/D等 •较高性价比
STC51单片机
1.1.1 STC51单片机的特点 STC12C5410AD •4KB片内Flash程序存储器,1KB EEPROM
•512字节片内RAM
•8通道10位ADC;4通道捕获、比较单元
•2个16位定时计数器、1个全双工串口
•硬件看门狗 •高速SPI •ISP/IAP在系统可编程和在应用编程
STC51单片机
1.1.2 典型代表型号性能简介 •STC12C5410AD
STC51单片机
1.1.2 典型代表型号性能简介 •STC12C5410AD内部结构
STC51单片机
1.1.2 典型代表型号性能简介 STC12C2052AD •8通道狗(WDT)
51单片机课件第一章
1.2.2单片机的发展趋势
(1)CPU功能增强
(2)内部资源增多 (3)引脚多功能化 (4)寻址范围增加 (5)超微型化
(6)低电压和低功耗
1.3 单片机应用
电讯方面
工业方面
汽车方面
民用方面 数据处理方面
仪表方面
1.4 MCS-51单片机
1.4.1 MCS-51系列单片机
MCS51是指由美国INTEL公司生产的一系列单片 机的总称,这一系列单片机包括了好些品种,如 8031,8051,8751,8032,8052,89C51等,其中 8051是最早最典型的产品,该系列其它单片机都是 在8051的基础上进行功能的增、减、改变而来的, 所以人们习惯于用8051来称呼MCS51系列单片机, 而8031是前些年在我国最流行的单片机,所以很多 场合会看到8031的名称。
1.2 单片机的发展历史及发展趋势 1.2.1 单片机的发展历史 单片机的发展经历了由4位机到8位机,再到16位 机的发展过程,目前8位单片机仍在广泛使用。 第一代:1974~76,起步阶段 特点:制造工艺落后,集成度低,采用双片形式 典型代表:美国仙童(Fairchild)公司F8系列 第二代:1976~78,低性能单片机阶段 特点:性能低,品种少,应用范围不广(比较简单 场合) 典型代表:Intel公司的MCS-48型,8位单片机 采用8位CPU、2个 I/O口、8位定时器/计数器、简单 中断,寻址小于4K,且无串行口。
单片机系统
CPU
输 入 设 备
输 入 接 口 设 备
运算器 控制器
存储器 硬件系统
输 出 接 口 设 备
输 出 设 备
软
+
件 系
统
单片机内部结构示意图
第1章 MCS-51单片机结构
第1章 MCS-51单片机结构
1.2.2
外部数据存储器
用于存放随机读写的数据。 外部I/O口地址影像区。 MCS-51单片机的外部数据存储器和外部I/O口实行统一编址 , 并使用相同的RD WR作选通控制信号,均使用 MOVX 指令访 问。 MCS-51 单片机最多可扩展64KB外部数据存储器
1.2.3 内部数据储存器
MCS-51仅能实现两个8位二进 制数的算术逻辑运算!
第1章 MCS-51单片机结构
2. 控制器
(1)组成: 定时与控制部件,复位电路,程序计数器 (PC),指令寄存器、指令译码器,数据指针 (DPTR),堆栈指针(SP)等 (2)作用:产生计算机所需的时序,控制程序自动执行。
外RAM, EPROM, 外I/O CPU
第1章 MCS-51单片机结构
程序存储器中的几个特殊地址的使用:
地址
0000H 0003H 000BH 0013H 001BH 0023H
用途
复位操作后的程序入口 外部中断0服务程序入口 定时器0中断服务程序入口 外部中断1服务程序入口 定时器1中断服务程序入口 串行口中断服务程序入口
串行口中断入口 T1中断入口 T0中断入口 中断入口 INT1
在8051/8751/89C51 片内,分别内置最低地 址空间的4KB ROM/EPROM程序储存器(内部程序储 存器),而在8031片内,则无内部程序储存器, 必须外部扩展EPROM。MCS-51单片机中64KB内、外 程序储存器的地址是统一编排的。
第1章 MCS-51单片机结构
8031单片机无内部程序存储器,地址从0000H~ EA 应始终接地, FFFFH都是外部程序存储空间。 对于内部有ROM的单片机(51、52系列) , EA 引脚接高电平,使程序从内部ROM开始执行。当PC 值超出内部ROM的容量时,会自动转向外部程序存 储器空间。外部程序存储器地址空间为1000H~ FFFFH。 访问程序存储器使用MOVC指令。 单片机执行程序时由PC 指示地址, 复位时PC内 容为0000H, 由此, 程序必须从0号单元开始存放.
MCS-51单片机(完整版)
智能仪表
单机应用 机电一体化产品
智能接口
单片机应用
智能民用产品 功能集散系统
多机应用 并行多控制系统
局部网络系统 是指在一个应用系统中,使用多个单片机。
2 单片机芯片的硬件结构
2.1 MCS-51单片机的逻辑结构及信号引脚
2.1.1 MCS-51单片机基本结构框图
输入输出接口 (I/O)
控制与运算单元 (CPU)
1.2 单片机的发展 1.2.1 单片机的发展概述
1946 第一台计算机诞生 1971 第一个微处理器诞生 1976 MCS-48(8位) 1980 MCS-51(8位) 1983 MCS-96(16位) 80年代末 Motorola 680X
Zilog Z-8
Rockwell 650X•••
当前: (1) MCS-51、MCS-96系列发 展(2。) PIC (Microchip公司) (3) ARM (4) 凌阳单片机 (5) AVR
1.3.1 单片机的特点
长寿命 体积小 低电压与低功耗
低噪声与高可靠性技术
总而言之,单片机具有集成度高、功能强、体 积小、功耗低、使用方便、价格低廉等优点。
第一章 单片机概述
1.1 单片机的概念
1.2 单片机的发展
1.3 单片机的应用
1.3.1 单片机的特点 1.3.2 单片机的应用领域
是指在一个应用系统中,只用一个单片机。 测控系统
外接晶体引线端
2.1.3 MCS-51的信号引脚 1. 信号引脚介绍 2. 信号引脚的第二功能
• P3口线的第二功能
口线
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7
第二功能 RXD TXD INT0 INT1 T0 T1 WR RD
51单片机基础知识
一、单片机基础知识1.1介绍:单片机,简称MCU.内部集成了CPU,RAM,ROM,定时器,终端系统,通讯接口等一系列电脑的常用硬件功能1.1.1点亮一个LED:安装好stc-isp与Keil5C51,配置USB驱动;建立一个新工程,选择AT89C52型号添加新文件选择C语言(通常情况下)通过调节P20的电压实现点亮/熄灭写好程序勾选创建HEX文件,再次编译;配置芯片型号(带RC选RC)与串口点击打开程序文件打开HEX文件下载到单片机;查找时重启单片机电源;成功点亮1.1.2LED闪烁:可从此处进行延时函数复制(系统频率一般默认为12Hz)#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay500ms() //@12.000MHz{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);}void main(){while(1){P2 = 0xFE;//1111 1110 There is a pressure drop across the diode Delay500ms();P2 = 0xFF;//1111 1111 There isn't a pressure drop across the diode Delay500ms();}}使用此函数进行LED闪烁;1.1.3LED流水灯:通过控制P2管脚的十六进制数值改变对应LED灯的压降,实现亮/灭;P2实际上为8位一体的导线;P2_X则可以操作单独的LED控件#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay1ms(unsigned int xms) //@12.000MHz{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){while(1){P2=0xFE;//1111 1110 D1Delay1ms(500);P2=0xFD;//1111 1101 D2Delay1ms(500);P2=0xFB;//1111 1011 D3Delay1ms(500);P2=0xF7;//1111 0111 D4Delay1ms(500);P2=0xEF;//1110 1111 D5Delay1ms(500);P2=0xDF;//1101 1111 D6Delay1ms(500);P2=0xBF;//1011 1111 D7Delay1ms(500);P2=0x7F;//0111 1111 D8Delay1ms(500);}}1.2独立按键控制LED亮灭:通过查询原理图发现,K1独立按键对应P3_1;#include<REGX52.H>//The Definitionvoid main(){while(1){if(P3_1){//UPP2_0=1;//D1 Dark}else{//DOWNP2_0=0;//D1 Light}}}1.2.1独立按键控制LED状态:按键抖动:对于机械开关,当机械触点断开,闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会立刻断开,开关闭合/断开时往往伴随着波动#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){while(1){if(!P3_1){//DOWNDelay(20);while(!P3_1);Delay(20);P2_0=~P2_0;}}}消除误差1.2.2独立按键控制LED显示二进制unsigned char 用来表示一个寄存器#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_() void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){unsigned char LEDNumber = 0;while(1){if(!P3_1){//DOWNDelay(20);while(!P3_1);Delay(20);LEDNumber++;P2=~LEDNumber;}}}对P2进行取反操作则为计算二进制数值1.2.3独立按键控制LED移位:#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_() void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){unsigned char LEDNumber=0;P2=~0x01;//Rename the character while(1){if(!P3_0){//K2 DOWN Moving RightDelay(20);while(!P3_0);Delay(20);LEDNumber++;if(LEDNumber>=8){LEDNumber=0;}P2=~(0x01<<LEDNumber);}if(!P3_1){//K1 DOWN Moving LeftDelay(20);while(!P3_1);Delay(20);if(!LEDNumber){LEDNumber=7;}else{LEDNumber--;}P2=~(0x01<<LEDNumber);}}}包括左移(K1)和右移(K2);if语句中为消除误差+移动计算;通过改变P2总导线压降,来控制对应LED灯的亮灭首先对P2进行初始化0000 0001 D1亮0x01<<00000 0010 D2 亮0x00<<1....1000 0000 D8亮0x00<<81.3静态数码管显示:确定静态数码管显示时,先根据所选型号与待输出数据确定位选(3.8引脚的高低电平)与段码(剩下引脚的高低电平)通过此两排端口进行控制,下方端口由P0控制通过138译码器实现仅一位LED为1的操作(其余为0),通过观察真值表确定端口: 三端口为P2引脚.C B A Y0 0 0 70 0 1 60 1 0 50 1 1 41 0 0 31 0 1 21 1 0 11 1 1 0DIR控制数据传输方向DIR通过J24控制电平高低.当DIR接高电平时,从左向右传输数据#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}unsigned char NixieTabel[]={0x3F,0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07};void Nixie(unsigned char Location, Number){ switch(Location){case8:{P2_4=0;P2_3=0;P2_2=0;break;}case7:{P2_4=0;P2_3=0;P2_2=1;break;}case6:{P2_4=0;P2_3=1;P2_2=0;break;}case5:{P2_4=0;P2_3=1;P2_2=1;break;}case4:{P2_4=1;P2_3=0;P2_2=0;break;}case3:{P2_4=1;P2_3=0;P2_2=1;break;}case2:{P2_4=1;P2_3=1;P2_2=0;break;}case1:{P2_4=1;P2_3=1;P2_2=1;break;}}P0=NixieTabel[Number];}void main(){unsigned int location = 1, number = 0;while(1){if(location > 8){location = 1;number = 0;}Delay(1000);Nixie(location,number);location++;number++;}}1.3.1动态数码管显示在实现显示多个数据时,清零上一个数据,实现消影#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}unsigned char NixieTabel[]={0x3F,0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07};void Nixie(unsigned char Location, Number){switch(Location){case8:{P2_4=0;P2_3=0;P2_2=0;break;}case7:{P2_4=0;P2_3=0;P2_2=1;break;}case6:{P2_4=0;P2_3=1;P2_2=0;break;}case5:{P2_4=0;P2_3=1;P2_2=1;break;}case4:{P2_4=1;P2_3=0;P2_2=0;break;}case3:{P2_4=1;P2_3=0;P2_2=1;break;}case2:{P2_4=1;P2_3=1;P2_2=0;break;}case1:{P2_4=1;P2_3=1;P2_2=1;break;}}P0=NixieTabel[Number];Delay(1);P0=0x00;//Creat Last digit.}void main(){while(1){Nixie(1,5);Nixie(2,2);Nixie(3,0);}}1.3.2LCD1602调试工具LCD_Init();//初始化LCD_ShowChar(1,1,'A');//显示一个字符LCD_ShowString(1,3,"Hello");//显示字符串LCD_ShowNum(1,9,123,3);//显示十进制数字LCD_ShowSignedNum(1,13,-66,2);//显示有符号十进制数字LCD_ShowHexNum(2,1,0xA8,2);//显示十六进制数字LCD_ShowBinNum(2,4,0xAA,8);//显示二进制数字1.4矩阵键盘:矩阵按键按列扫描P引脚均为弱上拉,即同时输入1&&0,输出0添加如下文件:#include <REGX52.H>#include "Delay.h"unsigned char MatrixKey(){unsigned char KeyNumber=0;//先判断列数,再判断行数,避免电平错位P1=0xFF;//全部置为高电平P1_3=0;//仅启动P1_3--即第一列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=1;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=5;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=9;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=13;}P1=0xFF;//全部置为高电平P1_2=0;//仅启动P1_2--即第二列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=2;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=6;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=10;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=14;}P1=0xFF;//全部置为高电平P1_1=0;//仅启动P1_1--即第三列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=3;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=7;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=11;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=15;}P1=0xFF;//全部置为高电平P1_0=0;//仅启动P1_0--即第四列if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=4;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=8;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=12;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=16;}return KeyNumber;}1.4.1矩阵键盘密码锁main函数:#include <REGX52.H>#include "Delay.h"#include "LCD1602.h"#include "MatrixKey.h"unsigned int KeyNumber;unsigned int PassWord,Count;//密码,位数void main(){LCD_Init();LCD_ShowString(1,1,"PassWord:");while(1){KeyNumber=MatrixKey();if(KeyNumber){if(KeyNumber<=10){//将10变成0,仅考虑0~9范围内if(Count<4){PassWord*=10;//每输入一位密码,当前密码左移一位 PassWord+=KeyNumber%10;//获取一位密码Count++;//计次}LCD_ShowNum(2,1,PassWord,4);//输出密码}if(KeyNumber==11){//清零Count=0;//清零次数PassWord=0;//清零密码LCD_ShowNum(2,1,PassWord,4);//更新显示}if(KeyNumber==12){//确认LCD_ShowString(1,12," ");if(PassWord==1976){LCD_ShowString(1,12,"OK");}else{LCD_ShowString(1,12,"ERROR");}//清零Count=0;PassWord=0;LCD_ShowNum(2,1,PassWord,4);//更新显示}}}}1.5定时器1.5.1按键控制LED流水灯模式TMOD:定时器寄存器:配置M1,M2为1 0-更改为16定时器模式0~65535:溢出时才进行中断判断每隔1us计数加一,总共定时时间65535us;赋初值64535-1000us(1ms)后计数器溢出,进行中断操作快捷生成定时器模块该函数未配置中断与中断优先级,且定时器时钟模式不需要定义定时器函数://1ms定时器void Timer0_Init(){//模式寄存器,高四位为计时器1,低四位为计时器2//高四位不变,低四位清零:10101100&11110000=10100000TMOD&=0xF0;//高四位不变,低四位赋1:10101100|00000001=10100001TMOD|=0x01;//控制寄存器;能单独对部分赋值TF0=0;//中断标志TR0=1;//运行控制位;1时运行T0进行计数//给定时器赋初值TH0=0xFC;//64535高八位TL0=0x18;//64535低八位//配置中断ET0=1;EA=1;//优先级选取PT0=0;}中断函数://定时器中断函数void Timer0_Rountine() interrupt 1{static unsigned int T0Count;//计数//复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=1000){//1ms中断一次,中断1000次则为1s //具体操作T0Count=0;P2_0=~P2_0;//闪烁}}主函数:#include <REGX52.H>#include <INTRINS.H>#include "Timer0.h"#include "Key.h"unsigned char KeyNumber,LEDMode;void main(){P2=0xFE;//点亮D1,给予循环移位初值Timer0_Init();//启用定时器while(1){KeyNumber=Key();if(KeyNumber){//按下独立按键if(KeyNumber==1){//S1为模式改变按键LEDMode++;if(LEDMode>=2){//仅有0|1两种模式LEDMode=0;}}}}}//中断操作void Timer0_Rountine() interrupt 1{ static unsigned int T0Count;//计数//给定时器赋初值复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=500){//0.5s操作一次T0Count=0;if(LEDMode){//模式1P2=_cror_(P2,1);//右移一位}else{//模式0P2=_crol_(P2,1);//左移一位}}}1.5.2定时器时钟:#include <REGX52.H>#include <INTRINS.H>#include "Timer0.h"#include "LCD1602.h"unsigned char Second,Minute,Hour;void main(){LCD_Init();//显示屏初始化LCD_ShowString(1,1,"Clock:");Timer0_Init();//启用定时器while(1){LCD_ShowNum(2,1,Hour,2);LCD_ShowString(2,3,":");LCD_ShowNum(2,4,Minute,2);LCD_ShowString(2,6,":");LCD_ShowNum(2,7,Second,2);}}//中断操作void Timer0_Rountine() interrupt 1{static unsigned int T0Count;//计数//给定时器赋初值复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=1000){//0.5s操作一次T0Count=0;Second++;if(Second==60){Minute++;Second=0;if(Minute==60){Hour++;Minute=0;if(Hour==25){Hour=Minute=Second=0;}}}}}1.6串口:1.6.1串口通信:配置波特率:1.6.2交互数据传输:#include <REGX52.H>//串口函数******************void UART_Init(){//配置串行控制寄存器,调整工作模式1SCON=0x50;//允许双向传输,REN置为1,配置使能//配置波特率选择位--需要配置定时器PCON|=0x80;//最高位置1,波特率加倍//定时器模式寄存器式//使用双八位模式(复位与计数分开)提高精度//清除定时器1模式位TMOD&=0x0F;//设定定时器1为八位自动重装方式TMOD|=0x20;//256溢出一次TL1=0xF4;//设定定时器初值TH1=0xF4;//设定定时器重装值ET1=0;//禁止定时器1中断TR1=1;//启动定时器1//使能中断EA=1;ES=1;}//发送函数void UART_SendByte(unsigned char Byte){SBUF=Byte;//发送数据到SBUF缓存器中即可进行传输//检测是否完成while(!TI);TI=0;}#ifndef __UART_H__#define __UART_H__/*串口函数输入:void输出:void功能:实现串口使用的初始化*/void UART_Init();/*串口发送函数输入:void输出:void功能:通过串口发送数据至接收端*/void UART_SendByte(unsigned char Byte);#endifmain:#include <REGX52.H>#include "Delay.h"#include "UART.h"void main(){UART_Init();while(1){}}//使能中断函数;发送/接收中断函数void UART_Routine() interrupt 4{if(RI==1){//限制仅为接收中断才进行后续操作P2=~SBUF;//外部设备传输数据存放在SBUF缓存器内 UART_SendByte(SBUF);//输出传入数据RI=0;}}1.7LED点阵屏:通过74HC595三个引脚控制八个LED 显示(新版板子是没有该八位LED 的)通过控制75HC595进行数据传输: #include <REGX52.H>//重新进行声明sbit RCK = P 3^5; //RCLKsbit SCK = P 3^6; //SRCLKsbit SER = P 3^4;//移位寄存器输入数据void _74HC595_WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){//从高位开始缓存数据SER=Byte&(0x80>>i);//非零置一0x80--10000000SCK=1;//赋予高电平进行移位SCK=0;//复位}RCK=1;//传输数据RCK=0;//复位}void main(){//初始化SCK=0;RCK=0;_74HC595_WriteByte(0xF0);while(1){}}1.7.1LED点阵屏显示动画:使用该软件进行数据读取MatrixLED_ShowColumn.c:#include <REGX52.H>#include "Delay.h"#include "MatrixLED_ShowColumn.h"//移位寄存器输入数据,控制段选void _74HC595_WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){//从高位开始缓存数据SER=Byte&(0x80>>i);//非零置一0x80--10000000SCK=1;//赋予高电平进行移位SCK=0;//复位}RCK=1;//传输数据RCK=0;//复位}//LED点阵屏void MatrixLED_ShowColumn(unsigned char Column,unsigned char Data){ _74HC595_WriteByte(Data);//段选MATRIX_LED_PORT=~(0x80>>Column);//位选0时出现压降,导通Delay(1);MATRIX_LED_PORT=0xFF;//位清零}//初始化void MatrixLED_Init(){SCK=0;RCK=0;}MatrixLED_ShowColumn.h:#ifndef _MATRIXLED_H__#define _MATRIXLED_H__//重新进行声明sbit RCK= P3^5;//RCLKsbit SCK= P3^6;//SRCLKsbit SER= P3^4;#define MATRIX_LED_PORT P0/*移位寄存器函数输入:Byte-点阵屏行数据输出:void功能:通过输入数据对LED点阵屏行(即位选)进行调整范围:0~7*/void _74HC595_WriteByte(unsigned char Byte);/*LED点阵屏函数输入:Column-位选 Data-段选输出:void功能:通过输入位选与段选实现LED点阵屏的动画演示*/void MatrixLED_ShowColumn(unsigned char Column,unsigned char Data);/*LED点阵屏初始化函数输入:void输出:void功能:对LED相关参数进行初始化*/void MatrixLED_Init();#endifmain.c:#include <REGX52.H>#include "Delay.h"#include "MatrixLED_ShowColumn.h"unsigned char code Animation[]={//存放在flash内存中,避免占用RAM内存0x00,0x40,0x20,0x1F,0x20,0x40,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,0x40,0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x76,0x91,0x89,0x6E,0x00,0x00,0x00,0x00,0x7F,0x88,0x88,0x70,0x00,0x00,};void main(){//只要是局部变量的定义都要放在所在函数体内的第一行unsigned char j,Offset,Count;MatrixLED_Init();while(1){for(j=0;j<8;j++){MatrixLED_ShowColumn(j,Animation[j+Offset]);}Count++;if(Count>10){//扫描十遍偏移一次Count=0;Offset+=8;Delay(200);if(Offset>32){//防止溢出Offset=0;}}}}1.8DS1032定时时钟:从上到下依次存储不同的时间左边两列为其地址命令字第六位:1-RAM;0-CK,对时钟进行操作(有横线代表低电平有效)仅改变前七位,最后一位恒为1前一个字节是命令字,后一个是数据重新定义该三个端口1.8.1DS1302固定时钟主函数:#include <REGX52.H>#include "Delay.h"#include "DS1302.h"#include "LCD1602.h"void main(){LCD_Init();DS1302_Init();LCD_ShowString(1,1," - - ");LCD_ShowString(2,1," : : ");DS1302_SetTime();//设置时间//DS1302芯片内部自动会进行时间进位,不需要手动设置,只需要输入初始时间即可while(1){DS1302_ReadTime();//读入时间LCD_ShowNum(1,1,DS1302_Time[0],2);LCD_ShowNum(1,4,DS1302_Time[1],2);LCD_ShowNum(1,7,DS1302_Time[2],2);LCD_ShowNum(2,1,DS1302_Time[3],2);LCD_ShowNum(2,4,DS1302_Time[4],2);LCD_ShowNum(2,7,DS1302_Time[5],2);}}DS1302.c:#include <REGX52.H>#include "Delay.h"//重新定义端口名称,便于模块化集成sbit DS1302_SCLK=P3^6;sbit DS1302_IO=P3^4;sbit DS1302_CE=P3^5;#define DS1302_SECOND 0x80#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84#define DS1302_DATE 0x86#define DS1302_MONTH 0x88#define DS1302_DAY 0x8A#define DS1302_YEAR 0x8C#define DS1302_WP 0x8E//Year,Month,Day,Hour,Minute,Second,Weekdayunsigned char DS1302_Time[]={22,5,22,21,19,55,7};//DS1302初始化,将使能端置0,SCLK置0void DS1302_Init(void){DS1302_CE=0;DS1302_SCLK=0;}//写入操作void DS1302_WriteByte(unsigned char Command, unsigned char Data){ //写入预操作//Command的第零位赋予IO口,第零位是标志位,判断读/写//Command与Data都是通过上升沿进行判断,因此总共有16个脉冲unsigned char i;DS1302_CE=1;//进行Command判断for(i=0;i<8;i++){DS1302_IO=Command&(0x01<<i);//进行电平变化,产生上升沿与下降沿DS1302_SCLK=1;Delay(1);//一般需要增加延时,具体参考芯片手册DS1302_SCLK=0;}//进行数据写入for(i=0;i<8;i++){DS1302_IO=Data&(0x01<<i);DS1302_SCLK=1;Delay(1);DS1302_SCLK=0;}//写入末操作DS1302_CE=0;}unsigned char DS1302_ReadByte(unsigned char Command){//读入预操作unsigned char i;unsigned char Data=0x00;Command|=0x01;//此处将最低位,置成1,使输入的写Command变成读Command DS1302_CE=1;//读入的Command是上升沿,而Data是下降沿,因此总共有15个脉冲for(i=0;i<8;i++){DS1302_IO=Command&(0x01<<i);//调整位置确保脉冲与Data一致DS1302_SCLK=0;DS1302_SCLK=1;}//读入数据//IO口默认为0,因此输入的数据为1时,for(i=0;i<8;i++){DS1302_SCLK=1;DS1302_SCLK=0;if(DS1302_IO){Data|=(0x01<<i);}}//读入末操作DS1302_CE=0;DS1302_IO=0;return Data;}unsigned char ChangeToDec(unsigned char Number){return (Number/16*10+Number%16);}。
51单片机自学笔记(基础部分)
一、51单片机的硬件结构1. 硬件结构框图说明:○1微处理器(CPU):51单片机含一个8位CPU,与通用的CPU功能基本相同,含运算器和控制器,不仅可以字节处理,还可以位处理。
例如:未处理、查表、状态检测、中断处理等。
○2数据存储器(RAM):51为128B,52为256B;片外最大可扩展到64K。
○3程序存储器(ROM/EPROM):8031没有,8051有4K的ROM,8751有4K的EPROM;片外可扩展至64K。
○4中断系统:5个中断源,2级优先权。
○5定时器/计数器:2个16位定时/计数器,四种工作方式。
○6串行口:1个全双工串行口,四种工作方式。
可进行串口通信,扩展并行I/O口,多机通信等。
○7P1、P2、P3、P0口:四个8位并行I/O口。
○8特殊功能寄存器(SFR):共21个,对片内部件进行管理、控制、监视;实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。
2. 引脚排列(1)电源及时钟引脚○1电源引脚:Vcc(40脚)解5V电源、Vss(20脚)接地。
○2时钟引脚:两个始终引脚XTAL1、XTAL2外接晶振,或接晶体与片内反相放大器构成振荡器。
XTAL1(19脚):内部反相放大器的输入端。
若接晶振则应接地;XTAL2(18脚):内部反相放大器的输出端。
若采用外部时钟振荡器,该引脚接收时钟振荡信号。
(2)控制引脚○1RST/Vpd(9脚):复位信号输入,高电平有效。
单片机运行时,此脚持续2个机器周期(24个时钟振荡周期)的高电平,就可复位。
平时应为0.5V低电平;Vpd为第二功能,备用电源输入端。
○2:ALE为地址锁存允许,正常工作时,ALE不断输出正脉冲信号。
当访问外部存储器时,ALE输出信号的负跳变沿用作低8位地址的锁存信号;PROG’为编程脉冲输入端。
○3PSEN’(Program Strobe Enable,29脚):程序存储器允许输出控制端。
低电平是外部程序存储器选通。
51单片机知识基础
51单片机知识基础51单片机是一种非常常见的嵌入式系统开发平台,广泛应用于各个领域,如工业控制、智能家居、物联网等。
要想在嵌入式系统开发中熟练运用51单片机,我们首先需要了解它的基础知识。
本文将从51单片机的概念、特点、原理、编程语言等方面展开论述,以帮助读者全面掌握51单片机的基础知识。
第一部分:51单片机概述51单片机是指Intel公司研发的一种8位单片微控制器,意为“Intel 80系列单片机”。
它由CPU、内存、输入输出端口、定时器、串口等组成,具有较强的数据处理和控制能力。
作为一种非常成熟的单片机,51单片机以其稳定性、成本低、易于使用等特点,受到了广大嵌入式系统开发者的青睐。
第二部分:51单片机特点1. 8位架构:51单片机采用8位架构,即其CPU的位数为8位。
这使得51单片机非常适合于一些对计算能力要求不高的控制应用。
2. 强大的IO口:51单片机内置了大量的IO口,可以方便地与其他设备进行通信,实现各种输入输出功能。
此外,51单片机还支持中断功能,可以提高系统的响应速度。
3. 丰富的外设:51单片机内部集成了多个定时器、串口等外设,可用于实现各种功能,如定时、计数、通信等。
4. 低功耗设计:51单片机在设计时考虑到了功耗的问题,采取了一系列的低功耗技术,可以大大降低系统的能耗。
5. 软件支持:针对51单片机,有丰富的软件开发工具和开发库可供选择,如Keil C51、SDCC等,大大降低了开发的难度。
第三部分:51单片机工作原理51单片机的工作原理主要包括指令执行周期、数据通信、中断机制等。
1. 指令执行周期:51单片机通过时钟控制来执行指令。
每个指令执行周期由若干个机器周期组成,一个机器周期通常为12个时钟周期。
2. 数据通信:51单片机通过内部总线进行数据通信。
在执行指令时,需要从内存或寄存器中读取数据,对数据进行处理,并将处理结果写回内存或寄存器。
3. 中断机制:51单片机支持中断机制,可以在特定条件下触发中断请求,从而暂停当前的程序执行,转而执行中断服务程序。
51单片机的基础知识
MCS-51 单 片 机 基 础
EA 控 制 RST N ALE 和 指 寄 定 存 时 器 OSC
RAM
P0口锁存器
P2口锁存器
EPROM/ROM
程序地址 寄存器 栈指示器SP 缓冲器 B寄存器 TMP2 TMP1 PC值 递增器 ALU 口 PSW 器 PC
ACC
DPTR
P1口锁存器
P3口锁存器
T1
MCS-51 单 片 机 基 础
定时/计数器 定时 计数器
并行接口
串行接口
中断系统
TXD RXD
INT0 INT1
P0 P1 P2 P3
MCS-51单片机的基本结构 单片机的基本结构
湘潭大学职业技术学院 李志斌
P0.0 ~ P0.7
P2.0 ~ P2.7
P0口驱动器
P2口驱动器
RAM 地址 寄存器
湘潭大学职业技术学院 李志斌
MCS-51
湘潭大学职业技术学院
李志斌
P3口各位的第二功能
P3口引脚 口引脚 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(外部数据存储器读脉冲输出) (外部数据存储器读脉冲输出)
P1口驱动器
P3口驱动器
P1.0 ~ P1.7
51单片机基础知识试题题库(含答案)
51单片机基础知识试题题库(含答案)第1章习题参考答案一、填空题:1、当MCS-51引脚ALE有效时,表示从P0口稳定地送出了低8位地址。
2、MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。
3、当使用8751且EA=1,程序存储器地址小于1000H时,访问的是片内ROM。
4、MCS-51系统中,当PSEN信号有效时,表示CPU要从外部程序存储器读取信息。
5、MCS-51有4组工作寄存器,它们的地址范围是00H~1FH6、MCS-51片内20H~2FH范围内的数据存储器,既可以字节寻址又可以位寻址。
7、PSW中RS1RS0=10时,R2的地址为12H8、PSW中RS1RS0=11时,R2的地址为1AH9、单片机系统复位后,(PSW)=00H,因此片内RAM寄存区的当前寄存器是第0组,8个寄存器的单元地址为00H~07H10、PC复位后为0000H11、一个机器周期=12个振荡周期=6个状态周期。
12、PC的内容为将要执行的指令地址13、在MCS-51单片机中,如果采用6MHz晶振,1个机器周期为2u14、内部RAM中,位地址为30H的位,该位所在字节的字节地址为26H15、若A中的内容为63H,那么,P标志位的值为016、8051单片机复位后,R4所对应的存储单元的地址为04H,因上电时PSW= 00H这时当前的工作寄存器区是第0工作寄存器区。
17、使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。
18、片内RAM低128个单元划分为哪3个主要部分:工作寄存器区、位寻址区和用户RAM区19、通过堆栈操作实现子程序调用,首先就要把PC的内容入栈,以进行断点保护。
调用返回时,再进行出栈保护,把保护的断点送回到PC20、MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为64KB。
21、MCS-51单片机片内RAM的寄存器共有32个单元,分为4组寄存器,每组8个单元,以R0~R7作为寄存器名称。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.片内RAM .片内 MCS-51的片内RAM存储器共有128字节,可分为 4个区域,分别特殊功能寄存器区、用户区、位寻 址区和工作寄存器区。 (1)工作寄存器区 ) 从00H—1FH为4组工作寄存器区,每组占用8个 RAM字节,记为R0~R7。工作寄存器组的选择由 程序状态字PSW中的RS1~RS0位确定。 (2)位寻址区 ) 从20H~2FH为位寻址区,16个字节的128位可以 单独操作,可对每一位进行读取或写操作。每一 位都有其自身位地址00H~7FH与之对应。 (3)用户区 ) 用户区共80个RAM单元,用于存放用户数据或作 堆栈区使用,用户区中的存储区按字节进行存取。
1.3.2 存储器结构
MCS-51 单片机的存储器特点是将程序存储器和 数据存储器分开编址,并有各自的寻址方式和寻址 单元。对存储器的划分在物理上分为4个空间,片 内ROM、片外ROM、片内RAM和片外RAM,其结 构示意图如下: 其中ROM存储器地址空间有片内ROM和片外ROM, 其地址范围为0000H~FFFFH;片内RAM地址空间 的地址范围为00H~FFH;片外RAM地址空间的地 址范围为0000H~FFFFH。
1.2.2 51单片机的封装
51单片机芯片有两种封装(如下)
双列直插式封装及引脚
方形封装及引脚
1.3 51单片机内部结构 1.3.1 51单片机的CPU结构
MCS-51系列的8051单片机内部结构如图
8051单片机内部结构 单片机内部结构
单片机内部结构图
中央处理器(CPU)主要由算术逻辑单元、控制器部件和 寄存器三部分电路组成。CPU是整个单片机的核心部件, 实现了运算器和控制器的功能,具体介绍如下: 1. 算术逻辑单元(ALU) 算术逻辑单元( ) 2. 定时控制部件 3. 专用寄存器组 (1)专用寄存器组包括程序计数器 (2)累加器 (3) )专用寄存器组包括程序计数器PC( )累加器A( ) 程序状态字( 程序状态字(PSW,Program Status Word)寄存器、 , )寄存器、 堆栈指示器SP寄存器 数据指针DPTR和通用寄存器 。 寄存器、 和通用寄存器B。 堆栈指示器 寄存器、数据指针 和通用寄存器 (4)堆栈指针 (Stack Pointer) )堆栈指针SP( ) (5)数据指针 )数据指针DPTR (Data Pointer) (6)通用寄存器 )通用寄存器B
1.1.3 单片机的实际应用
单片机的 应用范围
测控 系统
智能 仪表
机电一体 化产品
智能 接口
智能民 用产品
1.2 51单片机功能及引脚 1.2.1 51 单片机功能综述
8051是51系统单片机中的典型产品,8051单片机主要参数 及功能如下: (1)8 位CPU 2)4KB程序存储器(ROM) (3)128B的数据存储器(RAM) (4)32条I/O口线 (5)111条指令,大部分为单字节指令 (6)21个专用寄存器 (7)2个可编程定时/计数器 (8)5个中断源,2个优先级 (9)1 个全双工串行通信口 (10)外部数据存储器寻址空间为64KB (11)外部程序存储器寻址空间为64KB (12)逻辑操作位寻址功能 (13)多种封装形式 (14)单一+5V电源供电
1.5.2 机器周期及指令周期
(1)振荡周期 ) (2)时钟周期 ) (3)机器周期 ) (4)指令周期 )
1.5.3 指令的执行时序
(1)单字节单周期指令 ) (2)双字节单周期 ) (3)单字节双周期指令 )
1.6小结
本章详细介绍了51系列单片机的发展历史和 应用领域,然后介绍了单片机的基本知识, 包括单片机的内部结构、引脚功能、中央处 理器CPU、存储器的结构、单片机的复位、 单片机工作时钟和时序,为读者后续的学习 打下基础。
3.特殊功能寄存器 . 相关SFR (1)ALU相关 ) 相关 (2)指针相关 )指针相关SFR (3)中断相关 )中断相关SFR (4)端口相关 )端口相关SFR 计数器相关SFR (5)定时器 计数器相关 )定时器/计数器相关 4.片外 .片外RAM 如果片内RAM容量太小,不能满足系统需 容量太小, 如果片内 容量太小 求时可以外接RAM,但外部 求时可以外接 ,但外部RAM大小不能 大小不能 超过64KB,因为 的寻址范围为64KB。 超过 ,因为8051的寻址范围为 的寻址范围为 。
VCC VCC
VCC 22 µF MCS-51 RESET 1 kΩ VSS R2 22 µF RESET R1 200 Ω
VCC MCS-51
RESET
VSS
上电复位和手动复位电路
1.4.2 程序执行方式
连续执行方式 连续执行方式是单片机执行的 基本工作方式,所要执行的代码放在程序存 储器ROM中(可以是片内或片外),CPU不 断地从程序存储器中取指令、分析并执行。 单步执行方式 程序的执行处于外加脉冲(通 常用一个按键生产)的控制下,一般利用中 断来实现程序的单步执行。
1.3.3 I/O端口结构
I/O端口是单片机控制外围设备的重要接口,是和 外设进行信息交换的主要途径。I/O端口有串行口 和并行口之分。并行口一次可以传送一组二进制 数据(如8位),而串行口一次只能传送一位二进 制数,传送多位数据时要分段发送。 (1)并行 端口 )并行I/O端口 8051有4个并行I/O端口,分别为P0、P1、P2、 P3,每个端口都有双向I/O功能,可以从端口读取 数据和向端口写入数据。 (2)串行 端口 )串行I/O端口 8051具有一个全双工的可编程串行口,可以实现 8位并行数据的串行发送和接收。在使用串行口 之前必须对其初始化,即对PCON及SCON寄存 器进行设置。
1.1.2 51系列单片机
MCS-51是指美国Intel公司生产的一系列单片机的总称,这 一系列单片机包括了很多种类。 以下是一些典型的51系列单片机: (1)美国Intel公司MCS-48系列、MCS-51系列和MCS-96 系列主要型号见表1.1.1所示; (2)美国Atmel公司的AT89系列单片机主要型号见表1.1.2 所示; (3)Philips公司51系列单片机主要型号见表1.1.3所示。 这些单片机与8051的系统结构(主要是指令系统)相同。他 们对8051都作了一些功能扩充,更有特点、功能更强、市场 竞争力更强。
பைடு நூலகம்外部 ROM
(EA=0)
0000H 外部数据存储器 (RAM)
0000H
0000H 程序存储器 (ROM)
单片机的存储器结构图
1.程序存储器ROM .程序存储器 程序设计人员编写的程序就存放在程序存储器中。 单片机重新启动后,程序计数器PC的内容为0000H,所 以系统将从程序存储器的地址为0000H单元处开始执行程 序。但是考虑到中断系统的应用,用户程序一般不是从 0000H处开始连续存放,因为接下来的一段程序区要用来 存放中断向量表,所以用户不能占用。要求地址分配如下: 0000H 存放转移指令,跳转到主程序。 0003H 外部中断0的中断地址区。 000BH 定时/计数器0中断地址区。 0013H 外部中断1的中断地址区。 001BH 定时/计数器1中断地址区。 0023H 串行通信中断地址区。 用户程序一般从0030H处开始,而在0000H处放置一条跳 转指令,这样单片机复位后能从0000H处跳转到用户的主 程序。
1.5 51单片机单片机工作时序 1.5.1 时钟电路
根据硬件电路的不同,单片机的时钟连接方式可以 分为内部时钟和外部时钟方式。 内部振荡方式:MCS-51单片机片内有一个用于构 成振荡器的高增益反向放大器,引脚XTAL1和 XTAL2分别是此放大器的输入端和输出端。把放大 器与作为反馈元件的晶体振荡器或陶瓷谐振器连接, 就构成了内部自激振荡器并产生振荡时钟脉冲。 外部振荡方式:外部振荡方式就是把外部已有的时 钟信号引入单片机内,接XTAL2引脚,XTAL1引脚 接地。
FFH
特殊功能 寄存器 通用 RAM区
FFFFH
FFFFH
80H 7FH 30H 2FH
位寻址区 用户区
外部 RAM (I/O口 地址) 0FFFH 1000H
外部 ROM
位寻址区 (00~7F)
20H 1FH 00H 内部数据存储器 (RAM)
工作寄 存器区 (0~3)
0FFFH 内部 ROM
(EA=1)
1.3.4 定时/计数器
8051具有两个16位定时器/计数器T0和T1, 分别与2个8位寄存器TL0、TH0及TL1、TH1 对应。8051的定时器/计数器可以工作在定时 方式和计数方式。 定时方式 定时方式实现对单片机内部的时钟 脉冲或分频后的脉冲进行计数。 计数方式 实现对外部脉冲的计数。定时器/ 计数器将在以后的章节中具体讲解。
第1章 51单片机基础知识
1.1 1.2 1.3 1.4 1.5 单片机概述 51单片机功能及引脚 51单片机内部结构 51单片机工作方式 51单片机单片机工作时序
1.1 单片机概述 1.1.1 单片机的发展历史
单片机的发展迄今经历了四个阶段: 单片机的发展迄今经历了四个阶段: ):单片机的探索阶段 (1)第一阶段(1976-1978):单片机的探索阶段。 )第一阶段( ):单片机的探索阶段。 (2)第二阶段 )第二阶段(1978-1982):单片机的完善阶段。 (3)第三阶段 )第三阶段(1982-1990):8位单片机的巩固 发展及16位单片机的推出阶段,也是单片机向微控 制器发展的阶段。 (4)第四阶段 )第四阶段(1990—):微控制器的全面发展 阶段。
1.3.5 中断系统
8051有5个中断源,有两个中断优先级控制, 可实现中断服务嵌套。两个外部中断INT0、 INT1,两个定时器中断T0、T1,还有一个串 行中断。 中断的控制由中断允许寄存器IE和中断优先 级寄存器IP实现。
1.4 51单片机工作方式 1.4.1 复位方式 在51单片机中,最常见的复位电路有如图 1.4.1所示的上电复位和手动复位电路