接口与总线 考点整理

说明

  • 以下内容为个人整理,答案也是个人回答,不一定对,所以你对答案有任何问题,都欢迎与我讨论

Q01:51单片机P0、P1、P2、P3口功能作用?

答:
  • P0可做地址口的低8位也可以做数据口I/O口
  • P1可做普通的I/O口
  • P2除了做I/O口,也是作为地址口的高8位(总共16位)
  • P3 既可以是普通IO口,也可以是外部中断定时外部输入的端口

Q02:当串口发送一个数据或接收数据时,哪两个位会置位?

答:
  • 接收数据时,RI 会置位
  • 发送数据时,TI 会置位

Q03:51单片机的累加器是什么?

答:

ACC


Q04:当晶振频率为12MHz,定时器的频率为多少?

答:

频率为1Mhz

说明:

机器频率 = 晶振频率/12


Q05:LED的显示分为几种?

答:

两种,动态扫描静态扫描

说明:

动态扫描中LED的调度是放在定时器中


Q06:51单片机内存划分

答:

低128个字节

  • 00H~1FH(32字节):寄存器区,四组寄存器区,一组有8个寄存器
  • 20H~2FH(16字节 128位):位寻址区
  • 剩下:普通内存

高128个字节

  • 特殊功能寄存器

Q07:ex0、ex1、et0的含义

答:
ex0 = 1; //允许外部中断0
ex1 = 1; //允许外部中断1
et0 = 1; //允许定时器0中断
说明:

在这里插入图片描述
上图为IE(中断允许寄存器)

  • EA:中断总控制位
    • EA=1:CPU开放所有中断
    • EA=0:CPU禁止所有中断
  • ES:串行口中断控制位。
    • ES=1:允许串行口中断
    • ES=0:屏蔽串行口中断
  • ET1:定时/计数器T1中断控制位
    • ET1=1:允许T1中断
    • ET1=0:禁止T1中断
  • EX1:外部中断1中断控制位
    • EX1=1:允许外部中断1中断
    • EX1=0:禁止外部中断1中断
  • ET0:定时/计数器T0中断控制位
    • ET0=1:允许T0中断
    • ET0=0:禁止T0中断。
  • EX0:外部中断0中断控制位
    • EX0=1:允许外部中断0中断
    • EX0=0:禁止外部中断0断。

Q08:程序存储器的作用?

答:

程序存储器存放的是程序代码,也可以存放常量数据


Q09:波特率的概念?

答:

单片机或计算机在串口通信时的速率。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如数据传送速率为240b/s,而每个字符格式包含10位(1个起始位,1个停止位,8个有效数据位),这时的波特率为240 baud (波特),比特率(有效数据位的传送速率)为240*10=2400 bps(比特每秒)

说明:

波特率是指每秒中传输的字节数——(错)


Q10:堆栈和队列的特点?

答:

堆栈是先进后出
队列是先进先出


Q11:自然优先级与优先级判断,场景如下

场景1:优先级相同的三个同学A,B,C同时需要打饭,谁先打饭?
场景2:同学A正在打饭,与同学A相同优先级但是自然优先级比同学A高的同学B是否能打断同学A的打饭?
场景3:同学A正在打饭,比同学A优先级更高的同学B能否打断同学A的打饭?

答:

场景1:自然优先级高的先打饭 ( O(∩_∩)O哈哈~,没在纠结ABC吧)
场景2:不能
场景3:可以喔

说明:

高优先级可以打断低优先级
自然优先级只有在相同优先级之间比较才有意义


Q12:51单片机哪个寄存器是不能直接操作,不可寻址?

答:

pc(程序计数器)


Q13:在读取外部电平时,需要做什么?

答:

首先要做的是写入1(高电平),然后再读


Q14:通信方式有哪些?

答:

单工、半双工、全双工


Q15:编译的目的是什么?

答:

获取二进制代码文件


Q16:若要打开全局中断,需要操作哪个位?

答:

EA


Q17:假如现在有一个3字节的程序程序正在执行0x100,中断来时,保存的地址是多少?

答:

保存的地址是下一条指令的地址 0x101


Q18:51单片机是几位机?

答:

51单片机是8位的

说明:

arm是32位的


Q19:51单片机的8位模式和16位模式下定时器最大定时时间?

答:

在晶振频率为12MHz前提下:

  • 8位模式下的情况:28 * 1us = 256us
  • 16位模式下的情况:216 * 1us = 65536us
