[学习资料]

基本I/O–按钮和LED

[复制链接]
26365|6
手机看帖
扫描二维码
随时随地手机跟帖
gwsan|  楼主 | 2022-6-21 13:12 | 显示全部楼层 |阅读模式
01 什么是嵌入式系统?
嵌入式系统是一种设计用于执行一个或几个专用功能,通常是实时的计算限制。它是作为完整系统的一部分嵌入的设备通常包括硬件和机械部件。 — 维基百科

那什么是嵌入式系统:我自己的理解就是名字开头带一些智能,比如智能家居、智能车、智能热水器等等这些都属于嵌入式系统。

那这些当中主要会包含一个主控芯片进行运算、还包括一些硬件、机械结构等。

那维基百科给的解释是这样:嵌入式系统是一种设计用于执行一个或几个专用功能,通常是实时的计算限制。它是作为完整系统的一部分嵌入的设备通常包括硬件和机械部件。现在智能化的时代,随处都可以见到嵌入式的设备。

02 单片机PIC16F877A情况
我们要学习的芯片叫做PIC16F877A,它包含40个引脚,可以分为PORTA, PORTB, PORTC, PORTD and PORTE这几个端口,每个端口除了做简单的输入口使用外,还可以作为其他功能使用,主要是通过寄存器的配置来进行实现的,这种也称为引脚的复用功能。
1508362b144967c34c.png

03 PIC16F877A和Arduino Uno有什么区别?
•微芯片PIC为微控制器,Arduino Uno为嵌入式系统基于Amtel ATmega328P微控制器。

•PIC16F877A和ATmega328P均为8位RISC架构微控制器。它们都用于执行类似的功能。

•Microchip是一家比Atmel大得多的公司,最近获得 Atmel。

那为什么我们使用PIC呢?
首先就是该款单片机的使用范围较广,是一个非常适合入门嵌入式领域学习的单片机。

接着是拥有非常好的自由软件开发工具(MPLAB X IDE)和低成本硬件开发工具,如调试器和目标硬件平台(例如PICkit 3和PIC DIP-40)。

04 最小系统
PICmicro需要最少的外部组件才能安装操作。以下示意图显示了最小值PIC16F877A的配置。
3835862b144a025e48.png
我们也可以称其为最小系统,最小系统的配置包含第一部时钟信号,这个信号可以把它想象成我们人体的心脏,只有心脏跳动我们机体才能正常运作。

芯片是一个电子产品,那肯定需要给它进行供电,所以电源也是不能少。还有一个是复位按键,这个是让芯片从头开始执行指令。

05 电路需要I/O才能发挥作用
1606362b144a71122c.png
通过上面介绍我们知道,有了最小系统之后,单片机就可以工作了,但是要发挥作用就需要有引脚。

举个例子,我们都知道要让二极管LED灯亮,需要让二极管导通,像图中这样,负端是低电位,要让二极管亮,就需要在正端加上高电平,这样LED灯就会亮。

所以我们可以通过RB3、RB4引脚来控制输出电平高低,从而来控制LED灯的亮灭。给高就亮、给低就灭。

06 寄存器和特殊功能寄存器
PIC16F877A文件寄存器和特殊功能寄存器数据存储器或内存每个寄存器为8位。
5341562b144ad9ee9d.png
这一页PPT主要是来介绍PIC16F877A这个芯片的内部寄存器情况,上面这部分叫特殊功能寄存器,它们是有特定的用途的,像PORTA、TRISA就是用来配置I/O端口的,像TCON1等这些是与定时器有关的寄存器。旁边这个十六进制数就是寄存器的地址。

下面的寄存器是通用寄存器,我们是用C语言来写代码的,那经常会定义一个变量,那这个变量就是存放在通用寄存器中。

这些寄存器的作用就是用来配置、控制并监视设备,所以记住一句话就是学习单片机其实就是在操纵寄存器,等等我们用最简单的案例来给大家解释这句话的意思。

