01 什么是嵌入式系统?
嵌入式系统是一种设计用于执行一个或几个专用功能,通常是实时的计算限制。它是作为完整系统的一部分嵌入的设备通常包括硬件和机械部件。 — 维基百科
那什么是嵌入式系统:我自己的理解就是名字开头带一些智能,比如智能家居、智能车、智能热水器等等这些都属于嵌入式系统。
那这些当中主要会包含一个主控芯片进行运算、还包括一些硬件、机械结构等。
那维基百科给的解释是这样:嵌入式系统是一种设计用于执行一个或几个专用功能,通常是实时的计算限制。它是作为完整系统的一部分嵌入的设备通常包括硬件和机械部件。现在智能化的时代,随处都可以见到嵌入式的设备。
02 单片机PIC16F877A情况
我们要学习的芯片叫做PIC16F877A,它包含40个引脚,可以分为PORTA, PORTB, PORTC, PORTD and PORTE这几个端口,每个端口除了做简单的输入口使用外,还可以作为其他功能使用,主要是通过寄存器的配置来进行实现的,这种也称为引脚的复用功能。
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的配置。
我们也可以称其为最小系统,最小系统的配置包含第一部时钟信号,这个信号可以把它想象成我们人体的心脏,只有心脏跳动我们机体才能正常运作。
芯片是一个电子产品,那肯定需要给它进行供电,所以电源也是不能少。还有一个是复位按键,这个是让芯片从头开始执行指令。
05 电路需要I/O才能发挥作用
通过上面介绍我们知道,有了最小系统之后,单片机就可以工作了,但是要发挥作用就需要有引脚。
举个例子,我们都知道要让二极管LED灯亮,需要让二极管导通,像图中这样,负端是低电位,要让二极管亮,就需要在正端加上高电平,这样LED灯就会亮。
所以我们可以通过RB3、RB4引脚来控制输出电平高低,从而来控制LED灯的亮灭。给高就亮、给低就灭。
06 寄存器和特殊功能寄存器
PIC16F877A文件寄存器和特殊功能寄存器数据存储器或内存每个寄存器为8位。
这一页PPT主要是来介绍PIC16F877A这个芯片的内部寄存器情况,上面这部分叫特殊功能寄存器,它们是有特定的用途的,像PORTA、TRISA就是用来配置I/O端口的,像TCON1等这些是与定时器有关的寄存器。旁边这个十六进制数就是寄存器的地址。
下面的寄存器是通用寄存器,我们是用C语言来写代码的,那经常会定义一个变量,那这个变量就是存放在通用寄存器中。
这些寄存器的作用就是用来配置、控制并监视设备,所以记住一句话就是学习单片机其实就是在操纵寄存器,等等我们用最简单的案例来给大家解释这句话的意思。
07 输入输出引脚
这些端口是双向的(即,它们可以配置为输入或输出)。
以下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这些都是与通信相关的引脚。那具体每个引脚是用来做什么功能,主要是靠我们前面那张图讲的,寄存器要如何配置。
可以在芯片手册上通过这份资料查询;
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这两个寄存器;
举个例子:
如果要将端口B(一个8位端口)配置为比特0到比特3作为输入,比特4到比特7作为输入输出,则TRISB必须具有以下值;
任何未使用的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的一个方框图,通过图中我们可以看到芯片内置的一些功能,包括芯片内部的结构单元。
10 PIC16F877A芯片手册
•PIC16F877A中的每个外围设备都需要使用SFRs配置。
•PIC16F877A的数据表包括所有配置SFR所需的信息。
•每个外围设备都有单独的章节。
•每章末尾有一个表格,说明哪些SFR(及其位)与之关联外围设备
|
感谢楼主分享,学到很多东西