0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在XC8中使用PIC IO引脚

454398 来源:工程师吴畏 2019-07-26 09:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

原理图

如何在XC8中使用PIC IO引脚

配置位

大多数PIC程序在main.c文件的最顶部都有一个配置代码块。大部分内容在相关之前不会被覆盖,但重要的是在main.c文件中放入相同的代码(如下所示)。

原因是PIC具有硬件(例如看门狗定时器)可以重置设备,这可能会导致意外的结果。因此,此处的配置代码完全禁用所有这些额外功能,以确保它们不会妨碍您!

但是如果您很好奇,可以通过单击生产》设置配置位来生成自己的配置代码。

这将打开以下窗口,可用于更改位。完成所有更改后,单击“生成源代码以输出”。然后,这将在输出窗口中生成可以复制到主文件的代码!

配置振荡器

当我们用C编写程序时,有些事情我们不必考虑,例如计算机将如何与键盘对话或CPU正在使用什么振荡器。但是,微控制器与日常计算机不同,它们需要一定程度的配置才能正常运行。那么我们需要配置什么才能使PIC运行?通常,在运行主循环之前需要执行两个主要的配置代码:振荡器配置和I/O配置。

PIC器件由许多不同的模块组成,包括定时器,存储器和I/O外设,但最重要的是CPU。 CPU或中央处理单元是实际以指令形式执行操作的电路。当我们为运行的芯片创建C程序时,编译器将C程序转换为PIC的CPU可以理解的指令。与现有的其他CPU一样,PIC中的CPU以离散的步骤工作,而不是瞬间完成。要使CPU执行这些步骤(运行程序),需要一个时钟源。该时钟源可以来自外部振荡器,晶振,甚至是PIC内部的内部振荡器。为了简化电路,这里的大多数项目都会将PIC配置为使用内部振荡器。

在PIC芯片上配置振荡器要求我们调用一些特定指令并配置特定配置位。根据您使用的PIC,这将有所不同,因此本文中的代码仅考虑PIC16F819。我们的主文件(在上一篇文章中创建)中的第一个任务是确保我们的振荡器配置位设置为使用内部振荡器。

PIC16F819内部振荡器配置

设置该位不能配置振荡器运行的速度;它只告诉PIC它将运行内部振荡器。

下一步是设置振荡器的速度。由于PIC会逐步执行指令,并且这些步骤发生在来自振荡器的脉冲上,因此更快的振荡器将导致更快的PIC,这意味着它将能够每秒执行更多指令。但有多少? PIC16和PIC18器件通常需要四个时钟周期来执行指令,因此经验法则是将振荡器速度除以4,这就是PIC每秒指令的速度。

例如一个工作在8MHz的PIC每秒可以执行大约200万条指令,而工作在64MHz的PIC每秒可以执行1600万条指令。

那么,我们如何配置速度?这取决于每个PIC,但通常有一个名为OSCCON的寄存器可用于调整速度。找出所涉及寄存器的最佳方法是查看振荡器配置章节下的器件数据表。以下是PIC16F819数据手册中的摘录,描述了第38页上的不同速度(PDF)。

我们将配置我们的设备以8MHz运行,要做到这一点,我们需要将IRCF设置为111.在XC8中,可以使用它们的名称直接访问寄存器,可以使用位和点指令访问特定位,并且可以访问一组位(例如IRCF)作为单个值,如下所示。

OSCCON = 0b01110000(为整个OSCCON寄存器赋值)

OSCCONbits.IRCF = 0b111(将三个IRCF位分配给111)

OSCCONbits.IRCF0 = 1(为IRCF0指定二进制值1)

在我们的代码中,我们将使用以下指令将振荡器设置为8MHz:

配置和使用I/O端口

为了使我们的PIC能够与外部电路进行交互,它需要能够读取和写入其I/O引脚的数据。在处理PIC16F819上的I/O端口时,我们需要关注三个寄存器:

TRISA和TRISB寄存器(端口A和端口B上引脚的方向)

PORTA和PORTB寄存器(输入和输出寄存器)

