当前位置: 首页 > news >正文

【单片机day02】

GPIO:

Genral Purpose Input/Output,GPIO是51单片机和外界交互最基本的方式

  • 工作模式:

    • 输出模式:单片机给定引脚一个电平(高电平(5V) 低电平(0V)),控制引脚实现高低电平
    • 输入模式:检测引脚电平变化
    • GPIO水龙头
      • 输出模式:制水龙头(水流)
      • 输入模式:观察水龙头是否有水流(按键)

按键:

按键K1,两个引脚被接到GND和P1_4引脚,当K1按键被按下时,P1_4引脚会和GND短路到一起,P1_4引脚会呈现低电平

判断按键是否被按下:只需要检测对应的引脚是否为低电平

中断:

概念:

CPU在执行一个任务时,被外界更为紧急的事件打断,转而去执行更为紧急的任务,执行完后再回到刚才的地方继续向下执行,这一过程叫做中断

中断源:

打断CPU执行当前任务的事件/源头叫做中断源

51单片机有5个中断源

中断源分类:

外部中断0、外部中断1、时器0、定时器1、串口

外部中断:

单片机上的引脚电平变化所引发的中断(INTO(P3-2)、INT1(P3-3))

中断优先级:

CPU再去处理中断任务时候,会去比较多个中断的优先级,优先去处理优先级高的中断

中断嵌套:

处理一个中断时,再嵌套另外的中断;51单片机只允许嵌套2层

中断处理流程:

  • 中断源发出中断请求
  • 检查CPU是否响应中断及该中断源是否被屏蔽
  • 比较中断优先级
  • 保护现场
  • 执行中断服务函数(回调函数)
  • 恢复现场

中断相关寄存器配置:

  • IE寄存器(中断允许寄存器)
    • 将IE寄存器中的bit7,EA置1,代表CPU能够响应所有中断
    • 将IE寄存器中的bit0,EX0置1,代表允许外部中断0产生中断

  • TCON寄存器(定时器寄存器)
    • 将TCON寄存器的bit1,IE0置1,代表向CPU发起中断请求,CPU响应完中断请求后,硬件清“0”
    • 将TCON寄存器的bit0,IT0置1,代表外部中断0下降沿触发中断

定时器

能够产生一个精准的定时,不同外设对时序的要求高(高电平和低电平时间是精准的)

51单片机内部有两个定时器,分别为timer0、timer1,所使用自增型定时器(计数器 16位)

16位定时器和8位自动重装载定时器的区别:

16位定时器:

  • 结构:有两个8位寄存器构成,THx(高 8 位)、TLx(低 8 位)
  • 计数范围:0 ~ 65535
  • 特点:
    • 当 TLx/THx 计数满溢(FFFFH→0000H)时产生溢出中断。

    • 溢出后需要 软件重新装载初值(即在中断服务程序里重新写 THx/TLx),否则默认从 0000 开始继续计数。

  • 优点:范围大,可以实现较长的定时周期。

  • 缺点:每次溢出后都需要重新写入初值,增加了中断处理的负担。

8 位自动重装载定时器

  • 结构:THx 用作“固定初值寄存器”,TLx 用作“计数寄存器”。

  • 计数范围:0 ~ 255(2⁸-1)。

  • 特点

    • 每次 TLx 从 THx 自动装载初值。

    • 当 TLx 溢出(FFH→00H)时,硬件自动把 THx 的值重新装入 TLx,然后继续计数。

    • 无需在中断里写初值。

  • 优点:实现周期性定时更简单(只需设一次 THx),CPU 开销小。

  • 缺点:计数范围小,最长定时周期只有 256 个计数周期。

定时器相关寄存器配置:

8位自动重装载定时器:

分为TL0和TH0两部分,1byte,实际参与计数的只有TL0,当TL0中的值加到255溢出后,再将TH0中的值重新装入到TL0中

TCON寄存器:

  • bit4置1,TMOD寄存器中的Gate位清0, 代表允许定时器开始计数

TMOD寄存器:

  • 定时器0->低四位清0
  • 将TMOD寄存器中的M0,bit0置1,代表定时器0工作在16位定时器/计数器模式

IE寄存器:

  • 将IE寄存器中的bit7置1,代表CPU能够响应所有中断
  • 将IE寄存器中的bit1置1,代表允许定时器0产生中断

流程:

  • 先配置TMOD模式选择寄存器,将低四位清0,再将bit0置1代表工作在16位定时器
  • 向TH0和TL0中装入定时器的初值(1ms -> 64535)
  • 将TCON寄存器中的bit6置1,代表允许定时器开始计数
  • 将IE寄存器中的bit7和bit1置1,开启中断总开关和定时器0的子开关
  • 编写定时器0的中断服务函数

PWM脉冲宽度调制、蜂鸣器

能够让引脚产生一个方波,周期性的让引脚的电平发生翻转

  • PWM周期:一个方波所经历的周期(从上升沿 / 下降沿到下一个上升沿 / 下降沿所经历的时间)
  • PWM占空比:高电平在一个周期内所占的比例
  • 蜂鸣器:
    • 有源蜂鸣器:存在震荡源,通电后蜂鸣器会发出持续频率的声音
    • 无源蜂鸣器:不存在震荡源,通电后蜂鸣器不会发出声音,需要给蜂鸣器一个震荡,

蜂鸣器实现原理:

利用定时器精确产生周期中断,翻转 IO,得到稳定的方波。

http://www.dtcms.com/a/366054.html

相关文章:

  • Swift 解法详解:LeetCode 370《区间加法》
  • C++ 5
  • 硬件基础与c51基础
  • 【Linux】分离线程
  • 如何下载免费的vmware workstation pro 17版本?
  • 小游戏公司接单难?这几点原因与破局思路值得看看
  • Pytorch笔记一之 cpu模型保存、加载与推理
  • AI隐私保护:当大模型遇上“隐身术”——差分隐私+同态加密,让模型“看不见原始数据”
  • LoRA微调分词器 应用模板(75)
  • test命令与参数
  • Python基础(⑧APScheduler任务调度框架)
  • 数据结构从青铜到王者第十九话---Map和Set(2)
  • git之分支
  • 如何创建交换空间
  • 【音视频】视频秒播优化实践
  • 无穿戴动捕如何深度结合AI数据分析,实现精准动作评估?
  • 代码随想录刷题Day48
  • Linux 字符设备驱动框架学习记录(三)
  • 数学建模-非线性规划(NLP)
  • STM32HAL 快速入门(十七):UART 硬件结构 —— 从寄存器到数据收发流程
  • DOM常见的操作有哪些?
  • Day34 UDP套接字编程 可靠文件传输与实时双向聊天系统
  • 信号调制与解调 matlab仿真
  • 异常处理机制与debug
  • 复写零(双指针)
  • 单片机day2
  • 配置时钟分频与倍频
  • 解构复杂财务逆向业务:如何优雅地生成与管理负数单?
  • Python基础(⑥属性装饰器)
  • 你只需输入一句话,MoneyPrinterTurbo直接给你输出一个视频