总线与接口(单片机)基础知识点+考点
- 你好,这里是不会打代码的大学程序猿,以下学习整理内容如果有错误的地方麻烦指出哦!peace&love
(一)单片机基础概念
1.单片机应用系统
- 单片机应用系统以单片机为核心,配以输入、输出、显示、控制等外围电路和软件【即硬件+软件】,能实现一种或多种功能的实用系统。
单片机应用系统是由硬件和软件组成的,硬件是应用系统的基础,软件则是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可。
2.单片机
- 单片机又称为微控制器(MCU),是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU、存储器(包括 RAM 跟 ROM )、基本输入 /输出接口电路(Input/Output ,简称 I/O 接口)、定时/计数器和中断系统 等,都制作在一块集成芯片上,构成一个完整的微型计算机。
01.CPU
- CPU:8 位,由运算器和控制器组成,具有运算和控制的功能 。
011.控制器
- 控制器由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成。
它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。
012.运算器
- 运算器:由8位算数逻辑单元(ALU)、累加器(ACC)、*程序状态字(PSW)【也称:状态寄存器】 *、通用寄存器组等构成
其中 程序状态字PSW
- 存放两类信息:1.体现当前指令执行结果的各种状态信息,即状态标志;2.控制信息,即控制状态
- 程序状态字的位的定义下表所示(了解+熟悉):
· CY(PSW.7):进位标志位。CY是PWS中最常用的标志位,其功能有两个:一是存放算术运算的进位标志,在进行加或减运算时,如果操作结果最高位有进位或借位,则CY由硬件置“1”,否则被清“0”;二是在位操作中,作累加位使用。位传送、位与位或等位操作,操作位之一固定是进位标志位。
· AC(PSW.6):辅助进位标志位。在进行加或减运算中,若低4位向高4位进位或借位,AC由硬件置“1”,否则被清“0”。在BCD码调整中也要用到AC位状态。
· F0(PSW.5):用户标志位。这是一个供用户定义的标志位,需要利用软件方法置位或复位,用来控制程序的转向。
· RS1和RS0(PSW.4,PSW.3):工作寄存器组选择位。它们被用于选择CPU当前使用的通用寄存器组。这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前通用寄存器组。但当单片机上电或复位后,RS1=0, RS0=0。
通用工作区的寄存器共有4组,选择寄存器中的一个组/对应关系由RS1和RS0决定,其 选择定义 如下表所示,其 结构位置区域 如下第二张图表示。
· OV(PSW.2):溢出标志位。在带符号数加减运算中,OV=1表示加减运算超出了累加器A所能表示的符号数有效范围(-128 ~ +127),即产生了溢出,因此运算结果是错误的;OV=0表示运算正确,即无溢出产生。
在乘法运算中,OV=1表示乘积超过255,即乘积分别在B与A中;否则,OV=0,表示乘积只在A中。
在除法运算中,OV=1表示除数为0,除法不能进行;否则,OV=0,除数不为0,除法可正常进行。
· F1(PSW.1):保留未使用。
· P(PSW.0):奇偶标志位。P标志位表明累加器A中内容的奇偶性,如果A中有奇数个“1”,则P置“1”,否则置“0”。凡是改变累加器A中内容的指令均会影响P标志位。此标志位对串行通信中的数据传输有重要的意义----在串行通信中常采用奇偶校验的办法来校验数据传输的可靠性。
02.存储器
- 由 (片内/外)数据存储器 RAM; (片内/外)程序存储器 ROM 组成。
– 片内RAM高128单元安排有21个特殊功能寄存器,其他空闲单元用户不能使用。在可寻址的21个特殊功能寄存器中,有11个寄存器不仅可以字节寻址,也可以进行位寻址。
(掌握下面拓展)
【拓展:另外还有一个不可寻址的特殊功能寄存器,即==**程序计数器PC**==,它不占据RAM单元,为硬件,在物理上是独立的。
PC是程序计数器,它是一个16位寄存器,专门用来产生和存放下一条需要执行的指令的地址。实际上它是指令地址寄存器。其寻址能力为64K字节。
PC每输出一次代码,它的内容自动加1。因此,称它为程序计数器,PC在物理上是一个独立的寄存器,不属于内部数据存储器。
PC每输出一次地址,就指向程序存储器的一个单元,CPU自动取出一个字节的指令代码而后执行。PC中内容一次次自动加1,指令就一条条被取出并执行。】
– 在内部RAM低128单元中,通用寄存器占去了32个单元,位寻址区占去了16个单元,剩下80个单元,这就是供用户使用的一般RAM区,其单元地址为30H~7FH。
其中,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同。(了解就行) 单片机C51数据类型和存储器类型
data:固定指前面0x00h-0x7fh的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)。
xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。
pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。
03.I/O口
- 4 个 8 位的 I/O 口 P0 、 P1 、 P2 、 P3,
每个 I/O 口既可以按位操作使用单个引脚,也可以按字节操作使用 8 个引脚。
•P0 是双向口,必须外接上拉电阻才能有高电平输出。常作为低八位地址和数据总 线 ;
•P1~P3 口是准双向口,作输出口输出时无需上拉电阻,作为输入口时,应先写“1” 。
•P1 口只能作为通用 I/O 端口使用
•P2 口常作为高八位地址总线
•P3 口具有第二功能(如下)
04.定时/计数器【详细】
- 有**两个 16 位**的定时/计数器,实现定时或计数功能。
05.中断控制系统【详细】
- 5 个中断源(外中断 2 个,定时/计数中断 2 个,串行中断 1 个)
06.单片机上的信号管脚
(二)中断系统
1.简介
中断系统是什么?中断呢?
- 51系列中断有五个中断源:两个外部中断+两个定时器+一个串口。
- 中断系统——中断装置+中断处理程序,是计算机实现中断的重要组成部分。用途:处理一些紧急事务,避免计算机报错而崩溃;对时间要求紧迫的任务作出实时处理
- 中断——计算机运行过程中出现某些意外,需主机干预,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行的过程。
( 如图为中断系统的机构图)
2.中断系统内部寄存器【详细】
IP优先级 | 中断源 | 地址 |
---|---|---|
1 | 外部中断 0(/INT0) | 0003H~000AH |
2 | 定时器 0 (T0) | 000BH~0012H |
3 | 外部中断 1(/INT1) | 0013H~001AH |
4 | 定时器 1 (T1) | 001BH~0022H |
5 | 串行口 (TI/RI) | 0023H~002AH |
※0000H~0002H这三个字节是复位
下图为中断三个寄存器及其对应 控制位
TCON: 控制寄存器
IE: 中断允许寄存器
IP: 中断优先寄存器
下图为 中断控制功能图
由图:
- 外部中断有低电平触发和下降沿触发两种方式。通过定时器控制寄存器TCON中的IT0、IT1来选择和设定。
IT1为 中断触发方式控制位,当IT1 = 0,外部中断1控制为电平触发方式。当IT1 = 1,外部中断1控制为下降沿触发方式 - 接收RI 发送TI
ES是串行口中断允许位。=1允许串行口中断,=0,禁止串行口中断
如果ES=0的,则TI 和RI为1,都不会去执行串口中断函数。
TI是发送标志位。发送完成,该位置1,跟ES没关系。
RI是接收标志位,接收完成,该位置1,也跟 ES没直接关系 - 在中断优先级寄存器——IP寄存器中
PX0:外部中断0优先级控制位。PX0=1,设定外部中断0为高优先级中断;PX0=0,设定外部中断1为低优先级中断。
PT0:T0中断优先级控制位。PT0=1,设定定时器T0为高优先级中断;PT0=0,设定时器T0为低优先级中断。
PX1:外部中断1优先级控制位。PX1=1,设外部中断1为高优先级中断;PX1=0,设定外部中断1为低优先级中断。
PT1:T1中断优先级控制位。PT1=1,设定定时器T1为高优先级中断;PT1=0,设定定时器T1为低优先级中断。
PS:串行口中断优先级控制位。PS=1,设定串行口为高优先级中断;PS=0,设定串行口为低优先级中断。
【tips:MCS-51单片机复位后,IP寄存器低5位全部被清0,将所有中断源设置为低优先级中断。优先就是高优先级可以打断低优先级,而低优先级却不能打断高优先级。当中断优先级相同时,遵从先来后到的原则。】
3.中断程序的 C语言格式:
n:中断编号,取值范围为 0~4
m: 工作寄存器组号(如不声明,默认为 0)
4.中断例题
//例题
#include <reg51.h>//包含 51 单片机寄存器定义的头文件
#include <intrins.h>//循环位移的头文件
#define uint unsigned int//宏定义
void delay(uint z);//延时函数声明
void main()
{
EA=1;//开总中断
EX0=1;//开中断 0
IT0=1;//设置中断 0 的触发方式为下降沿触发
EX1=1;//开中断 1
IT1=1;//设置中断 1 的触发方式为下降沿触发
while(1)
{
P0=0x00;//让八个灯全部点亮
}
}
void int0() interrupt 0//中断函数,中断函数不用在主函数之前进行声明
{
uint a,b;
b=P0;//保护现场
P0=0x0f;//点亮前面 4 个灯
for(a=0;a<8;a++)
{
P0=~P0;
delay(1000);
}
P0=b;//还原现场
}
void int1() interrupt 2
{
uint a,b;
b=P0;//保护现场
P0=0xfe;//点亮第 1 个灯
for(a=0;a<16;a++)
{
delay(1000);
P0=_crol_(P0,1);
}
P0=b;//还原现场
}
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
1.优先就是高优先级可以打断低优先级,而低优先级却不能打断高优先级。当中断优先级相同时,遵从先来后到的原则。
2.程序运行子程序和中断时,注意==保护现场与还原现场==。
3.五个中断源编号为分别0,1,2,3,4,则有 interrupt 后面的数字表示为编号,即用的是哪一个中断源
- 在单片机运行程序进入中断程序时需要 保护现场;在退出中断程序时要 恢复现场,
因为 在单片机运行程序时 一般要用到 多个寄存器,特别是 累加器,状态寄存器 等等,中断程序 是属于一种处理 突发性 事件的程序,在正常运行程序任意时刻 都可以 插入进来的 程序。
所有在进入中断程序时可能如累加器保存着数据,这时中断程序也要用累加器,如果不保存到退出中断时,原来的数据已经变了,这样就不知会发生什么状况,发生错误。
保护现场 就是 进入中断程序 保存 –需要用到的 寄存器 的 数据,
恢复现场 就是 退出中断程序 恢复 –保存 寄存器 的 数据
5.中断三种情况
- 全局中断就是在运行程序的任何一部分都可以立即执行中断服务,如果是在程序的中断才添加开放中断指令就是说有条件满足中断的时候,也只能在执行允许中断的指令后才执行中断服务。
- 外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备 的中断请求。
- 内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算 溢出、单步中断等)所引起的中断。
6.中断处理事务过程
答:过程为:保存现场-转中断处理程序进行中断处理-中断返回
7.中断保存地址
中断保存地址为起始地址的下一位
例:3字节 0x001的 中断保存地址 为 0x004
(三)定时/计数器
详细讲解 (打开链接) 定时/计数器【表述有点麻烦】
1.定时/计数器工作原理图
单片机中,脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1,只要相邻两个计数脉冲之间的时间间隔相等,则计数值就代表了时间的流逝。
计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件
- 两个 定时/计数器T0和T1
T0 由 TH0 和 TL0 组成,T1 由 TH1 和 TL1 组成。每个寄存器均可被单独访问,因此可
以被设置为 8 位、13 位或 16 位计数器使用
2.两个寄存器
【tips:TMOD中的M1M0用来选择定时器4种工作模式,一定要联系中断(中断的内部图)来理解哦】
- 中断 控制系统 TCON 的寄存器位
例如:
IT0:外部中断0 触发方式控制位,1表示边沿触发,0表示电平触发
IE0:外部中断0 中断申请标志位,1表示有中断申请
EX0:外部中断0 允许位,1表示允许外部中断0的中断申请
3.定时/计数器的初始值的计算
例 1:用 T1 工作方式 1 实现 1 秒延时函数,晶振频率为 12MHz。
解:由于晶振频率为 12MHZ,所以机器周期为 1 us
方式 1 采用 16 位计数器,所以最大计数值
M= 216= 65536
其最大定时时间为:65536*1us=65.536ms
可选择定时时间为 50ms,1s/50ms=20,即还需要循环 20 次
设计数初值为 X,则 ,
65536-X)*10-6 = 0.05 s ,算出 X=15536
所以:TH1=15536/256;
TL1=15536%256;
4.定时/计数器例题
/**************************************************************************
P0.0 接 LED,用 T1 方式 1 实现 LED 灯的闪烁,亮 1s,灭 1s
**************************************************************************/
#include<reg51.h>//包含 51 单片机寄存器定义的头文件
#define uchar unsigned char //定义 uchar 代替 unsigned char
sbit LED=P0^0;
void main()
{
TMOD=0x10;//设工作方式为 T1 定时,且用方式 1
TH1=(65536-50000)/256;//赋初值
TL1=(65536-50000)%256;
EA=1;//开总中断
ET1=1;//开定时计数器 T1
TR1=1;//启动 T1
uchar counter=0;//从 0 开始累计中断次数
while(1);//无限循环等待中断
}
void time1() interrupt 3
{
counter++;//中断次数自加 1
if(counter==20)//若计数满 20 次,即计时满 1s
{
LED = ~LED;
counter = 0;// counter 清零,重新计数
}
TH1=(65536-50000)/256;//重新赋初值
TL1=(65536-50000)%256;
}
/********************************************************************
中断初始化步骤:
(1)对 TMOD 赋值,以确定 T0 和 T1 的工作方式。
(2)计算初值,并将其写入 TH0、TL0 或 TH1、TL1。
(3)中断方式时,则对 IE赋值,开放中断。
(4)使 TR0 或 TR1 置位,启动定时/计数器定时或计数。
******************************************************************/
(四)晶振(晶体的震荡频率)
- 机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。
- 震荡周期:也称时钟周期,是指为单片机提供时钟信号的震荡源的周期,一般实验板上为11.0592MHZ,12MHZ和24MHZ用的也比较多。定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。
- 指令周期:它是指CPU完成一条操作的所需的全部时间。包括取指令、分析指令和执行指令所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。MCS-51系统中,有单周期指令、双周期指令和四周期指令。
三者之间的关系是:一条指令周期包括若干个机器周期,一条机器周期又包括若干个时钟周期。
整理,得(必考):
- 震荡周期=时钟周期
- 1 * 时钟周期 = 1 / 单片机外接晶振
- 1 * 机器周期 = 12 * 时钟周期
- 1 * 指令周期 = N * 机器周期 , N>=1
例如:12MHz的晶振,它的时间周期就是1/12 us
例题:若晶振频率为6MHz,则一个机器周期为2us,所以最短定时时间=2us
(五)led数码管
1.常用LED
- 常用的 LED 显示器为 8 段(或 7 段,8 段比 7 段多了一个小数点“dp” 段)。有共阳极数码管和共阴极数码管两种。
其中,共阳极数码管是指八段数码管的八段发光二极管的阳极(正极)都连在一起,而阴极对应的各段可分别控制,公共端 COM 接高电平;反之,共阴极数码管你懂得。
2.显示方式
- 显示方式有静态显示和动态显示两种。
- 静态显示优点是占用 CPU 时间少,显示便于监测和控制,亮度高。缺点是硬件电路比较复杂,成本较高
动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
3.led接线
- 8个数码管LED需要多少条线相连?答:16条
解释:8数据线并行+8控制线=16条(每个数码管需要一个控制线+并行的数据线)
(六)常见问答
- 矩阵键盘扫码有----逐行扫描 隔行扫描 电平反转 三种
- 单片机复位:rst中加两个以上的高电平复位
- 单片机的IO口为什么加上拉电阻?
答:单片机IO口如果设置为输入状态,如果该端口外部悬空,则内部无法判断其为高或低电平,所以接个上拉电阻,使其处于悬空状态时,能有个高电平。 - MCS-51单片机串行口是——全双工
- 51单片机串行口电平采用 TTL电平
解释:51单片机有串口,但不能直接用RS232串囗来通信,需经Max232芯片进行电平转换 将上位机送来的232电平转换成TTL电平,同时把单片机发送的TTL信号电平转成RS232电平送给上位机 - 总线分类:地址总线,数据总线,控制总线
- 单片机如何复位?(三种)
答:一般为:rst中加两个以上的高电平复位,主要分为以下三种:
上电复位:单片机在接通电源后,会复位一次
硬件复位:通过reset引脚产生的复位
软件复位:让程序再次从0000H开始执行
※0000H~0002H这三个字节是复位地址 - 138芯片:输入3输出8的译码器为___38译码器___
- 置0地址用什么寄存器 ——pc
- 机器指令是用== 二进制代码== 表示的,能被 计算机直接执行/识别
- IOC总线:数据线+时钟线(单向)
- 18B20总线为 单总线
- 12位地址总线,内存容量多大?4k
解释:计算机的最小存储单元为一个字节byte ,寻址对应的就是内存单元。
寻址一个内存单元 所对应的 内存大小 为1个byte。12位地址总线可以寻址 212 个内存单元,
即212byte,而 1024byte = 210byte=1k。所以, 地址总线12位最大可寻址的内存大小为 4k - 某种存储器芯片是8KB*4/片,那么它的地址总线有多少根?----13根
解释:1KB = 210 要10根, 则8KB = 2 3 *1 KB = 213 要10+3=13根。