单片机期末复习

前言

作者:小蜗牛向前冲

名言:我可以接受失败,但我不能接受放弃

如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正

目录

一、单片机相关知识点

[1、 MCS-5l单片机的堆栈在那个区域、片内ROM区、片外ROM区、片内RAM区、片外RAM区](#1、 MCS-5l单片机的堆栈在那个区域、片内ROM区、片外ROM区、片内RAM区、片外RAM区)

​2、晶振频率和机器周期的计算

3、单片机总线

4、单片机引脚功能

二、单片机综合运用

1、流水灯

2、中断系统、定时器

3、AD\DA和串行口


这里为大家复习了部分期末单片机的知识,单片机的结构和综合运用,不喜勿喷

一、单片机相关知识点

1、 MCS-5l单片机的堆栈在那个区域、片内ROM区、片外ROM区、片内RAM区、片外RAM区

解析:

堆栈区建在07H以上的内部RAM区

2、晶振频率和机器周期的计算

晶振频率:晶振频率是指晶体振荡器(Crystal Oscillator)产生的振荡频率,在电子电路中广泛用于提供精确的时钟信号。

机器周期:是指执行一条基本的机器指令所需要的时间

公式:

T(机器周期) = 12*1/ 晶振频率

如常见的外接12M晶振:T(时钟周期)=1/12M。

注:时钟周期以时间动作重复的最小周期来度量

3、单片机总线

单片机的总线分为控制总线、地址总线和数据总线 等三种。而数据总线用于传送数据,控制总线用于传送控制信号, 地址总线则用于选择存储单元或外设。

三总线的功能:

数据总线(Data Bus):

  • 数据总线是用于在CPU、内存、输入/输出(I/O)设备之间传输数据的通道。
  • 它决定了CPU与其他硬件组件之间的数据传输宽度,即一次能够传输多少位的数据。

地址总线(Address Bus):

  • 址总线用于传递CPU生成的内存地址,指示要读取或写入的存储器位置。
  • 地址总线的宽度决定了CPU能够寻址的内存空间的大小。例如,一个8位的地址总线可以寻址 (2^8 = 256) 个内存位置。

控制总线(Control Bus):

  • 控制总线用于传递控制信号,这些信号控制着各个硬件组件的操作。
  • 控制信号包括时钟信号、读/写控制信号、中断请求、总线请求/总线响应等。时钟信号用于同步整个系统的操作。

4、单片机引脚功能

VCC 和 GND:

  • VCC 是电源引脚,连接到正电源。
  • GND 是地引脚,连接到地。

XTAL1 和 XTAL2:

  • 连接晶振的引脚,用于提供单片机的时钟

RST:

  • 复位引脚,用于复位单片机。

ALE(Address Latch Enable):

  • 地址锁存使能引脚,用于在地址总线(16位)和数据总线(8位)之间切换。

PSEN(Program Store Enable):

  • 程序存储器使能引脚,用于选择外部程序存储器。

EA(External Access):

  • 外部访问引脚,用于控制是否从外部程序存储器执行代码。

Port 0(P0):

  • 8位的双向I/O端口。

Port 1(P1):

  • 8位的双向I/O端口。

Port 3(P3):

  • 8位的双向I/O端口。

RXD 和 TXD:

  • 串行通信端口引脚,用于串行通信。

二、单片机综合运用

这里的复习主要是考试大题,这里我们主要关心C51单机连接了哪些电路,和程序控制

1、流水灯

用Proteus绘制电路原理图;

电路:

时钟电路

复位电路

p1口和流水灯连接

用Keil编写程序,输出hex文件;

cpp 复制代码
#include<reg51.h>
 
#define uchar unsigned char
	
 
void main()
{
	uchar arr[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E};
	//01111111,10111111,11011111,···11111110实现0的右移
	int i,j;
	while(1)
	{
		for(i=0;i<8;i++)
		{
			P1=arr[i]; 
			for (j=0;j<10000;j++);//延时
		}
		
	}
}

在这个程序中,数组arr的每个元素都是一个8位的二进制数。每个位代表P1端口上的一个引脚的状态,从而决定连接到P1端口的LED的亮灭状态。在这里,数组的每个元素都是一个特定的二进制模式,它们之间的不同位的值导致LED灯在流水灯效果中不同的位置亮起。

具体来说,数组arr中的每个元素可以表示为一个二进制数,其中每个位对应P1端口上的一个引脚。对于arr数组的定义:

cpp 复制代码
uchar arr[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E};

这里使用的二进制数都是从最高位到最低位依次递减的,每个元素都是前一个元素右移一位,并在最低位添0。以第一个元素 0xFE 为例,它的二进制表示是 11111110,表示P1端口上有8个引脚,其中7个引脚是高电平(1),而最低位的引脚是低电平(0)。

下面是每个元素的二进制表示和相应的亮灭状态:

  1. 0xFE -> 11111110 -> LED在最高位亮。
  2. 0xFD -> 11111101 -> LED在次高位亮。
  3. 0xFB -> 11111011 -> 以此类推,流水灯效果循环。

如果给P1端口不同的值,实际上就是通过改变P1端口的输出状态,从而控制连接到P1端口的LED的亮灭状态。每个元素的二进制表示中的每一位都对应一个LED的状态,通过在数组中循环切换不同的元素,可以实现LED在P1端口上的流水灯效果。

2、中断系统、定时器

在了解中断系统时,我们要先了解一下定时器。

定时器

时器是一种特殊的硬件模块,用于在固定的时间间隔内生成定时中断或执行一些计数操作。

  1. 计时功能: 定时器可以用于测量时间间隔,从而实现一定的时间延迟或精确的时间测量。

  2. 产生定时中断: 定时器可以配置为在计数到特定值时生成中断。这使得程序可以在固定的时间间隔内执行特定的任务,例如定时采样传感器数据、定时更新显示等。

  3. PWM生成: 定时器可以用于生成脉冲宽度调制(PWM)信号,用于控制电机速度、调光LED等。

  4. PWM生成: 定时器可以用于生成脉冲宽度调制(PWM)信号,用于控制电机速度、调光LED等。

下面是一个简单的C51程序示例,演示如何配置和使用定时器:

cpp 复制代码
#include <reg51.h>

void initTimer() {
    // 配置定时器模式为模式1(16位计数器)
    TMOD = 0x01;
    
    // 设置定时器初值,假设要产生1ms的定时
    TH0 = 0xFC;
    TL0 = 0x18;
    
    // 启用定时器中断
    ET0 = 1;
    
    // 启动定时器
    TR0 = 1;
}

void timerInterrupt() interrupt 1 {
    // 定时器中断服务程序
    // 在这里添加定时器中断处理的代码
}

void main() {
    // 初始化定时器
    initTimer();

    // 主程序
    while (1) {
        // 在这里添加主程序的代码
    }
}

为了更好的理解上面的程序,我们还需要了解下面的知识:

TMOD是定时器模式寄存器 ,用于配置8051单片机的定时器/计数器工作模式。TMOD寄存器的每个位对应一个定时器/计数器,因为8051单片机可以包含两个独立的定时器/计数器:定时器0(T0)和定时器1(T1)。

TMOD寄存器的位布局如下:

cpp 复制代码
----------------------------------------------------------------
| GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
----------------------------------------------------------------
  7     6     5    4     3     2     1    0
  • GATE: 定时器/计数器的门控位。当GATE位为1时,定时器/计数器在TR寄存器位(定时器运行控制位)为1且外部引脚INTx为高电平时计数。当GATE位为0时,TR位的状态不影响计数。

  • C/T: 定时器/计数器模式位。当C/T位为1时,为定时器模式;当C/T位为0时,为计数器模式。

  • M1M0: 定时器/计数器模式位。这两位一起确定了工作模式,共有四种工作模式(00、01、10、11)。

下面是一些常见的定时器模式配置:

cpp 复制代码
M1=0, M0=0: 13位定时器模式。
M1=0, M0=1: 16位定时器/计数器模式。
M1=1, M0=0: 8位自动重载定时器/计数器模式。
M1=1, M0=1: 2个8位定时器/计数器模式。

上面的程序表示我们现在了模式1

TH0(Timer 0 High Byte)和TL0(Timer 0 Low Byte)是定时器/计数器0的高字节和低字节寄存器。这两个寄存器一起形成了16位的计数器,用于计时或计数操作。

上面我们是产生1ms的定时,这里是怎么产生的呢?

首先,我们需要计算定时器0的初值。定时器0的初值可以通过以下公式来计算:

初值 = 65536 - (定时时间 / 机器周期)

其中,定时时间是你所期望的定时时间,单位为毫秒;机器周期是单片机的时钟周期,可以通过晶振频率来计算,公式为:

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

假设你期望的定时时间为1毫秒,晶振频率为12MHz,则计算过程如下:

机器周期 = 1 / (12MHz / 12) = 1μs

初值 = 65536 - (1ms / 1μs) = 65536 - 1000 = 64536

因此,你可以将定时器0的初值设置为64536,即可实现1毫秒的定时。

转换为16进制0xFC68,所以,TH0=oxFC和TL0=0x18

中断

当单片机正在执行某程序时,如果突然出现意外情况,它就需要停止当前正在执行的程序,转而去执行处理意外情况的程序(又称中断子程序),执行处理完后又接着执行原来的程序。

中断流程:中断请求中断响应中断处理中断返回

MCS-51共有五个中断源

外部中断 0(INT0):

  • 中断源描述: INT0是外部中断0,连接到P3.2引脚。
  • 中断触发条件: 当P3.2引脚上的电平由高变为低(下降沿触发)时,INT0中断被触发。

外部中断 1(INT1):

  • 中断源描述: INT1是外部中断1,连接到P3.3引脚。
  • 中断触发条件: 当P3.3引脚上的电平由高变为低(下降沿触发)时,INT1中断被触发。

定时器/计数器 0 溢出中断(TF0):

  • 中断源描述: TF0是定时器/计数器0(T0)的溢出中断。
  • 中断触发条件: 当T0溢出时,TF0中断被触发。

定时器/计数器 1 溢出中断(TF1)

  • 中断源描述: TF1是定时器/计数器1(T1)的溢出中断。
  • 中断触发条件: 当T1溢出时,TF1中断被触发。

串行口中断(RI/TI):

  • 中断源描述: RI(接收中断)和 TI(发送中断)是与串行通信相关的中断。
  • 中断触发条件: 当串行口接收到数据时(RI),或当串行口发送完数据时(TI),相应的中断被触发。

上面我们用的是定时器/计数器 0 溢出中断(TF0)。

**3、**AD\DA和串行口

这里的知识点其实是非常重要的,但是这里不做为复习重点,我们了解一下即可。

AD\DA

AD和DA分别代表模数转换(Analog-to-Digital,AD)和数模转换(Digital-to-Analog,DA),是在电子系统中用于将模拟信号和数字信号相互转换的过程。

8051串行口的设置和相关的寄存器:

SCON(串行控制寄存器): 用于设置串行口的工作模式和控制串行通信的各个方面

cpp 复制代码
SCON = 0x50;  // 设置串行口为模式 1,启用接收

MOD(定时/计数器模式寄存器): 用于设置定时器模式,因为在串行通信中,通常使用定时器来生成波特率。

cpp 复制代码
TMOD = 0x20;  // 设置定时器 1 为模式 2(8 位自动重装定时器)

TH1 和 TL1(定时/计数器1的高字节和低字节寄存器): 用于设置定时器1的初值,以实现正确的波特率。

cpp 复制代码
TH1 = 0xFD;   // 根据波特率设置 TH1 的值
TL1 = 0xFD;   // 根据波特率设置 TL1 的值

TI 和 RI 位(SCON寄存器中的位): 用于标志发送中断和接收中断。

cpp 复制代码
TI = 0;  // 发送中断标志位,初始设为0
RI = 0;  // 接收中断标志位,初始设为0
相关推荐
远翔调光芯片^138287988722 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张3 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_739312875 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
嵌入式小章6 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频
TeYiToKu6 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
基极向上的三极管7 小时前
【AD】3-4 在原理图中放置元件
嵌入式硬件
徐嵌7 小时前
STM32项目---水质水位检测
stm32·单片机·嵌入式硬件
徐嵌7 小时前
STM32项目---畜牧定位器
c语言·stm32·单片机·物联网·iot
lantiandianzi7 小时前
基于单片机的老人生活安全监测系统
单片机·嵌入式硬件·生活
东胜物联8 小时前
探寻5G工业网关市场,5G工业网关品牌解析
人工智能·嵌入式硬件·5g