ADCON1寄存器(引脚是数字引脚还是模拟输入引脚)

在我们的大多数项目中,我们将处理数字输出(如LED,显示器等),因此务必确保I/O引脚未配置为模拟输入。为确保这一点,我们将查看ADCON1寄存器(见第82页(PDF))并设置相应的PCFG位,以便与ADC相关的所有引脚都是数字引脚。

在我们的电路中,我们有一个LED输出连接到RB2(引脚8),因此我们需要将其配置为输出。为此,我们使用TRIS(TRISTATE)寄存器,该寄存器用于确定哪些引脚是输入,哪些是输出。

PIC上的每个端口最多可以为8位宽(RB0-RB7用于示例)并且TRIS寄存器中的每个位对应于输出引脚。如果某位为1(打开),则后续引脚为输入,如果某位为0(关闭),则该位为输出。

例如,如果TRISB等于0,则全部为8 PORT B上的引脚将是输出。如果TRISB = 255(二进制为11111111),则PORT B上的所有引脚都是输入。如果TRISB的值为0xF0(二进制为11110000),则PORT B(RB0-RB3)中的前四个引脚为输出,后四个引脚(RB4-RB7)为输入。请记住,二进制数首先从最右边读取!

有了这些知识,我们需要将RB2配置为输出。这可以使用TRISB寄存器名称并访问TRISB2位来完成,如下所示。

但我们如何读写I/O销?这在其他PIC上可能略有不同,但在PIC16F819上我们使用PORT寄存器,我们再次使用位和点访问各个引脚!

端口引脚不限于一次读取一个。您可以改为对整个PORT寄存器进行读写操作。这意味着您可以将PORT用作8位输入/输出端口,这在与字母数字LCD显示器等设备交互时非常有用。

您可能想要记住的一个简洁功能是您可以随时配置I/O引脚!一分钟你的引脚可能是一个输入引脚,下一个它可能是一个输出!重要的是你设置了TRIS位的正确值。

示例程序

本示例程序配置PIC16F819读取连接到其引脚RA0(引脚17)的触觉开关,然后打开/关闭RB2上的LED(引脚) 8),取决于开关的状态。