说明

机器频率 = 晶振频率 / 12
机器周期(脉冲周期) = 1/机器频率


Q20:状态寄存器

答:

程序状态字寄存器PSW(program status word)是计算机运算器的一部分
PSW用来存放两类信息

  • 一类是体现当前指令执行结果的各种状态信息,如有无进位(CY位),有无溢出(OV位)等
  • 另一类是存放控制信息,如允许中断(IF位),跟踪标志(TF位)等

Q21:51单片机掉电不失的是哪个段?

答:

@code

说明:

一共有五段:CODEBITIDATADATAXDATA


Q22:51单片机五个中断入口地址是哪个?

答:
  • 0003H:外中断0
  • 000BH:定时器0
  • 0013H:外中断1
  • 001BH:定时器1
  • 0023H:串口中断入口
说明:

前三个字节是复位


Q23:如何选中四个寄存器组中的某一组?

答:

依靠RS1RS0这两位


Q24:当P0口作为IO口时上面那个模式管关闭,只剩下下面那个模式管,那么怎么输出1(高电平)?

答:

外接上拉电阻,否则无法稳定输出1


Q25:晶振频率为6MHz,周期为多少?

答:

2us

说明

机器频率 = 晶振频率/12
机器周期 = 1/机器频率


Q26:三种总线是什么?

答:
  • 地址总线
  • 数据总线
  • 控制总线

Q27:如何设置单片机优先级的寄存器?

答:

IP(Interrupt Priority),将相应的位 置1

说明

在这里插入图片描述
上图为中断优先级寄存器IP的控制位

  • PS:串行口 中断优先级控制位
  • PT1:定时器/计数器T1 中断优先级控制位
  • PX1:外部中断1 中断优先级控制位
  • PT0:定时器/计数器T0 中断优先级控制位
  • PX0:外部中断0 中断优先级控制位

Q28:计算机能直接识别的语言是什么?

答:

二进制语言(机器语言)


Q29:什么是振荡周期、机器周期、指令周期?

答:

振荡周期

  • 也称为时钟周期,是指单片机提供时钟信号的振荡源的周期,一般实验板上为11.0592MHZ,12MHZ和24MHZ用的也比较多
  • 是计算机中最基本的、最小的时间单位

机器周期

  • 一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期
  • 在一个机器周期内,CPU可以完成一个独立的操作

指令周期

  • 它是指CPU完成一条操作的所需的全部时间
  • 包括取指令、分析指令和执行指令所需的全部时间
  • 每条指令执行时间都是有一个或几个机器周期组成,单片机中有单周期指令、双周期指令和四周期指令
说明

三者之间的关系:一条指令周期包括若干个机器周期,一条机器周期又包括若干个时钟周期


Q30:什么是中断?

答:

中断是指中央处理器CPU正在执行程序,处理某件事情的时候,外部发生了某一事件,请求CPU马上处理,CPU暂时中断当前的工作,转入处理所发生的事件,处理完以后,再返回到原来被中断的地方,继续原来的工作。

说明:

在这里插入图片描述


Q31:中断系统的概念和作用?

答:

实现中断功能的部件称为中断系统
作用:

  1. 完成实时性的要求
  2. 实现中断及返回
  3. 保护现场和恢复现场
说明:

在这里插入图片描述
上图为中断系统的结构,由图可知,中断源分为三类:外部中断、定时器中断和串行口中断


Q32:51单片机分了很多段,每一段的含义?

