单片机原理
2024-03-14 14:07:36 4 举报
AI智能生成
单片机原理是研究单片机的核心内容,包括单片机的基本结构、工作原理、指令系统和编程方法。单片机是一种集成电路芯片,内部集成了CPU、存储器、I/O接口和各种外设接口,可以完成数据处理、数据存储、通信和控制等多种功能。单片机原理主要包括以下几个部分:1. 基本结构:包括CPU、存储器(RAM、ROM)、I/O接口等。2. 工作原理:研究单片机的运行机制,包括时钟系统、复位系统、中断系统等。3. 指令系统:介绍单片机的指令格式、指令类型和寻址方式。4. 编程方法:讲解如何用汇编语言或高级语言编写单片机程序,包括程序的编写、编译、链接和调试过程。
作者其他创作
大纲/内容
1 计算机基础知识
1.1计算机中的信息及表示
1.1.1 数在计算机内的表示
数分有符无符,原码由符号位+绝对值表示。。反码绝对值取反<br>补码负数绝对值取反加1 。两和补码=两数补码和。十进制码亦称BCD。以4位二进制表1~9
数在计算机内的表示
有符号数
无符号数
原码
原码由符号位(1bit)+绝对值构成。0表示正,1为负。原码表示范围-(2^(n-1)-1)到+(2^(n-1)-1)
反码
正数符号位0+绝对值,负数符号位1+绝对值取反
补码
正数符号位0+绝对值,负数符号位1+绝对值取反+1
求补运算
如果知道一个正数二进制,将符号位和数字为一起取反,末位加1
补码加减运算
两个数和的补码=两个数的补码和
两个数差的补码=两个数的补码差
十进制数的表示
十进制编码又称BCD码
压缩BCD码(8421码)
用4位二进制编码来表示一个十进制数。0对应0000,9对应1001.
非压缩BCD码
用8位二进制表示一个十进制数。低4位与压缩BCD码相同,高4位任取
1.1.2字符在计算机内的表示
字符以ASCII码整数形式存放
美国信息交换标志代码ASCII码
0~9:30H-39H
26个大写字母
41H-5AH
26个小写字母
61H-7AH
1.2微型计算机的基本结构和工作原理
1.2.1微型计算机发展
现代计算机采用冯诺依曼结构,由运算器,控制器,存储器,输入设备,输出设备构成。组成的集成电路称为CPU
发展历史
1971年~1973
4位和低档8位处理器
第二代1974~1977
中高档8位处理器
三代1978~1984
16位处理器
四代1985~1992
32位处理器
五代1993~1999
超级32位奔腾处理器
六代2000年以后
64位高档处理器
1.2.2微型计算机基本结构
中央处理器,存储器,输入输出设备,系统总线
数据总线(双向)
地址总线(单向)
控制总线
内部寄存器
8086有14个16位寄存器,分为5组
8086是CPU,89C51是单片机,是将中心处理单元和各种控制器集成在一块芯片上
通用寄存器组
AX累加器
算术运算
BX基址寄存器
被读写的存储单元地址
CX计数器
字符串操作,循环或移位
DX数据寄存器
乘除作为辅助累加器
指针变址寄存器
主要用来存放操作数的偏移地址(即操作数的段内地址)。<br>
SP堆栈指针stack point
存放操作数的便宜地址
BP基址指针寄存器
堆栈操作中存放栈顶的偏移地址
BP称为基址指针寄存器,常用作堆栈区的基地址寄存器。<br>
SI称为源变址寄存器,主要用于在字符串操作中存放源操作数的偏移地址。<br>
DI称为目的变址寄存器,主要用于在字符串操作中存放目的操作数的偏移地址。<br>
指令指针寄存器
指令指针寄存器IP(instruction pointer)是一个16位的寄存器,IP存放下一条要执行的指令的偏移地址。<br>
段寄存器
段寄存器用来存放段的基址(即段的起始地址的高16位)。<br>
CS称为代码段段寄存器,代码段用来存放程序代码。CS中存放当前正在执行的代码段的段基址。<br>
DS称为数据段段寄存器,数据段用于存放当前使用的数据。DS中存放当前数据段的段基址。<br>
SS称为堆栈段段寄存器,堆栈段是内存中一段特殊的存储区。SS中存放堆栈段的段基址。<br>
ES称为附加数据段段寄存器,程序需要第二个数据段时,可以使用ES存放的该数据段的段基址。<br>
标志寄存器
标志寄存器FLAGS共有9个标志位,其中6个为状态标志位,3个为控制标志位。 <br>
存储器
存储器基本结构
主要由地址译码器、存储矩阵、控制逻辑和三态双向缓冲器等部分组成。<br>
存储器的分类 <br>
随机读写存储器RAM(Random Access Memory)<br>
掉电数据丢失,存数据
和只读存储器ROM(Read Only Memory)。
掉电保存,存程序
8086中的存储器
总存储空间为1M字节,地址20位。 <br>
由于8086的寄存器都是16位,不能直接提供20地址,因此,为了管理方便,8086把1M空间分成若干块(称为“逻辑段”), 各个逻辑段之间可在实际存储空间中完全分开,也可以部分重叠,甚至可以完全重叠。每个逻辑段容量不超过64K字节,这样就可用16位寄存器提供地址访问。 <br>
物理地址与逻辑地址<br>
物理地址:送给存储器的 20位地址。<br>
逻辑地址:程序中访问存储器的地址, “段基址:偏移地址”<br>
转换:物理地址=段基址×16 + 段内偏移地址 <br>
乘以16是为了左移4位,后面加偏移地址,构成了20位实际地址
总线
1.3单片微型计算机
单片机特点
单片机是微型计算机,是CPU,存储器等硬件的集合。存储器分ROM和RAM(相当于内存和硬盘)。
单片机属于微型计算机的一种,是把微型计算机中的微处理器、存储器、I/O接口、定时器/计数器、串行接口、中断系统等电路集成在一块集成电路芯片上形成的微型计算机。因而被称为单片微型计算机,简称为单片机。
1在存储器结构上,单片机的存储器采用哈佛(Harvard)结构。ROM和RAM是严格分开的。ROM称为程序存储器,只存放程序、固定常数和数据表格。RAM则为数据存储器,用作工作区及存放数据。
2)在芯片引脚上,大部份采用分时复用技术。
(3)在内部资源访问上,通过用特殊功能寄存器(SFR)的形式。 <br>
(4)在指令系统上,采用面向控制的指令系统。 <br>
(5)内部一般都集成一个全双工的串行接口。 <br>
下载程序
外部通信
(6)单片机有很强的外部扩展能力。 <br>
1. 单机应用<br>
工控,智能仪表,计算机外设,家电
(1)工业自动化控制。 <br>
(2)智能仪器仪表。 <br>
(3)计算机外部设备和智能接口 <br>
(4)家用电器。 <br>
3. 单片机的等级<br>
(1)民用级或商用级。温度适应能力在0C~70C,适用于机房和一般的办公环境。<br>(2)工业级。温度适应能力在-40C~85C,适用于工厂和工业控制中,对环境的适应能力较强。<br>(3)军用级。温度适应能力在-65C~125C,运用于环境条件苛刻,温度变化很大的野外。主要用在军事上。 <br>
2单片机基本原理
2.1 MCS-51系列单片机简介<br>
MCS-51系列单片机是美国Intel公司在1980年推出的高性能8位单片机,它包含51和52 两个子系列。<br> 对于51子系列,主要有8031、8051、8751 三种机型,它们的指令系统与芯片引脚完全兼容,仅片内程序存储器有所不同,8031芯片不带ROM,8051芯片带4KROM,8751芯片带4KEPROM。51子系列的主要特点为:<br>◆8位CPU。<br>◆片内带振荡器,频率范围1.2~12MHZ。 12常用于使用,11.0592用于通讯<br>◆片内带128字节的数据存储器。<br>◆片内带4K的程序存储器。<br>◆程序存储器的寻址空间为64K字节。<br>◆片外数据存储器的寻址空间为64K字节。<br>◆128个用户位寻址空间。 <br>◆21个字节特殊功能寄存器。<br>◆4个8位的并行I/O接口:P0、P1、P2、P3。<br>◆2个16位定时器/计数器<br>◆2个优先级别的5个中断源。<br>◆1个全双工的串行I/O接口,可多机通信。<br>◆111条指令,含乘法指令和除法指令。<br>◆片内采用单总线结构。<br>◆有较强的位处理能力。<br>◆采用单一+5V电源。<br> 对于52子系列,有8032、8052、8752 三种机型。52子系列与51子系列相比大部分相同,不同之处在于:片内数据存储器增至256字节;8032芯片不带ROM,8052芯片带8KROM,8752芯片带8KEPROM;有3个16位定时器/计数器;6个中断源。本书以51子系列的8051介绍MCS-51单片机的基本原理 <br>
2.2 MCS-51系列单片机的结构原理 <br>
时钟电路
XTAL1,XTAL2
ROM/EPROM
RAM
定时/计数器T0,T1
并行接口 P0P1P2P3
串行接口TXD,RXD
中断系统 INT0,INT1
2.2.3 MCS-51系列单片机的中央处理器(CPU)<br>
一.运算部件<br>
运算部件以算术逻辑运算单元ALU为核心,包含累加器ACC(简称A)、B寄存器、暂存器、标志寄存器PSW等许多部件,<br>它能实现算术运算、逻辑运算、位运算、数据传输等处理。<br>
标志寄存器PSW是一个8位的寄存器,它用于保存指令执行结果的状态,以供程序查询和判别。
二.控制部件 <br>
控制部件是单片机的控制中心,它包括定时和控制电路、指令寄存器、指令译码器、程序计数器PC、堆栈指针SP、数据指针DPTR以及信息传送控制部件等。<font color="#ff0000">它先以振荡信号为基准产生CPU的时序,从ROM中取出指令到指令寄存器,然后在指令译码器中对指令进行译码,产生指令执行所需的各种控制信号,送到单片机内部的各功能部件,指挥各功能部件产生相应的操作,完成对应的功能。 </font><br>
2.2.4 MCS-51系列单片机的存储器结构<br>
一.程序存储器<br>
程序存储器是用来存放程序,ROM。掉电不丢失。8051有4K 相当于硬盘
1.程序存储器的编址与访问<br>
MCS-51单片机的程序存储器,从物理结构上分为片内和片外程序存储器,而对于片内程序存储器,在MCS-51系列中,不同的芯片各不相同,8031和8032内部没有ROM,8051内部有4KBROM,8751内部有4KBEPROM,8052内部有8KBROM,8752内部有8KBEPROM。 <br>
2.程序存储器的6个特殊地址<br>
复位地址0000H<br>
外部中断0,1,。定时计数器0,1.串行口<br>
二.数据存储器<br>
用来存放运行数据,RAM,掉电丢失,8051有128字节。相当于内存
1.片内数据存储器<br>
对于51子系列,片内数据存储器RAM有128字节,编址为00H—7FH;对于52子系列,片内数据存储器有256字节,编址为00H—FFH;除了RAM块外,还有特殊功能寄存器(SFR)块,编址为80H—FFH ,与52系列RAM后128字节编址重叠的。后者也有128字节,编址为80H—FFH;后者与前者的的。访问时通过不同的指令相区分。<br>片内数据存储器按功能分成以下几个部分:工作寄存器组区、位寻址区、一般RAM区,其中还包含堆栈区。 <br>
1工作寄存器组区<br>
00H—1FH单元为工作寄存器组区,共32个字节。工作寄存器也称为通用寄存器,用于临时寄存8位信息。工作寄存器共有4组,称为0组、1组、2组和3组,每组8个,分别依次用R0~R7表示
2.位寻址区<br>
20H—2FH为位寻址区,共16字节,128位。这128位每位都可以按位方式使用,每一位都有一个位地址,位地址范围为00H—7FH
3.一般RAM区<br>
30H—7FH是一般RAM区,也称为用户RAM区,共80字节,对于52子系列,一般RAM区从30H—FFH单元。另外,对于前两区中未用的单元也可作为用户RAM单元使用。
4. 堆栈区与堆栈指针<br>
堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。MCS-51单片机中,堆栈是用片内数据存储器的一段区域,在具体使用时应避开工作寄存器、位寻址区,一般设在2FH以后的单元,如工作寄存器和位寻址区未用,也可开辟为堆栈。
堆栈有入栈和出栈两种操作。<br> 入栈时先改变堆栈指针SP,再送入数据,<br> 出栈时先送出数据,再改变堆栈指针SP
5. 特殊功能寄存器<br>
特殊功能寄存器(SFR)也称为专用寄存器,专门用于控制、管理片内算术逻辑部件、并行I/O接口、串行口、定时/计数器、中断系统等功能模块的工作。
2.片外数据存储器<br>
扩展的外部数据存储器最多64KB,地址范围为0000H—0FFFFH,通过数据指针寄存器DPTR作指针间接方式访问,对于低端的256字节,可用两位十六进制地址编址,地址范围为00H—0FFH,可通过R0和R1间接方式访问。
2.2.5 MCS-51系列单片机的输入/输出接口<br>
51单片机有4个并行I/O口,可输入可输出。
MCS-51系列单片机有4个8位的并行I/O接口:P0、P1、P2和P3口。它们是特殊功能寄存器中的4个。这4个口,既可以作输入,也可以作输出,既可按8位处理,也可按位方式使用。输出时具有锁存能力,输入时具有缓冲功能。 <br>
输入输出引脚
P0口
当P0口作通用I/O接口时,应注意以下两点:<br>(1)在输出数据时,必须外接上拉电阻。<br>(2)P0口作为通用I/O口输入使用时,在输入数据前,应先向P0口写“1”。<br>
P0口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用的I/O接口。它包括一个输出锁存器、两个三态缓冲器、输出驱动电路和输出控制电路组成。
P1口
P1口是准双向口,它只能作通用I/O接口使用。<br>
准双向IO口和双向IO的区别:<br>
1、准双向口:准双向口就是做输入用的时候要有向锁存器写1的这个准备动作,所以叫准双向口。<br> 2、真正的双向口不需要任何预操作可直接读入读出。<br>
P2口
P2口也是准双向口,它有两种用途:通用I/O接口和高8位地址线。 <br>
P3口
P3口除了作为准双向通用I/O口使用外,它的每一根线还具有第二种功能。
P3.0 RXD. P3.1 TXD. P3.2 外部中断0输入,低电平有效。 P3.3外部中断1. P3.4 定时计数器0脉冲输入。P3.5定时计数器1脉冲输入。<br>P3.6 WR外部数据存储器写信号,低电平有效。 P3.7RD 外部数据存储器读信号,低电平有效
控制线
ALE/PROG(30脚):地址锁存信号输出端。ALE在每个机器周期内输出两个脉冲。 <br>
PSEN(29脚):片外程序存储器读选通信号输出端,低电平有效。 <br>
RST/VPD(9脚):RST即为RESET,VPD为备用电源。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机回复到初始状态。上电时,考虑到振荡器有一定的起振时间,该引脚上高电平必须持续10 ms以上才能保证有效复位。
EA /VPP(31脚):EA为片外程序存储器选用端。该引脚低电平时,选用片外程序存储器,高电平或悬空时选用片内程序存储器。
电源引脚
VCC(40脚):接+5 V电源正端。<br>VSS(20脚):接+5 V电源地端。<br>
外接晶体引脚
XTAL1、XTAL2(19、18脚):当使用单片机内部振荡电路时,这两个引脚用来外接石英晶体和微调电容,如图(a)。当采用外部时钟时,对于HMOS单片机,XTAL1引脚接地,XTAL2接片外振荡脉冲输入(带上拉电阻);对于CHMOS单片机,XTAL2引脚接地,XTAL1接片外振荡脉冲输入(带上拉电阻),如图(b)和(c)。
2.3.2 片外总线结构<br>
地址总线
地址总线宽度为16位,寻址范围都为64KB。由P0口经地址锁存器提供低8位(A7~A0),P2口提供高8位(A15~A8)而形成。可对片外程序存储器和片外数据存储器址。
数据总线
数据总线宽度为8位,由P0口直接提供。
控制总线
控制总线由第二功能状态下的P3口和4根独立的控制线RST、EA、ALE和PSEN组成。
2.4 MCS-51系列单片机的工作方式<br>
2.4.1 复位方式<br>
在时钟电路工作以后,当外部电路使得RST端出现2个机器周期(24个时钟周期)以上的高电平,系统内部复位。复位有两种方式:上电复位和按钮复位。
上电复位
电容开始相当于导通之后存储能量后,RST端由1变为0
按键复位
在上电复位基础上增加一个旁路电阻和按钮。当按钮按下RST得到高电平,复位
2.5 MCS-51系列单片机的时序<br>
2.5.1 时钟周期、机器周期和指令周期<br>
时钟周期(振荡周期):单片机内部时钟电路产生(或外部时钟电路送入)的信号周期。
指令周期: 计算机取一条指令至执行完该指令需要的时间称为指令周期。<br> 机器周期:机器周期是单片机的基本操作周期,每个机器周期包含S1、S2、...、S6 6个状态,每个状态包含2拍P1和P2,每一拍为一个时钟周期(振荡周期)。因此,一个机器周期包含12个时钟周期。<br>
3 单片机C语言程序设计
4.1 C51基本知识<br>
1)C51中的数据类型与标准C语言的数据类型也有一定的区别。 <br>
(2)C51在变量定义与使用上与标准C语言不一样。 <br>
(3)为了方便对51单片机硬件资源进行访问,C51在绝对地址访问上对标准C语言进行了扩展。 <br>
(4)C51中函数的定义与使用与标准C语言也不完全相同。 <br>
4.2 C51的数据类型<br>
字符型
unsigned char<br>
signed char<br>
整型
unsigned int<br>
signed int<br>
unsigned long<br>
signed long<br>
整型数据在标准C语言中,低位在地址低位,高位在地址高位。C51则相反
浮点型
float<br>
位类型
位型
bit
特殊位型
sbit
bit定义的位变量在用C51编译器编译时,不同的时候分配的位地址不一样。
sbit定义的位变量必须与MCS-51单片机的一个可以位寻址的位单元联系在一起,在C51编译器编译时,其位地址是不可变化的。
sfr
8位特殊功能寄存器
1字节
用来放单片机的地址
sfr16
16位特殊功能寄存器
2字节
4.3 C51的变量与存储类型<br>
变量定义格式
存储种类+ 数据类型说明符 +存储器类型+变量名
存储种类
分别是自动(auto)、外部(extern)、静态(static)和寄存器(register)
数据类型
数据类型说明符(char , int)<br>
存储器类型<br>
指明变量所处的单片机的存储器区域与访问方式。<br>
data<br>
直接寻址的片内RAM低128B,访问速度快<br>
bdata
片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问<br>
idata
间接寻址访问的片内RAM,允许访问全部片内RAM<br>
pdata
用Ri间接访问的片外RAM低256B<br>
xdata
用DPTR间接访问的片外RAM,允许访问全部64KB片外RAM<br>
code
程序存储器ROM 64KB空间<br>
固定的数据,只能读取不能改变的数据。确保数据的安全。
变量名
符合C语言的语法规则即可
存储模式<br>
SMALL模式。SMALL模式称为小编译模式,在SMALL模式下,编译时变量被默认在片内RAM中,存储器类型为data。
2)COMPACT模式。COMPACT模式称为紧凑编译模式,在COMPACT模式下,编译时变量被默认在片外RAM的低256B空间,存储器类型为pdata。<br>
3)LARGE模式。LARGE模式称为大编译模式,在LARGE模式下,编译时变量被默认在片外RAM的64B空间,存储器类型为xdata。
指定通过#pragma预处理命令<br>
举例
char data varl; <br>/*在片内RAM低128B定义用直接寻址方式访问的字符型变量var1*/<br>int idata var2; <br>/*在片内RAM256B定义用间接寻址方式访问的整型变量var2*/<br>auto unsigned long data var3; /*在片内RAM128B定义用直接寻址方式访问的自动无符号长整型变量var3*/<br>extern float xdata var4; /*在片外RAM64KB空间定义用间接寻址方式访问的外部实型变量var4*/<br>int code var5; /*在ROM空间定义整型变量var5*/<br>unsigned char bdata var6; /*在片内RAM位寻址区20H~2FH单元定义可字节处理和位处理的无符号字符型变量var6*/<br>#pragma small /*变量的存储模式为SMALL*/<br>char k1; /* k1变量的存储器类型默认为data*/<br>int xdata m1; /* m1变量的存储器类型为xdata*/<br>#pragma compact /*变量的存储模式为compact*/<br>char k2; /* k2变量的存储器类型默认为pdata*/<br>int xdata m2; /* m2变量的存储器类型为xdata*/
4.3.2 C51的特殊功能寄存器变量<br>
定义格式
sfr或sfr16 特殊功能寄存器变量名=地址;<br>
为了与一般变量相区别,特殊功能寄存器变量名一般用大写字母表示。地址一般用直接地址形式。为了使用方便,特殊功能寄存器变量名取名时一般与相应的的特殊功能寄存器名相同。<br>
【例4-3】特殊功能寄存器的定义。相当于给指针赋地址<br> sfr PSW=0xd0; //0xd0表示8位数据。 0xd0这个地址对应PSW<br> sfr SCON=0x98;<br> sfr TMOD=0x89;<br> sfr P1=0x90;<br> sfr16 DPTR=0x82;<br> sfr16 T0=0X8A;
4.3.3 C51的位变量<br>
bit
格式
bit 位变量名;
注意:定义的位变量必须位于片内数据存储器的位寻址区。<br>
【例4-4】bit型变量的定义。<br> bit data a1; /*正确*/<br> bit bdata a2; /*正确*/<br> bit pdata a3; /*错误*/<br> bit xdata a4; /*错误*/<br>
sbit
格式
sbit 位变量名=位地址
必须包含头文件“#include <reg51.h>” <br>
【例4-19】sbit型变量的定义。<br> sbit OV=0xd2;<br> sbit CY=0xd7;<br> sbit P1_0=P1^0;<br> sbit P1_1=P1^1;<br> sbit P1_2=P1^2;
相当于把地址给指针。
bit与sbit的区别在于定义后地址是否可以改变。sbit相当于预编译,不可变
4.3.4 C51的指针变量<br>
使用指针可以方便有效地表达复杂的数据结构;可以动态地分配存储器,直接处理内存地址。
存储器型指针<br>
定义时指明了所指向字符的数据的存储器类型。<br> char xdata *p2;<br>
一般指针<br>
定义时没有指明所指向的数据的存储器类型。<br>
4.4 绝对地址的访问<br>
1. 使用C51运行库中预定义宏<br>
#include <absacc.h>。 <br>
CBYTE以字节形式对code区寻址,<br>DBYTE以字节形式对data区寻址,<br>PBYTE以字节形式对pdata区寻址,<br>XBYTE以字节形式对xdata区寻址,<br>CWORD以字形式对code区寻址,<br>DWORD以字形式对data区寻址,<br>PWORD以字形式对pdata区寻址,<br>XWORD以字形式对xdata区寻址。 <br>
访问形式如下:宏名[地址]<br>
var1=XBYTE[0x0005]; <br>var2=XWORD[0x0002]; <br>
4.4.2 通过指针访问<br>
#define uchar unsigned char <br>#define uint unsigned int <br>void func(void)<br>{<br>uchar data var1;<br>uchar pdata *dp1; <br>uint xdata *dp2; <br>uchar data *dp3; <br>dp1=0x30; <br>dp2=0x1000; <br>*dp1=0xff; <br>*dp2=0x1234; <br>dp3=&var1; <br>*dp3=0x20; <br>}<br>
4.4.3.使用C51扩展关键字_at_<br>
定义变量的存储地址<br>
[存储器类型] 数据类型说明符 变量名 _at_ 地址常数;<br>
data uchar x1 _at_ 0x40; <br>xdata uint x2 _at_ 0x2000; <br>
4.5 C51中的函数<br>
C51函数与C语言的区别
C51程序与标准C语言类似,程序也由若干函数组成,程序也由主函数main( )开始,并在主函数中结束,除了主函数而外,也有标准库函数和用户自定义函数。标准库函数是C51编译器提供的,不需要用户进行定义,可以直接调用。用户也可自己定义函数。它们的使用方法与标准C语言基本相同。但C51针对的是51系列单片机,C51的函数在有些方面还是与标准C语言不同,<font color="#ff0000">参数传递和返回值与标准C语言中是不一样的,而且C 51又对标准 C语言作了相应的扩展。扩展有:选择存储模式;指定一个函数作为一个中断函数;选择所用的寄存器组等。 </font><br>
<font color="#ff0000">1. C51函数的参数传递</font><br>
一种是通过寄存器R0~R7传递参数;<br>第二种是通过固定存储区传递。 <br>
char 类型参数
第一个 R7 第二个R5,第三个R3
其他类型查表
<font color="#ff0000">为什么</font>在单片机delay(int n)中是直接传递?
2. C51函数的返回值<br>
函数返回值通常用寄存器传递 <br>
返回不同类型数据通过不同寄存器实现,具体查表可知
3. C51函数的存储模式<br>
函数定义时后面再相应的参数(small,compact或large)来指明 ,系统隐含为SMALL模式。 <br>
4. C51的中断函数<br>
定义中断函数格式 interrupt m <br>中断函数不能传递参数,没有返回值。不能直接调用中断。如果中断函数调用其他函数<br>那么被调函数所使用的寄存器必须与中断函数相同。编译时系统自动添加其他内容。
定义函数时后面用了interrupt m修饰符 , ,则把该函数定义成中断函数。系统对中断函数编译时会自动加上程序头段和尾段,并按MCS-51系统中断的处理方式把它安排在程序存储器中的相应位置。<br>
中断函数不能进行参数传递 ,中断函数没有返回值 <br>
在任何情况下都不能直接调用中断函数 <br>
如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器必须与中断函数相同
C51编译器从绝对地址8m+3处产生一个中断向量 <br>
C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容 <br>
中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明
m的取值为0~31,对应的中断情况如下: <br>
0——外部中断0<br>1——定时/计数器T0<br>2——外部中断1<br>3——定时/计数器T1<br>4——串行口中断<br>5——定时/计数器T2<br>
【例4-10】编写一个用于统计外中断0的中断次数的中断服务程序。<br>extern int x;<br>void int0() interrupt 0 using 1<br>{<br> x++;<br>}<br>
5. C51函数的寄存器组<br>
定义时带中断函数+using n修饰符,其中n的取值为0~3 。这个可有可无<br>
加入using n后,C51在编译时自动在函数的开始处和结束处加入以下指令。
{<br>PUSH PSW <br>MOV PSW,#与寄存器组号n相关的常量 <br>……<br>POP PSW <br>} <br>
using n修饰符不能用于有返回值的函数。 <br>
4 51单片机的内部资源及编程
7.1 并行输入/输出接口<br>
MCS-51单片机有4个8位的并行输入/输出接口:P0、P1、P2和P3口。这4个口既可以并行输入或输出8位数据,又可以按位方式使用,即每一位均能独立作为输入或输出接口用。
单片机端口做输入时,端口要先置1.后检测,做输出
当P0口作通用I/O接口时,应注意以下两点:<br>(1)在输出数据时,必须外接上拉电阻。<br>(2)P0口作为通用I/O口输入使用时,在输入数据前,应先向P0口写“1”。
1.P1、P2、P3不需要上拉电阻,片内已有。<br>2.P0口作为扩展总线的数据/地址复用线时,也不需要上拉电阻,这种情况下,P0口内部是两个MOS管推拉输出,可以同时驱动8个TTL电路。<br>3.P0口作为普通I/O口使用时,由于上面的MOS管截止,只有下面一个管子工作,处于开漏状态,此时需要外接上拉电阻,才能输出高电平。
7.2 定时/计数器接口<br>
7.2.1 定时/计数器的主要特性<br>
1.MCS-51系列中51子系列有两个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T1,52子系列有三个,还有一个定时/计数器T2。<br>2.每个定时/计数器既可以对系统时钟计数实现定时,也可以对外部信号计数实现计数功能,通过编程设定来实现。<br>3.每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某种方式。<br>4.每一个定时/计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。<br>
7.2.2 定时/计数器T0、T1的结构及工作原理<br>
组成:加法计数器、方式寄存器TMOD、控制寄存器TCON和内部总线组成。<br>
加法计数器:16位加法计数器用于对系统时间计数实现定时或对外部计数信号计数实现计数。<br>
方式寄存器TMOD:用于设定定时/计数器T0和T1的工作方式。<br>
控制寄存器TCON:用于对定时/计数器的启动、停止进行控制。<br>
内部总线:各部分之间的连接和信息传送
加法计数器在使用时注意两个方面:<br>第一,由于它是加1计数器,当由全1加到全0时计满溢出,要计N个单位,应向计数器置初值为X,且有:<br>初值X=最大计数值(满值)M-计数值N<br>第二,工作于计数方式时,对芯片引脚T0(P3.4)或T1(P3.5)上的输入脉冲计数,在每一个机器周期的S5P2时刻对T0(P3.4)或T1(P3.5)上信号采样一次,如果上一个机器周期采样到高电平,下一个机器周期采样到低电平,则计数器在下一个机器周期的S3P2时刻加1计数一次。因而需要两个机器周期才能识别一个计数脉冲,所以外部计数脉冲的频率应小于振荡频率的1/24。脉冲频率<0.5M<br>
初值的设置就是为了使计数到溢出,这样就可以检测到
用户使用:<br>
定时/计数器由以下特殊功能寄存器组成:<br> TH0、TL0、TH1、TL1、TMOD和TCON。<br>
7.2.3 定时/计数器的方式和控制寄存器<br>
一.定时/计数器的方式寄存器TMOD<br>
TMOD排序(89H) D7:GATE D6:C/T D5:M1 D4:M0 D3:GATE D2:C/T D1:M1 D0:M0<br>D7~D4:定时器1 D3~D0:定时器0
M1,M0
M1:M0 工作方式选择位,对T0和T1的工作方式选择
M1=0,M0=0 :工作方式0 13位定时器/计数器
M1=0,M0=1;工作方式1 16位定时/计数器
M1=1 M0=0 工作方式2 8位自动重置定时/计数器
M1=1,M0=1 工作方式3 两个8位定时/计数器(只限T0)
C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作于定时方式。 <br>
GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。<br>
二.定时/计数器的控制寄存器TCON<br>
用于定时计数器启停 D7:TF1 D6:TR1 D5:TF0 D4:TR0 D3:IE1 D2:IT1 D1:IE0 D0:IT0
TF1/TF0
定时/计数器溢出标志位,当定时/计数器T1计满时,由硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬件电路自动清除。
TR1/TR0
定时/计数器T0(1)的启动位,可由软件置位或清零,当TR0(1)=1时启动;TR0(1)=0时停止。
IE1/IE0
子主题
IT1/IT0
子主题
7.2.4 定时/计数器的工作方式<br>
一.方式0<br>
13位定时/计数器方式<br>
计数值为N和初值X关系: X=8192-N /(12/fosc)<br>
上次计数完,计数器值为0,要重复计数需重置初值
二.方式1<br>
16位定时/计数器方式<br>
方式1的结构与方式0结构相同,只是把13位变成16位, 16位的加法计数器被全部用上。<br>
计数值为N和初值X关系: X=65536-N/(12/fosc)<br>
上次计数完,计数器值为0,要重复计数需重置初值。<br>
三.方式2<br>
8位自动重置定时/计数器<br>
计数值为N和初值X关系: X=256-N /(12/fosc)<br>
上次计数完,计数器自动重置初值。不需用户重置。从THX高8位给TLX低位<br>
7.2.5 定时/计数器的初始化编程及应用<br>
1.根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。<br>
2.根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器。<br>
3.根据需要开放定时/计数器中断(后面须编写中断服务程序)。<br>
4.设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。<br>
5.等待定时/计数时间到,到则执行中断服务程序;如用查询处理则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。<br>
7.3 串行接口<br>
7.3.1 通讯的基本概念<br>
一.并行通信和串行通信<br>
串行是两个端口一个发送一个接收
串行通讯按传输方向分类
单工
单向,A发送B接收
半双工
一根线A,B 都有发送和接收功能,同一时期需要选择是发送还接收
全双工
两根线,可同时发送同时接收
并行是多个端口互相对应一次发送一组数据。传输速率块
二.同步通信和异步通信<br>
串行异步通信方式
数据是一帧一帧的发送,一帧数据是从起始位开始到停止
包含起始位,数据位,奇偶校验位,停止位
串行同步通信方式
同步字符1 同步字符2 数据块 校验字符1 校验字符2
三.波特率<br>
波特率是指串行通信中,单位时间传送的二进制位数,单位为bps。
波特率(bps)=一个字符的二进制位数×字符/秒<br>
例如:每秒传送200个字符,每个字符1位起始位、8个数据位、1个校验位和1个停止位。则波特率为2200bps。<br>怎么算? 一个字符有11个二进位,一秒字符200.相乘得到2200bps
7.3.2 MCS-51单片机串行口功能与结构<br>
一.功能<br>
MCS-51单片机具有一个全双工的串行异步通信接口,可以同时发送、接收数据,发送、接收数据可通过查询或中断方式处理,使用十分灵活<br>
它有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:<br>方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。<br>方式1,8位的异步通信方式,通常用于双机通信。<br>方式2和方式3,9位的异步通信方式,通常用于多机通信。<br>
二 结构
MCS-51单片机串行口主要由发送数据寄存器SBUF、发送控制器TI、输出控制门、<br>接收数据寄存器、接收控制器RI、输入移位寄存器等组成 。<br>
TI=1 表示发送完成,=0表示没有发送
RI=1表示接收完成=0表示没有接收
TI和RI需要手动清零
从用户使用的角度,它由三个特殊功能寄存器组成:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器)<br>,串行口控制寄存器SCON和电源控制寄存器PCON。<br>
三.串行口控制寄存器SCON<br>
SCON(98H) D7:SM0 D6:SM1 D5:SM2 D4:REN D3:TB8 D2:RB8 D1:TI D0:RI
SM0 SM1
串口工作方式选择位有4种
0,0 方式0 移位寄存器方式 波特率 fosc/12
0,1 方式1 8位异步通讯方式 波特率可变
1,0 方式2 9位异步通讯方式 fosc/32 或 fosc/64
1,1 方式3 9位异步通讯方式 可变
SM2:多机通信控制位。 <br>
REN:允许接收控制位。当REN=1,则允许接收,当REN=0,则禁止接收。<br>
TB8:发送数据的第9位。 <br>
RB8:接收数据的第9位。 <br>
TI:发送中断标志位。 <br>
RI:接收中断标志位。 <br>
四.电源控制寄存器PCON<br>
PCON(87H) D7:SMOD 其余位空
SMOD=1时 波特率加倍
7.3.3 串行口的工作方式<br>
一.方式0----移位寄存器方式<br>
方式0通常用来外接移位寄存器,用作扩展I/O口。<br> RXD:串行数据 TXD:同步时钟。<br> 数据格式:低位在前,高位在后,长度8位,在SBUF中。<br> 波特率:fosc /12。<br>
(1)发送<br>
条件:TI=0<br>操作:SBUF=A (写数据到缓存)<br> 结果:发送完毕,自动TI置“1”。 <br>
(2)接收<br>
条件:RI=0<br> 操作:REN(SCON.4)置“1”<br> 结果:8位数据接收数据缓冲器SBUF中,同时,RI置“1” ,向CPU申请中断。 <br> 用户处理:A=SBUF(接收到的数据赋值给变量)<br>
二.方式1---- 8位异步通信方式<br>
TXD:发送数据端 RXD:接收数据端。<br> 数据格式: 1位起始位(0),SBUF中8位数据位(低位在前)和1位停止位(1)。<br>波特率: 2^SMOD×(T1的溢出率)/32 溢出率:只能用T1定时器产生频率<br>
(1)发送<br>
条件:TI=0<br> 操作:SBUF=A<br> 结果:发送完毕,TI置“1”。 <br>
(2)接收<br>
条件:RI=0,REN(SCON.4)置“1”。<br> 结果:8位数据接收数据缓冲器SBUF中,同时,RI置“1” ,向CPU申请中断。 <br> 用户处理:A=SBUF<br>
三.方式2和方式3<br>
TXD:发送数据端 RXD:接收数据端<br> 数据格式: 1位起始位(0),SBUF中8位数据位(低位在前)第9位TB8和1位停止位(1)<br>波特率: 2^SMOD×(T1的溢出率)/32
(1)发送<br>
条件:TI=0<br> 操作:先准备第9位TB8 ,执行SBUF=A<br> 结果:发送完毕,TI置“1”。 <br>
(2)接收<br>
条件:RI=0,REN(SCON.4)置“1”。<br> 结果:<br> SM2=0(多机通讯,第九位相当于数据来源标志),接收的前8位数据送SBUF,第9位送RB8,RI置“1” ,向CPU申请中断。<br> SM2=1,若接收的第9位为1,则前8位数据送SBUF,第9位送RB8,RI置“1” ,向CPU申请中断。<br> 用户处理:A=SBUF<br>
7.3.4 串行口的编程及应用<br>
1.串行口控制寄存器SCON位的确定。<br>
根据工作方式确定SM0、SM1位;<br> 方式2和方式3确定SM2位;<br> 如果是接收端,则置允许接收位REN为1;<br> 方式2和方式3发送数据,则应将发送数据的第9位写入TB8中。<br>
2.设置波特率。<br>
方式0:不需要对波特率进行设置。<br>方式2:设置波特率仅须对PCON中的SMOD位进行设置。<br>对于方式1和方式3:<br>PCON中的SMOD位设置<br>定时/计数器T1进行设置<br>定时/计数器T1----<font color="#ff0000">工作于方式2(8位可重置)</font><br>初值可由下面公式求得:<br>由于: 波特率=2SMOD×(T1的溢出率)/32<br>则: T1的溢出率=波特率×32/2SMOD<br>而T1工作于方式2的溢出率又可由下式表示:<br> T1的溢出率=fosc/(12×(256-初值))<br>所以:<br> <font color="#ff0000"> T1的初值=256 - fosc×2SMOD /(12×波特率×32)</font><br>
7.4 中断系统<br>
7.4.2 MCS-51单片机的中断系统<br>
一.中断源<br>
1.外部中断INT0 ,INT1<br>
外部引脚P3.2和P3.3输入,有两种触发方式:电平触发及跳变(边沿)触发。由特殊功能寄存器TCON来管理. <br>
TCON D7:TF1 D6:TR1 D5:TF0 D4:TR0 D3:IE1 D2:IT1 D1:IE0 D0:IT0
IT0(IT1)
外部中断0(或1)触发方式控制位。IT0(或IT1)被设置为0,电平触发方式;IT0(或IT1)被设置为1,边沿触发方式。
IE0(IE1)
外部中断0(或1)的中断请求标志位。 <br>
在边沿触发方式时,若第一个机器周期采样到P3.2(或P3.3)引脚为高电平,第二个机器周期采样到P3.2(或P3.3)引脚为低电平时,<br>由IE0(或IE1)置1,向CPU请求中断。 CPU响应后能够由硬件自动将IE0(或IE1)清零。<br>
在电平触发方式时,若P3.2(或P3.3)引脚为高电平,则IE0(IE1)清0,若P3.2(或P3.3)引脚为低电平,则IE0(IE1)置1,<br>向CPU请求中断;CPU响应后不能够由硬件自动将IE0(或IE1)清零。<br>
推荐使用下降沿触发中断方式
对于电平触发方式,只要P3.2(或P3.3)引脚为低电平,IE0(或IE1)就置1,请求中断,CPU响应后不能够由硬件自动将IE0(或IE1)清零。<br>如果在中断服务程序返回时,P3.2(或P3.3)引脚还为低电平,则又会中断,这样就会出一次请求,中断多次的情况。为避免这种情况,<br>只有在中断服务程序返回前撤消P3.2(或P3.3)的中断请求信号,即使P3.2(或P3.3)为高电平。通常通过下图所示外电路来实现。<br>
2.定时/计数器T0和T1中断<br>
当定时/计数器T0(或T1)溢出时,由硬件置TF0(或TF1)为“1”,向CPU发送中断请求,当CPU响应中断后,将由硬件自动清除TF0(或TF1)。
3.串行口中断<br>
MCS-51的串行口中断源对应两个中断标志位:串行口发送中断标志位TI和串行口接收中断标志位RI。无论哪个标志位置“1”,都请求串行口中断,到底是发送中断TI还是接收中断RI,只有在中断服务程序中通过指令查询来判断。串行口中断响应后,不能由硬件自动清“0”,必须由软件对TI或RI清“0”。
二.中断允许控制<br>
IE(A8H) D7:EA D6:空 D5:ET2 D4;ES D3:ET1 D2:EX1 D1:ET0 D0:EX0
EA:中断允许总控位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。 <br>
ET2:定时器/计数器T2的溢出中断允许位 <br>
ES:串行口中断允许位。 <br>
ET1:定时器/计数器T1的溢出中断允许位。 <br>
EX1:外部中断 INT1的中断允许位。 <br>
ET0:定时器/计数器T0的溢出中断允许位。 <br>
EX0:外部中断 INT0的中断允许位。 <br>
以上每项=1是,开启中断允许,=0屏蔽中断
三.优先权控制<br>
IP(B8H) D7:空 D6:空 D5 ;PT2 D4:PS D3:PT1 D2:PX1 D1:PT0 D0:PX0
PT2:定时器/计数器T2的中断优先级控制位,只用于52子系列
PS:串行口的中断优先级控制位。<br>
PT1:定时器/计数器T1的中断优先级控制位。 <br>
PX1:外部中断INT1的中断优先级控制位。 <br>
PT0:定时器/计数器T0的中断优先级控制位。<br>
PX0:外部中断INT0的中断优先级控制位。 <br>
默认的优先权顺序<br>
外部中断0<br>定时/计数器T0中断<br>外部中断1<br>定时/计数器T1中断<br>串行口中断<br>定时/计数器T2中断
通过中断优先级寄存器IP改变中断源的优先级顺序可以实现两个方面的功能:改变系统中断源的优先权顺序和实现二级中断嵌套。<br>
对于中断优先权和中断嵌套,MCS-51单片机有以下三条规定。<br>
(1)正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,一直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。
(2)正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。<br>
(3)CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。
五.中断响应<br>
1.51单片机中断响应的条件<br>
(1) 无同级或高级中断正在处理。<br>
(2) 现行指令执行到最后一个机器周期且已结束。
(3) 若现行指令为RETI或访问IE、IP的指令时,执行完该指令且紧随其后的另一条指令也已执行完毕。
2.51单片机中断响应过程<br>
(1) 根据中断请求源的优先级高低,对相应的优先级状态触发器置“1”。
(2) 保护断点,即把程序计数器PC的内容压入堆栈保存。
(3) 清内部硬件可清除的中断请求标志位(IE0、IE1、TF0、TF1)。
(4) 把被响应的中断服务程序入口地址送入PC,从而转入相应的中断服务程序执行。 <br>
各中断服务程序的入口地址见表<br>
外部中断0 对应C语言的0
定时/计数器0 对应1<br>
外部中断1 对应 2<br>
定时/计数器1 对应3<br>
串行口 对应4<br>
定时/计数器2(仅52子系列有) 对应5<br>
5 51单片机常用接口<br>
8.1 MCS-51单片机的最小系统<br>
所谓最小系统,是指一个真正可用的单片机最小配置系统。<br>对于单片机内部资源已能满足系统需要的,可直接采用最小系统。<br>MCS-51单片机根据片内有无程序存储器最小系统分两种情况。 <br>
主要包括晶振电路,复位电路,供电及输入输出
该最小系统的特点如下:<br><br>(1) P0、P1、P2、P3都可以作为用户I/O接口使用。<br>(2) 片内数据存储器有128B,地址空间为00H~7FH,没有片外数据存储器。<br>(3) 内部有4KB的程序存储器,地址空间为0000H~0FFFH,没有片外程序存储器EA 应接高电平。<br>(4) 可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源。<br>
8.2 存储器<br>
8.2.1 半导体存储器概述<br>
1. 只读存储器(ROM-Read Only Memory)<br>
2. 随机读写存储器(RAM-Random Access Memory)<br>
8.3 MCS-51单片机与数码管接口<br>
显示的基本原理:1.公共端有效(选通LED显示器)<br> 2.另一端送相应的编码(字段码)<br>
端口与字节从高到低的关系:dp,g,f,e,d,c,b,a
8.3.2 LED数码管显示器使用的主要问题<br>
1.译码方式<br>
译码方式是指由显示字符转换得到对应的字段码的方式。对于LED数码管显示器,通常的译码方式有硬件译码方式和软件译码方式两种。
1)硬件译码方式<br>
MC14495 <br>
共阴极一位十六进制数——7字段码转换芯片 <br>
用4位输出,控制数码管显示。可以节省端口占用
软件译码方式
软件译码方式就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码。<br>译码程序通常为查表程序,硬件线路简单,和单片机IO口直接连接就行。<br>
2.LED数码管的显示方式
1)静态显示方式<br>
每个数码管的段选线与一组I/O接口线相连。 <br>
1个数码管对应一组输出
2)动态显示方式<br>
所有数码管的段选线与一组I/O接口线并连在一起。 <br>
每个数码管的公共端由一根I/O线控制。<br>
利用人眼的视觉暂留
8.4 MCS-51单片机与键盘的接口 <br>
1. 键盘的基本原理<br>
键盘相当于端口检测输入。通过上拉电阻和按钮拉低端口电平
如果不用上拉电阻,可以先将端口先置1,后检测
2.抖动的消除<br>
硬件消抖
软件消抖
利用延时程序
利用状态字判断
3.键盘的分类<br>
独立式键盘
每个键占用一根并口线,键位多时占用并口线多。<br>一个键盘对应一个I/O端口
行列键盘-矩阵键盘<br>
键位分布在行列交叉点上。<br>
占用并口线少,键位越多越明显。<br>
矩阵键盘的处理:键位的编码和键位的识别。 <br>
1)键位的编码<br>
二进制组合编码
行线编码和列线编码组合 <br>
顺序排列编码<br>
编码=行首码+列号。 <br>
键位的识别<br>
两步:第一步是首先检测键盘上是否有键按下;第二步是识别哪一个键按下。 <br>
检测键盘上是否有键按下的处理方法 <br>
全扫描 <br>
识别键盘中哪一个键按下的处理方法 <br>
逐列扫描 <br>
8.5 MCS-51单片机与行程开关、晶闸管、继电器的接口<br>
光耦隔离
外围电路不能直接接到单片机I/O口,需要做隔离。
外围电路导通光耦激发内电路三极管导通,端口检测到高电平。
8.5.2 晶闸管与MCS-51单片机接口<br>
反并联的两个二极管:能够控制交流导通
8.5.3 继电器与MCS-51单片机接口<br>
通过驱动三极管来驱动线圈
8.5.4 蜂鸣器与单片机接口<br>
通过三极管驱动
通过改变蜂鸣器频率,可以有不同的声音。电子乐
6 单片机与D/A ,A/D转换器接口
9.1 MCS-51单片机与DAC的接口<br>
9.1.1 D/A转换器的基本原理<br>
D/A转换器是把输入的数字量转换为与之成正比的模拟量的器件,<br>其输入的数字量,输出的是模拟量。 <br>
如输入的数字量为D,输出的模拟量为VO,则有:<br>VO=DVREF <br>其中:VREF为基准电压。若D=dn-1*2^(n-1)+ dn-22n-2+ +d121+d020 <br>d表示二进制的第几位。D就是二进制转换为十进制的数 Vref是最大电压除以二进制数的最大值。(LSB)
D/A转换一般由电阻解码网络、模拟电子开关、基准电压、运算放大器等组成。按电阻解码网络的组成形式,<br>将D/A转换器分成有权电阻解码网络D/A转换器、倒T型电阻解码网络D/A转换器和开关树型电阻解码网络D/A转换器等。 <br>
倒T型电阻解码网络D/A转换器只用到两种电阻,精度较高,容易集成化,在实际中使用最频繁。<br>下面以倒T型电阻解码网络D/A转换器介绍D/A转换器的工作原理。 <br>
9.1.4.典型的D/A转换器芯片DAC0832<br>
DAC0832是采用CMOS工艺制成的电流型8位T型电阻解码网络D/A转换器芯片,是DAC0830系列的一种。<br>它的分辨率为8位,满刻度误差1LSB,线性误差0.1%,建立时间为1s,功耗20mW。<br>其数字输入端具有双重缓冲功能,可以双缓冲、单缓冲或直通方式输入。由于DAC0832与单片机接口方便,<br>转换控制容易,价格便宜,所以在实际工作中广泛使用。<br>
DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器和控制逻辑电路组成,内部结构如图所示。<br>
9.2 MCS-51单片机与ADC的接口<br>
1.计数型A/D转换器<br>
计数型A/D转换器由D/A转换器、计数器和比较器组成<br>
通过计时器与D/A转化器进行比较,比较值去与模拟输入对比。再驱动计数器增加或减少
2.逐次逼近型A/D转换器<br>
与计数型类似。只是将计数器换成逐次逼近寄存器
3.双重积分型A/D转换器<br>
双重积分型A/D转换器将输入电压先变换成与其平均值成正比的时间间隔,然后再把此时间间隔转换成数字量
9.2.2 典型的A/D转换器芯片ADC0808/0809<br>
ADC0808/0809是8位CMOS逐次逼近型A/D转换器,它们的主要区别是ADC0808的最小误差为±1/2LSB<br>,0809为±1LSB。采用单一+5V电源供电,工作温度范围宽。每片ADC0808有8路模拟量输入通道,<br>带转换起停控制,输入模拟电压范围0V~+5V .<br>
ADC0808/0809的工作流程<br>
1) 输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器译码从8路模拟通道中选通一路模拟量送到比较器。<br>2) 送START一高脉冲,START的上升沿使逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。<br>3) 当转换结束时,转换的结果送入到三态输出锁存器,并使EOC信号回到高电平,通知CPU已转换结束。<br>4) 当CPU执行一读数据指令,使OE为高电平,则从输出端D0~D7读出数据。<br>
根据读入转换结果的处理方法<br>,分为三种方式<br>
1) 延时方式:<br>
连接时EOC悬空,启动转换后延时100s,跳过转换时间后再读入转换结果。<br>
2) 查询方式: <br>
EOC接单片机并口线,启动转换后,查询单片机并口线,如果变为高电平,说明转换结束,则读入转换结果
3) 中断方式: <br>
EOC经非门接单片机的中断请求端,将转换结束信号作为中断请求信号向单片机提出中断请求,中断后执行中断服务程序,在中断服务中读入转换结果。
7 51单片机的其他接口
10.1 LCD1602与MCS-51单片机的接口<br>
LCD1602是216字符型液晶显示模块 <br>
内部结构包括 LCD控制器,LCD驱动器,LCD 显示器
80个字节的显示缓冲区DDRAM ,分两行,地址分别为00H~27H,40H~67H <br>
要在LCD的某个位置显示符号,只需将显示的符号的ASCII码存入DDRAM的对应位置。 <br>
10.1.3 LCD1602的指令格式与指令功能<br>
RS=0 R/W=0 :指令寄存器写入
RS=0 R/W=1 忙标志和地址计数器读出
RS=1 R/W=0 数据寄存器写入
RS=1 R/W=1 数据寄存器读出
清屏命令<br>
RS=0 RW=0 D7=0 D6=0 D5=0 D4=0 D3=0 D2=0 D1=0 D0=0
功能:清除屏幕,将显示缓冲区DDRAM的内容全部写入空格(ASCII20H)。<br>
光标复位命令 <br>
功能:光标复位,回到显示器的左上角。<br>
RS=0 RW=0 D7=0 D6=0 D5=0 D4=0 D3=0 D2=0 D1=1 D0=0
输入方式设置命令<br>
功能:设定当写入一个字节后,光标的移动方向以及后面的内容是否移动。<br>当I/D=1时,光标从左向右移动;I/D=0时,光标从右向左移动。<br>当S=1时,内容移动,S=0时,内容不移动。 <br>
RS=0 RW=0 D7=0 D6=0 D5=0 D4=0 D3=0 D2=1 D1=I/D D0=S
显示开关控制命令<br>
功能:控制显示的开关,当D=1时显示,D=0时不显示。<br>控制光标开关,当C=1时光标显示,C=0时光标不显示。<br>控制字符是否闪烁,当B=1时字符闪烁,B=0时字符不闪烁。<br>
RS=0 RW=0 D7=0 D6=0 D5=0 D4=0 D3=1 D2=D D1=C D0=B
光标移位命令<br>
功能:移动光标或整个显示字幕移位。<br>当S/C=1时整个显示字幕移位,当S/C=0时只光标移位。<br>当R/L=1时光标右移,R/L=0时光标左移。 <br>
RS=0 RW=0 D7=0 D6=0 D5=0 D4=1 D3=S/C D2=R/L D1=* D0=*
功能设置命令<br>
功能:设置数据位数,当DL=1时数据位为8位,DL=0时数据位为4位。<br>设置显示行数,当N=1时双行显示,N=0时单行显示。<br>设置字形大小,当F=1时为5×10点阵,F=0时为5×7点阵。<br>
RS=0 RW=0 D7=0 D6=0 D5=1 D4=DL D3=N D2=F D1=* D0=*
设置字库CGRAM地址命令<br>
功能:设置用户自定义CGRAM的地址 <br>
显示缓冲区DDRAM地址设置命令<br>
一般默认
读忙标志及地址计数器AC命令<br>
不常用读,默认
10.1.4 LCD1602的编程与接口<br>
(1) 清屏。清除屏幕,将显示缓冲区DDRAM的内容全部写入空格(ASCII20H)。 <br>
(2) 功能设置。设置数据位数,设置显示行数 。设置字形大小 . <br>
(3) 开/关显示设置。控制光标显示、字符是否闪烁等。 <br>
(4) 输入方式设置。设定光标的移动方向以及后面的内容是否移动。 <br>
10.2 温度传感器DS18B20与MCS-51单片机的接口<br>
DS18B20是DALLAS公司生产的单总线数字温度传感器芯片,具有3引脚TO-92小体积封装形式;<br>温度测量范围为-55℃~+125℃;可编程为9~12位A/D转换精度;用户可自设定非易失性的报警上下限值;<br>被测温度用16位补码方式串行输出;测温分辨率可达0.0625℃;其工作电源既可在远端引入,<br>也可采用寄生电源方式产生;多个DS18B20可以并联到3根或两根线上,<br>CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少。 <br>
10.2.2 DS18B20的外部结构<br>
DQ:数字信号输入/输出端。<br>GND:电源地。<br>VDD:外接供电电源输入端(在寄生电源接线方式时接地)。<br>
10.2.3 DS18B20的内部结构<br>
温度传感器,高温触发器TH,低温触发器TL,配置寄存器<br>得到的数据放入高速缓存存储器中。再通过单总线接口与外界通讯
2.高速暂存存储器<br>
高速暂存存储器由9个字节组成 <br>
存储器是16位,但温度只有12位。高4位不用
+125<br>
0000 0111 1101 0000<br>
07D0H<br>
+10.125<br>
0000 0000 1010 0010<br>
00A2H<br>
10.2.4 DS18B20的温度转换过程<br>
根据DS18B20的通信协议,主机控制DS18B20完成温度转换必须经过三个步骤:<br>每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,<br>最后发送RAM指令,这样才能对DS18B20进行预定的操作<br>
常用指令码
跳过ROM
0CCH
忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作<br>
温度变换<br>
44H
启动DS18B20进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中<br>
读暂存器<br>
0BEH
读内部RAM中9字节的内容<br>
时序可分为初始化时序、读时序和写时序。<br> 初始化:CPU将数据线下拉持续时间480s-960s之间,然后释放,DS18B20收到信号后等待15~60s左右,若初始化成功,会在15-60us之后产生一个低电平信号,该信号会持续60us到240us。<br>
读时序:读时序分为读“0”时序和读“1”时序两个过程。当要读取DS18B20的数据时,我们需要将总线拉低,并保持1s的时间,然后将总线拉高,此时需尽快读取。从拉低到读取引脚状态的时间不能超过15s。 <br>
写时序:写时序分为写“0”时序和写“1”时序两个过程。DS18B20写“0”时序和写“1”时序的要求不同,当要写“0”时,单总线要被拉低至少60s,以保证DS18B20能够在15s到45s之间正确地采样I/O总线上的“0”电平;当要写“1”时,单总线被拉低之后,在15s之内就得释放单总线。 <br>
10.3 日历时钟芯片DS1302与MCS-51单片机接口<br>
10.3.1 DS1302简介
DS1302时钟芯片内含有一个实时时钟/日历和31个字节静态RAM,实时时钟/日历能提供2100年之前的秒、分、时、日、日期、月、年等信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24小时或12小时格式。内部含有31个字节静态RAM,可提供用户访问。<br> DS1302与单片机之间能简单地采用同步串行的方式进行通信,使得管脚数量最少,与单片机通信只需RES(复位线)、I/O(数据线)和SCLK(串行时钟)三根信号线; <br>
10.3.2 DS1302引脚功能 <br>
引脚功能如下。<br>X1、X2:32.768kHz晶振接入引脚。<br>GND:地。<br> :复位引脚,低电平有效。<br>I/O:数据输入/输出引脚,具有三态功能。<br>SCLK:串行时钟输入引脚。<br>VCC1:电源1引脚。<br>VCC2:电源2引脚。 <br>
10.3.3 DS1302的寄存器及片内RAM<br>
DS1302有一个控制寄存器、12个日历、时钟寄存器和31个RAM。<br>
1) 控制寄存器<br>
D7:1 D6:RAM/CK D5 :A4 D4:A3 D2:A1 D1:A0 D0:RD/W
D7:固定为1。<br>
D6:RAM/CK 位,片内RAM或日历、时钟寄存器选择位。<br>
D0:读写位,0为写,1为读。<br>
D5~D1:地址位,用于选择进行读写的日历、时钟寄存器或片内RAM。<br>
寄存器 名称
秒寄存器
D7=1 D6=0 D5=0 D4=0 D3=0 D2=0 D1=0 D0=1或0
分,小时,等寄存器查表可得
日历,时钟寄存器格式
秒寄存器
取值范围0~59
D7=CH D6~D4:秒的十位 D3~D0:秒的个位
分,时,日等寄存器查表可得
4) DS1302的输入/输出过程<br>
无论是命令字还是数据,一个字节传送时都是低位在前,高位在后。<br>
10.4 I2C总线芯片与MCS-51单片机接口<br>
10.4.1 I2C总线简介<br>
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。主要特点有: <br>
(1) 总线只有两根线,即串行时钟线(SCL)和串行数据线(SDA) <br>
(2) 每个连接到总线上的器件都有一个用于识别的器件地址 <br>
(3) 同步时钟允许器件以不同的波特率进行通信 <br>
(4) 同步时钟可以作为停止或重新启动串行口发送的握手信号。 <br>
(5) 串行的数据传输位速率在标准模式下可达100kb/s,快速模式下可达400kb/s,高速模式下可达3.4Mb/s。 <br>
(6) 连接到同一总线的集成电路数只受400pF的最大总线电容的限制。<br>
2.I2C总线的基本结构<br>
I²C 两个线SDA数据 SCL时钟
可以连不通的器件
3.I2C总线的信息传送<br>
当I2C总线没有进行信息传送时,数据线(SDA)和时钟线(SCL)都为高电平。<br>当主器件向某个器件传送信息时,首先应向总线传送开始信号,然后才能传送信息,<br>当信息传送结束时应传送结束信号,开始信号和结束信号的规定如下。<br><font color="#ffff00">开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。<br>结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。</font><br>开始信号和结束信号之间传送的是信息,信息的字节数没有限制,但每个字节必须为8位,高位在前,低位在后。<br>数据线SDA上每一位信息状态的改变只能发生在时钟线SCL为低电平的期间,<br>因为SCL为高电平的期间SDA状态的改变已经被用来表示开始信号和结束信号。<font color="#ffff00">低电平传输数据</font><br>
主器件每次传送的信息的第一个字节必须是器件地址码,第二个字节为器件单元地址,<br>用于实现选择所操作的器件的内部单元,从第三个字节开始为传送的数据。 <br>
D7~D4:器件类型码 D3~D1:片选 D0:R/W
从器件在接收到起始条件后,每接收一个地址编码或数据后都会回送一个低电平的应答信号 <br>
4.I2C总线读、写操作<br>
1) 当前地址读<br>
开始S 控制码(R/W=1)A 数据1A数据2 A 结束P
A是应答,控制码是读和写控制
2) 指定单元读<br>
开始S 控制码R/W=0 A 器件单元地址 A S 控制码 R/W=1 A 数据1 A 数据2 A 结束P
3) 指定单元写
开始S 控制码R/W=0 A 器件单元地址 A 数据1 A 数据2 A 结束P
10.4.2 I2C总线EEPROM芯片与单片机的接口<br>
1.串行EEPROM电路CAT24WCXX系列概述<br>
美国CATALYST公司,包含9种芯片,容量分别为1~256K位。 <br>
CAT24WC01/02/04/08/16的引脚<br>
SCL:串行时钟线。<br>
SDA:串行数据线。<br>
A0、A1、A2:芯片地址输入端。<br>
WP:写保护。<br>
VCC:电源线。<br>VSS:地线。
3.CAT24WC01/02/04/08/16的器件地址<br>
型号CAT24WC01 控制码:1010 片选 :A2 A1 A0 读写: 1/0 总线访问的器件:最多8个
4.CAT24WC01/02/04/08/16的写操作<br>
1) 字节写<br>
写8位数据
开始 器件地址 读写位 应答信号 器件内单元地址 应答信号 数据 应答信号 结束
2) 页写<br>
可以写多个数据
开始 器件地址写 读写位 应答信号 器件内单元地址 应答信号 数据1 应答信号 数据2 应答信号... 结束
5.CAT24WC01/02/04/08/16的读操作<br>
1) 当前地址读<br>
开始 器件地址 读写位 应答信号 数据费应答信号 结束
2) 随机地址读<br>
开始 器件地址写 读写位 应答信号 器件内单元地址 应答信号 开始 器件地址读 读写位 应答信号 数据 非应答信号 结束
3) 顺序地址读<br>
器件地址读 读写位 应答信号 数据1 应答信号 数据2 应答信号 ... 非应答信号 结束
0 条评论
下一页