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

    文章

    511

    浏览量

    90459
  • XC8
    XC8
    +关注

    关注

    0

    文章

    8

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    IO8种工作模式和应用

    在芯片设计IO口(输入/输出端口)是微控制器(MCU)或处理器与外部设备交互的关键接口。IO口的工作模式通常由芯片的硬件设计和软件配置决定,不同的工作模式适用于不同的应用场景。 工作模式典型
    发表于 11-14 06:46

    将JTAG引脚用作普通IO

    将JTAG引脚用作普通IO时,需要通过复用功能重映射来释放调试接口占用的引脚资源。 void JTAG_To_GPIO_Config(void) { // 关闭JTAG功能(保留SWD调试接口
    发表于 11-13 06:39

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

    上一篇文章介绍了如何在VS code中使用瑞萨官方插件为RA芯片创建项目与项目调试,相信大家对RA在VS code的开发有了基础的了解。
    的头像 发表于 11-05 14:46 1089次阅读
    如<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

    PIC16F18056/76:功能丰富的8位微控制器及其在传感器与实时控制的应用

    Microchip Technology PIC16F18056和PIC16F18076 8位微控制器具有一整套数字和模拟外设,支持成本敏感型传感器和实时控制应用。这些MCU采用28引脚
    的头像 发表于 10-14 09:33 382次阅读
    <b class='flag-5'>PIC</b>16F18056/76:功能丰富的<b class='flag-5'>8</b>位微控制器及其在传感器与实时控制<b class='flag-5'>中</b>的应用

    请问如何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?

    何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?
    发表于 08-20 06:29

    按钮式智能负载开关XC6193/XC6194系列概述

    支持按钮操作的智能负载开关 IC“XC6193/XC6194 系列”!
    的头像 发表于 06-06 11:29 950次阅读

    何在SPI8中使用SSEL1而不是SSEL0?

    我正在使用LPC55S69开发板,并尝试使用其 SPI 接口来控制设备。 我使用 FLEXCOMM 8 进行此应用。它与 ssel0 配合得很好,在通信过程它被正确地拉下。 然后我尝试切换
    发表于 04-02 08:02

    在imx93,如何在flexio引脚模拟spi功能?

    何在 flexio 引脚模拟 spi 功能?我看到了实现 I2C 的文档,但没有看到 SPI 的文档。也搜索了内核。谁能提供任何文档或示例来开始仿真 SPI?
    发表于 03-21 06:59

    何在USB视频类(UVC)框架中使用EZ-USB™FX3实现图像传感器接口USB视频类(UVC)

    电子发烧友网站提供《如何在USB视频类(UVC)框架中使用EZ-USB™FX3实现图像传感器接口USB视频类(UVC).pdf》资料免费下载
    发表于 02-28 17:36 2次下载

    Microchip推出MPLAB® XC统一编译器许可证 更高效的管理多个许可证

    MPLAB XC8XC16、XC-DSC 和 XC32 C 编译器的 MPLAB XC 统一编译器许可证 。该解决方案整合了必要的许可证
    的头像 发表于 02-25 17:35 1432次阅读

    何在MATLAB中使用DeepSeek模型

    在 DeepSeek-R1(https://github.com/deepseek-ai/DeepSeek-R1) AI 模型横空出世后,人们几乎就立马开始询问如何在 MATLAB 中使用这些模型
    的头像 发表于 02-13 09:20 4079次阅读
    如<b class='flag-5'>何在</b>MATLAB<b class='flag-5'>中使</b>用DeepSeek模型

    适用于PIC MCU的MPLAB XC8 C编译器用户指南

    电子发烧友网站提供《适用于PIC MCU的MPLAB XC8 C编译器用户指南.pdf》资料免费下载
    发表于 01-22 16:45 0次下载
    适用于<b class='flag-5'>PIC</b> MCU的MPLAB <b class='flag-5'>XC8</b> C编译器用户指南

    何在Windows中使用MTP协议

    、图片等)的通信协议,它被广泛用于Android设备。以下是如何在Windows中使用MTP协议的详细步骤: 1. 确保设备支持MTP 首先,你需要确认你的设备支持MTP协议。大多数现代Android
    的头像 发表于 01-03 10:26 4450次阅读