07 输入输出引脚
3212562b144b2e05ec.png
这些端口是双向的(即,它们可以配置为输入或输出)。
以下SFR用于设置5个端口的哪些引脚是输入,哪些是是输出。
TRISA, TRISB, TRISC, TRISD and TRISE

我们可以通过图中看,包含了A\B\C\D\E端口(RA端口、RB端口、RC端口、RD端口、RE端口)、电源端口、复位端口、振荡器端口,而且我们看每个端口都会有一个斜杆,这个代表端口的复用,像AN0~AN7就是模拟量输入端口,Vref-、Vref+就是参考电压,T1OSO、T1OSI可以接外部时钟信号,CCP1,2是捕获比较PWM引脚,SDI、SDA、SDO、IIC通信、RX、TX、DT这些都是与通信相关的引脚。那具体每个引脚是用来做什么功能,主要是靠我们前面那张图讲的,寄存器要如何配置。
可以在芯片手册上通过这份资料查询;
3741362b144ba24890.png
08 如何配置I/O的知识?
我们刚刚有讲到说,要让二极管LED灯亮,需要让二极管导通,像图中这样,负端是低电位,要让二极管亮,就需要在正端加上高电平,这样LED灯就会亮。

所以我们要让LED1灯亮,我们就需要让RB4引脚输出高电平,那第一点需要配置I/O口为输出,第二点输出的信号为高电平。

那配置I/O为输出,就是用TRISB这个寄存器,写0就代表输出,写1就代表输入(这个大家可以这么来记,output的首字母跟0很像,所以代表输出,input跟1像,所以代表输入);

那PORTB这个寄存器中,如果某一位设置为1就代表输出高电平、某一位设置为0就代表输出为低电平。

所以我们把TRISB的第4位设置位0,PORTB的第四位设置为1,这样程序一旦下载到开发板,就可以把LED1灯点亮了。

所以操作I/O口就是用来操作TRISx、PORTx这两个寄存器;
368862b144c192ae7.png
举个例子:
如果要将端口B(一个8位端口)配置为比特0到比特3作为输入,比特4到比特7作为输入输出,则TRISB必须具有以下值;
5100762b144cfa3007.png
任何未使用的I/O引脚应设置为输出并设置为低,即TRISx和PORTx中的相应位寄存器应设置为0。

一旦配置了PORTB,我们现在就可以对该端口进行写入或读取。如果我们写 0xF0(0b1 1 1 0 0 0 0 0)到端口B,则位7到位4将设置为高电平(例如设置为5V)。这 与端口B相关的PIC16F877A引脚上也会出现5V电压,即RB7至 RB4(即针脚40至37)。

09 PIC16F877A的一个方框图
这张图是PIC16F877A的一个方框图,通过图中我们可以看到芯片内置的一些功能,包括芯片内部的结构单元。
5130062b144d685984.png

10 PIC16F877A芯片手册
•PIC16F877A中的每个外围设备都需要使用SFRs配置。

•PIC16F877A的数据表包括所有配置SFR所需的信息。

•每个外围设备都有单独的章节。

•每章末尾有一个表格,说明哪些SFR(及其位)与之关联外围设备


使用特权

评论回复
评论
asd123asd123zxc 2022-7-27 14:28 回复TA
感谢楼主分享,学到很多东西 
7631001| | 2022-7-17 22:33 | 显示全部楼层
讲解详细,对了解PIC单片机很有帮助,谢谢楼主!

使用特权

评论回复
jt123456| | 2022-7-21 16:20 | 显示全部楼层
感谢楼主分享,学到很多东西

使用特权

评论回复
327334404| | 2022-7-27 14:19 | 显示全部楼层
顶上

使用特权

评论回复
dyx8899| | 2022-8-7 20:27 | 显示全部楼层
好贴,顶上!

使用特权

评论回复
weifeng90| | 2022-8-8 08:16 | 显示全部楼层
PIC还是很经典的单片机了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则