虽然这个例子看起来很基本,但你现在应该可以编写一个PIC设备来运行你的C程序和读/写端口。这已经允许您与市场上的大多数硬件接口,并且您可以开始与您自己的电路和项目进行交互!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PIC
    PIC
    +关注

    关注

    8

    文章

    512

    浏览量

    91202
  • XC8
    XC8
    +关注

    关注

    0

    文章

    8

    浏览量

    14730
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    T8xC5121 8 位微控制器:特性、功能与应用全解析

    T8xC5121 8 位微控制器:特性、功能与应用全解析 在电子设计领域,一款性能卓越的微控制器往往能为项目带来事半功倍的效果。T8xC5121 作为一款高性能的 8 位微控制器,融合
    的头像 发表于 04-08 15:00 183次阅读

    深入解析Microchip PIC16F8X系列微控制器

    深入解析Microchip PIC16F8X系列微控制器 在电子工程领域,微控制器是众多项目的核心组件,其性能和特性直接影响着整个系统的表现。今天,我们将深入探讨Microchip的PIC16F8
    的头像 发表于 04-08 09:10 532次阅读

    何在 S32 配置工具添加 ADC 并在 Simulink 中使用?

    对于 S32K3,如何在 S32 配置工具添加 ADC 并在 Simulink 中使用?
    发表于 04-07 07:09

    基于 AT8xC51SND1C 的单芯片解决方案:功能、应用与设计要点

    基于 AT8xC51SND1C 的单芯片解决方案:功能、应用与设计要点 在当今数字化音频和多媒体应用的浪潮,对高效、集成度高的解决方案的需求日益增长。AT8xC51SND1C 系列单芯片闪存
    的头像 发表于 04-05 16:50 1095次阅读

    Atmel TS8xC51Rx2:高性能8位微控制器的卓越之选

    Atmel TS8xC51Rx2:高性能8位微控制器的卓越之选 在电子工程领域,微控制器是众多应用的核心。Atmel的TS8xC51Rx2系列微控制器以其高性能和丰富的特性,为工程师们提供了强大
    的头像 发表于 04-05 15:10 641次阅读

    何在S32K322的ADC1中使用mcal,通过硬件触发同时获得正常ADC和注入ADC的值?

    请告诉我,如何在S32K322的ADC1中使用mcal,通过硬件触发同时获得正常ADC和注入ADC的值?需要哪些功能?
    发表于 03-31 06:18

    8XC51FX:高性能8位单片机的全方位解析

    的特点、功能以及使用的注意事项。 文件下载: EE80C51FA24SF88.pdf 一、产品概述 8XC51FX是一系列高性能的CHMOS单芯片8位微控制器,包括87C51FA、83C51FA
    的头像 发表于 03-29 13:15 237次阅读

    Infineon XC87xCLM 8位单片机:功能、特性与应用深度解析

    Infineon XC87xCLM 8位单片机:功能、特性与应用深度解析 在电子工程领域,单片机作为核心控制部件,其性能和特性直接影响着产品的功能和稳定性。Infineon的XC87xCLM
    的头像 发表于 03-29 12:15 335次阅读

    英飞凌XC835/836 8位单片机:特性、参数与应用解析

    英飞凌XC835/836 8位单片机:特性、参数与应用解析 在当今的电子设计领域,单片机作为核心控制元件,其性能和特性对整个系统的设计和运行起着至关重要的作用。英飞凌的XC835/836 8
    的头像 发表于 03-29 12:05 338次阅读

    Infineon XC822/824 8位单片机:特性、参数与应用解析

    Infineon XC822/824 8位单片机:特性、参数与应用解析 在电子设计领域,选择一款合适的单片机至关重要。Infineon的XC822/824 8位单片机,以其丰富的特性和
    的头像 发表于 03-29 12:05 284次阅读

    数据采集IO卡设计原理图:136-KC705E增强版基于FMC接口的 Kintex-7 XC7K325T PCIeX8 接口卡

    FMC子卡模块, Kintex-7 XC7K325T板卡, 高速信号处理, 软件无线电处理平台, 数据采集IO
    的头像 发表于 02-14 10:27 240次阅读
    数据采集<b class='flag-5'>IO</b>卡设计原理图:136-KC705E增强版基于FMC接口的 Kintex-7 <b class='flag-5'>XC</b>7K325T PCIeX<b class='flag-5'>8</b> 接口卡

    深入解析英飞凌XC835/836 8位单片机:特性、参数与应用考量

    深入解析英飞凌XC835/836 8位单片机:特性、参数与应用考量 在当今的电子设计领域,单片机作为核心控制元件,广泛应用于各种电子设备。英飞凌的XC835/836
    的头像 发表于 02-10 11:05 661次阅读

    何在AMD Vitis Unified IDE中使用系统设备树

    您将在这篇博客中了解系统设备树 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 维护来自 XSA 的硬件元数据。本文还讲述了如何对 SDT 进行操作,以便在 Vitis Unified IDE
    的头像 发表于 11-18 11:13 3296次阅读
    如<b class='flag-5'>何在</b>AMD Vitis Unified IDE<b class='flag-5'>中使</b>用系统设备树

    何在VS code配置Zephyr集成开发环境

    上一篇文章介绍了如何在VS code中使用瑞萨官方插件为RA芯片创建项目与项目调试,相信大家对RA在VS code的开发有了基础的了解。
    的头像 发表于 11-05 14:46 1749次阅读
    如<b class='flag-5'>何在</b>VS code<b class='flag-5'>中</b>配置Zephyr集成开发环境

    何在vivadoHLS中使用.TLite模型

    本帖欲分享如何在vivadoHLS中使用.TLite模型。在Vivado HLS中导入模型后,需要设置其输入和输出接口以与您的设计进行适配。 1. 在Vivado HLS项目中导入模型文件 可以
    发表于 10-22 06:29