答:
  • CODE

    • 用来保存程序中汇编助记符描述的机器指令部件
    • STC单片机中的程序Flash存储空间
    • 可以由MOVE指令,并且通过DPTR寄存器进行访问
  • BIT

    • 用来保存比特位
    • 可以通过指令系统中的位操作指令来访问(注:可以通过位操作指令访问特殊功能寄存器SFR
  • IDATA

    • 可以定义少量的变量,这些变量将最终保存在STC单片机的片内RAM的高地址和低地址区域中
    • IDATA的低128个字节和DATA段重叠
    • 可以通过寄存器R0R1,间接寻址保存在IDATA段中的变量
  • DATA

    • 该段指向STC单片机内部数据RAM的低128个字节
    • 通过直接和间接寻址方式,程序代码可以访问在DATA段中的变量
    • 地址空间为00H~7FH
  • XDATA

    • 该段指向扩展RAM区域
    • 通过寄存器DPTRMOVX指令,程序代码可以访问XDATA
    • 对于一个单页的XDATA存储空间来说,可通过寄存器R0R1访问

Q33:定时器/计数器有几种工作模式及其含义?

答:

四种

  • M1=0; M0=0
    • 模式0
    • 特点:13位定时器
  • M1=0; M0=1
    • 模式1
    • 特点:16位定时器
  • M1=1; M0=0
    • 模式2
    • 特点:8位 可重加载定时器
  • M1=1; M0=1
    • 模式3
    • 特点:两个单独8位定时器

Q34:使用51单片机设计(DIY)

答:

可以使用51单片机设计一个宿舍门闸的程序,将51单片机连接一个正反转可控的步进电机,将其连接到P0.0端口,然后在连接一个按钮连接在P3.0端口,然后写程序,当按钮按下时,产生一个中断信号,在中断信号中步进电机正转,进过一段时间延时后,再反转回来。

说明

可以参看以下文章:

上述代码位置:https://github.com/duganlx/DSP


Q35:51单片机的CPU由哪几部分?

答:

两部分,运算器和控制器


Q36:程序运行子程序和中断时,首先需要干啥?

答:

保护和恢复现场


Q37:51单片机存储器组成?

答:

程序存储器

  • 内部程序存储器
  • 外部程序存储器

RAM

  • 内部RAM
  • 外部RAM

Q38:51单片机如何复位?

答:

单片机复位有两种:

  • 上电复位
    • 单片机在接通电源后,会复位一次
  • 硬件复位
    • 通过reset引脚产生的复位
  • 软件复位
    • 让程序再次从0000H开始执行
    • 方式:看门狗时间溢出、内部程序陷阱

Q39:键盘扫描有哪几种方式?

答:
  • 逐行扫描
  • 电平翻转

Q40:汇编程序有哪几种结构?

答:
  • 顺序程序结构
  • 分支或选择程序结构
  • 循环程序结构
  • 子程序

Q41:I^2C总线有几根线?

答:

两根:

  • 数据线
  • 时钟线

Q42:单片机是否晶振频率越高越好?

答:

不是,超频有可能会烧坏芯片


Q43:51单片机的复位是低电平还是高电平?

答:

高电平


Q44:18b20的特点是什么?

答:

单总线

说明:

相关参考文章:1-Wire总线温度传感器DS18B20应用测试


Q45:P0口的地址是?

答:

P0口的地址是0x80,它的每个位是0x80~0x87共八位

说明

带位地址操作的寄存器只有以0或8结尾的才行


Q46:数码管中,哪种显示亮度高?

答:

静态显示


Q47:外部中断0和外部中断1在哪个端口上?

答:

P3


Q48:去抖动的时间是多少?

答:

10ms这个量级(10ms、20ms、30ms 都可以的)


Q49:设计一个八个数码管显示,需要多少根I/O线?

答:

共16根

  • 数据线 8根
  • 控制线 8根

Q50:八段数码管显示原理?

答:

假设是共阳极的数码管,数码管是由八个二极管组成,当有电流流过时,相应的二极管就会点亮
在这里插入图片描述


Q51:51单片机的两个定时器都是加法计数器吗?

答:

对,都是加法计数器,不能做减法


Q52:138芯片是指什么?

答:

三八译码器,输入三根线,输出八根线


Q53:12位地址总线内存容量为多少?

答:

4K (212


Q54:51单片机运行时,指令的地址存放在哪里?

答:

pc:程序计数器


Q55:实验中 I^2C总线中停止信号如何设置?

答:
/*******************************************************************************
* 函数名         : I2cStop()
* 函数功能		 : 终止信号:在SCL时钟信号高电平期间SDA信号产生一个上升沿
* 输入           : 无
* 输出         	 : 无
* 备注           : 结束之后保持SDA和SCL都为1;表示总线空闲
*******************************************************************************/

void I2cStop()
{
	SDA=0;
	Delay10us();
	SCL=1;
	Delay10us();//建立时间大于4.7us
	SDA=1;
	Delay10us();		
}
说明

I^2C所有设置:

#include"i2c.h"

/*******************************************************************************
* 函数名         : Delay10us()
* 函数功能		   : 延时10us
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/

void Delay10us()
{
	unsigned char a,b;
	for(b=1;b>0;b--)
		for(a=2;a>0;a--);

}
/*******************************************************************************
* 函数名         : I2cStart()
* 函数功能		 : 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿
* 输入           : 无
* 输出         	 : 无
* 备注           : 起始之后SDA和SCL都为0
*******************************************************************************/

void I2cStart()
{
	SDA=1;
	Delay10us();
	SCL=1;
	Delay10us();//建立时间是SDA保持时间>4.7us
	SDA=0;
	Delay10us();//保持时间是>4us
	SCL=0;			
	Delay10us();		
}
/*******************************************************************************
* 函数名         : I2cStop()
* 函数功能		 : 终止信号:在SCL时钟信号高电平期间SDA信号产生一个上升沿
* 输入           : 无
* 输出         	 : 无
* 备注           : 结束之后保持SDA和SCL都为1;表示总线空闲
*******************************************************************************/

void I2cStop()
{
	SDA=0;
	Delay10us();
	SCL=1;
	Delay10us();//建立时间大于4.7us
	SDA=1;
	Delay10us();		
}
/*******************************************************************************
* 函数名         : I2cSendByte(unsigned char dat)
* 函数功能		 : 通过I2C发送一个字节。在SCL时钟信号高电平期间,保持发送信号SDA保持稳定
* 输入           : num
* 输出         	 : 0或1。发送成功返回1,发送失败返回0
* 备注           : 发送完一个字节SCL=0,SDA=1
*******************************************************************************/

unsigned char I2cSendByte(unsigned char dat)
{
	unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。		
	for(a=0;a<8;a++)//要发送8位,从最高位开始
	{
		SDA=dat>>7;	 //起始信号之后SCL=0,所以可以直接改变SDA信号
		dat=dat<<1;
		Delay10us();
		SCL=1;
		Delay10us();//建立时间>4.7us
		SCL=0;
		Delay10us();//时间大于4us		
	}
	SDA=1;
	Delay10us();
	SCL=1;
	while(SDA)//等待应答,也就是等待从设备把SDA拉低
	{
		b++;
		if(b>200)	 //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束
		{
			SCL=0;
			Delay10us();
			return 0;
		}
	}
	SCL=0;
	Delay10us();
 	return 1;		
}
/*******************************************************************************
* 函数名         : I2cReadByte()
* 函数功能		   : 使用I2c读取一个字节
* 输入           : 无
* 输出         	 : dat
* 备注           : 接收完一个字节SCL=0,SDA=1.
*******************************************************************************/

unsigned char I2cReadByte()
{
	unsigned char a=0,dat=0;
	SDA=1;			//起始和发送一个字节之后SCL都是0
	Delay10us();
	for(a=0;a<8;a++)//接收8个字节
	{
		SCL=1;
		Delay10us();
		dat<<=1;
		dat|=SDA;
		Delay10us();
		SCL=0;
		Delay10us();
	}
	return dat;		
}


/*******************************************************************************
* 函数名         : void At24c02Write(unsigned char addr,unsigned char dat)
* 函数功能		   : 往24c02的一个地址写入一个数据
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/

void At24c02Write(unsigned char addr,unsigned char dat)
{
	I2cStart();
	I2cSendByte(0xa0);//发送写器件地址
	I2cSendByte(addr);//发送要写入内存地址
	I2cSendByte(dat);	//发送数据
	I2cStop();
}
/*******************************************************************************
* 函数名         : unsigned char At24c02Read(unsigned char addr)
* 函数功能		   : 读取24c02的一个地址的一个数据
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/

unsigned char At24c02Read(unsigned char addr)
{
	unsigned char num;
	I2cStart();
	I2cSendByte(0xa0); //发送写器件地址
	I2cSendByte(addr); //发送要读取的地址
	I2cStart();
	I2cSendByte(0xa1); //发送读器件地址
	num=I2cReadByte(); //读取数据
	I2cStop();
	return num;	
}

Q56:实验中 外部中断初始化函数如何编写?

答:
void init()
{
	IT0=1;
	EX0=1;
	EA=1;
}

Q57:编写外中断的实验(控制灯亮灭)

答:

之前的实验代码
代码位置:https://github.com/duganlx/STC

#include<reg51.h>

data unsigned char cLed _at_ 0x20;

void init()
{
	IT0=1;
	EX0=1;
	EA=1;
}

void main()
{
	cLed = 0xfe;
	P2=cLed;
	init();
	while(1);
}

void I0() interrupt 0
{
  # pragma asm
	MOV A, 20H
	RL A
	MOV 20H, A
  # pragma endasm
  P2=cLed;
}
  • 18
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值