PIC 16F18系列单片机开发 IO口配置与stm32的区别

简介: PIC 16F18系列单片机开发 IO口配置与stm32的区别

前言

由于在之前学习嵌入式IDE时候都是直接接触到的是STM32 ARM内核的32位看偏激,现在开发使用的是美国微芯公司推出的PIC系列的单片机,这对于有经验的工程师而言已经没有什么,但是对于我这个刚开始出来参加工作的,对于不同的单片机之间的配置方式的不同,还是觉得有必要记录下来的,这对于自己的学习以及以后后面的开发都会有所帮助,毕竟工作经验都是要积累起来的嘛!

PIC单片机配置字

  在PIC系列的单片机当中,其中的内部大豆油设置一个特殊的程序存储单元,地址为2007,由单片机的用户自由配置,用来定义一些单片机功能电路单元的性能选项,我们就会将这一些单元叫做器件配置字(Configuration Bits)。

PIC单片机在烧写必须配置字,配置字还必须要正确,如PIC单片机有四种可选振荡方式,RC、XT、HS、LP,这样你就必须根据你的设计电路图选择方式,选择好配置字,芯片才能工作,配置字选的不对,芯片就不能正常工作。

用途:


上图是PIC16F877配置字的情形,对配置字的各位的解释是:


CP1-CP0:代码保护位,说明如下:


11 = 代码保护关;


10 = 参见器件数据手册;


01 = 参见器件数据手册;


00 = 所有存储器均受代码保护。


注:有些器件使用较多或较少的位数来配置代码保护。目前就一些只使用一位(CP0) 的器件,保护位的说明如下:


1 = 代码保护关;


0 = 代码保护开。


DP:数据EEPROM 存储器的代码保护位,说明如下:


1 = 代码保护关;


0 = 数据EEPROM 存储器受代码保护。


注:对于具有数据EEPROM 存储器的ROM 程序存储器器件,使用该位。BODEN:欠压复位(BOR) 使能位,说明如下:


1 = BOR 使能;


0 = BOR 禁止。


PWRTE:上电定时器(PWRT) 使能位,说明如下:


1 = PWRT 禁止;


0 = PWRT 使能。


注1:无论PWRTE 位的值为何,使能欠压复位即自动使能了上电定时器(PWRT)。请确保使能欠压复位时,也使能了上电定时器。


注2:在一些早期的PICmicro? 单片机中,该位的极性被保留。


MCLRE:MCLR 引脚功能选择位,说明如下:


1 = 引脚功能为MCLR;


0 = 引脚功能为数字I/O,MCLR 在内部连接到VDD 上。


WDTE:看门狗定时器(WDT) 使能位,说明如下:


1 = WDT 使能;


0 = WDT 禁止。

电路需要IO口来发挥作用

我们知道,一个单片机只要有最小的系统,单片机就可以工作了,然而我们回到单片机发挥作用的话,还得考引脚。比如想要LED灯亮起来,那么我们就要将二极管进行导通,就比如要将副段设为低电位,让二极管亮起来,就需要在正端加上高电平,这样LED灯才会亮起来。所以我们可以通过某个引脚控制输出电平的高低,从而来控制led灯的亮灭。高位亮,低为灭。

寄存器和特殊功能寄存器

我们可以看下图:PIC16F18344芯片:


上面这个部分叫做特殊功能寄存器,他们有特定的用途,像PORTA、TRISA就是用来配置IO口端口的,像TCON等等这一类的寄存器是用来与定时器有关的。旁边的这个16进制数就是寄存器的地址。

I/O口

什么是io口,这个就是单片机而言最为核心的东西,其实单片机当中矗了模数、数模转换之外,其他大部分的事情都是可以使用IO口来完成。单片机在大部分应用当中做的事情,莫过于输入高低电平,输出高低电平,就是通过这一些简单的控制电平来实现大多数的应用控制。


I代表了输入,O代表了输出;那么IO具体能做什么呢?IO口输出一个高低电平可以点亮一个LED灯,可以接通一个继电器来启动电机等等,也可以用于通信等等,输入一个高低电平可以用来检测按键,也可以用来检测红外线输入,检测信号等等。

I/O口和单片机内部寄存器之间的对应关系

我们可以从相关的文档、开发手册来看到这一些端口都有用于控制器操作的10个校准的寄存器,他们分别是:

三个标准的工作寄存器:


• PORTx寄存器(读取器件引脚的电平)


• LATx寄存器(输出锁存器)


• TRISx寄存器(数据方向)


还有一些端口


• ANSELx寄存器(模拟选择)


• WPUx寄存器(弱上拉)


• INLVLx(输入电平控制)


• SLRCONx寄存器(压摆率)


• ODCONx寄存器(漏极开路 )


所以我们要进行配置的时候:


1、先配置ANSELx,将IO口定义为摸你还是数字;


2、在进行配置TRISx,将这个IO口定义为输入还是输出;


3.如果定义IO是输入,要得到IO端口的实际电平,那么就要读取PORTx寄存器;如果定义的是IO输出,那么就要通过写LAIx来达到IO口置高还是置低电平操作。


但是要注意的是,如果直接写PORTx,实际上会写到LATx当中,所以一般不会写入PORTx寄存器。如果是直接读取LATx寄存器,读取到的是锁存在GPIOLatch里面的值,而不是真正的端口的值,所以一般也不会读取LATX寄存器。


当某个引脚配置成m模拟IO的时候,必须将其相应的TRISx配置成输入,这才才能读取到引脚上面的外部电压。


相关文章
|
4月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用
|
4月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
702 0
|
1月前
|
自然语言处理 Java 数据处理
Java IO流全解析:字节流和字符流的区别与联系!
Java IO流全解析:字节流和字符流的区别与联系!
76 1
|
2月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
1月前
【寄存器开发速成】半小时入门STM32寄存器开发(二)
【寄存器开发速成】半小时入门STM32寄存器开发(二)
|
1月前
|
芯片
【寄存器开发速成】半小时入门STM32寄存器开发(一)
【寄存器开发速成】半小时入门STM32寄存器开发(一)
|
2月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
4月前
|
存储 Linux 网络安全
Centos安装Docker的详细安装步骤,Docker相关组件:docker-ce-cli、docker-ce和containerd.io的区别
Centos安装Docker的详细安装步骤,Docker相关组件:docker-ce-cli、docker-ce和containerd.io的区别;CentOS7安装DockerCompose;Docker镜像仓库
708 11
|
5月前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
676 2
|
4月前
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用