精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在XC8中使用PIC IO引腳

454398 ? 來源:工程師吳畏 ? 2019-07-26 09:24 ? 次閱讀

原理圖

如何在XC8中使用PIC IO引腳

配置位

大多數(shù)PIC程序在main.c文件的最頂部都有一個配置代碼塊。大部分內(nèi)容在相關(guān)之前不會被覆蓋,但重要的是在main.c文件中放入相同的代碼(如下所示)。

原因是PIC具有硬件(例如看門狗定時器)可以重置設(shè)備,這可能會導(dǎo)致意外的結(jié)果。因此,此處的配置代碼完全禁用所有這些額外功能,以確保它們不會妨礙您!

但是如果您很好奇,可以通過單擊生產(chǎn)》設(shè)置配置位來生成自己的配置代碼。

這將打開以下窗口,可用于更改位。完成所有更改后,單擊“生成源代碼以輸出”。然后,這將在輸出窗口中生成可以復(fù)制到主文件的代碼!

配置振蕩器

當我們用C編寫程序時,有些事情我們不必考慮,例如計算機將如何與鍵盤對話或CPU正在使用什么振蕩器。但是,微控制器與日常計算機不同,它們需要一定程度的配置才能正常運行。那么我們需要配置什么才能使PIC運行?通常,在運行主循環(huán)之前需要執(zhí)行兩個主要的配置代碼:振蕩器配置和I/O配置。

PIC器件由許多不同的模塊組成,包括定時器,存儲器和I/O外設(shè),但最重要的是CPU。 CPU或中央處理單元是實際以指令形式執(zhí)行操作的電路。當我們?yōu)檫\行的芯片創(chuàng)建C程序時,編譯器將C程序轉(zhuǎn)換為PIC的CPU可以理解的指令。與現(xiàn)有的其他CPU一樣,PIC中的CPU以離散的步驟工作,而不是瞬間完成。要使CPU執(zhí)行這些步驟(運行程序),需要一個時鐘源。該時鐘源可以來自外部振蕩器,晶振,甚至是PIC內(nèi)部的內(nèi)部振蕩器。為了簡化電路,這里的大多數(shù)項目都會將PIC配置為使用內(nèi)部振蕩器。

在PIC芯片上配置振蕩器要求我們調(diào)用一些特定指令并配置特定配置位。根據(jù)您使用的PIC,這將有所不同,因此本文中的代碼僅考慮PIC16F819。我們的主文件(在上一篇文章中創(chuàng)建)中的第一個任務(wù)是確保我們的振蕩器配置位設(shè)置為使用內(nèi)部振蕩器。

PIC16F819內(nèi)部振蕩器配置

設(shè)置該位不能配置振蕩器運行的速度;它只告訴PIC它將運行內(nèi)部振蕩器。

下一步是設(shè)置振蕩器的速度。由于PIC會逐步執(zhí)行指令,并且這些步驟發(fā)生在來自振蕩器的脈沖上,因此更快的振蕩器將導(dǎo)致更快的PIC,這意味著它將能夠每秒執(zhí)行更多指令。但有多少? PIC16和PIC18器件通常需要四個時鐘周期來執(zhí)行指令,因此經(jīng)驗法則是將振蕩器速度除以4,這就是PIC每秒指令的速度。

例如一個工作在8MHz的PIC每秒可以執(zhí)行大約200萬條指令,而工作在64MHz的PIC每秒可以執(zhí)行1600萬條指令。

那么,我們?nèi)绾闻渲盟俣龋窟@取決于每個PIC,但通常有一個名為OSCCON的寄存器可用于調(diào)整速度。找出所涉及寄存器的最佳方法是查看振蕩器配置章節(jié)下的器件數(shù)據(jù)表。以下是PIC16F819數(shù)據(jù)手冊中的摘錄,描述了第38頁上的不同速度(PDF)。

我們將配置我們的設(shè)備以8MHz運行,要做到這一點,我們需要將IRCF設(shè)置為111.在XC8中,可以使用它們的名稱直接訪問寄存器,可以使用位和點指令訪問特定位,并且可以訪問一組位(例如IRCF)作為單個值,如下所示。

OSCCON = 0b01110000(為整個OSCCON寄存器賦值)

OSCCONbits.IRCF = 0b111(將三個IRCF位分配給111)

OSCCONbits.IRCF0 = 1(為IRCF0指定二進制值1)

在我們的代碼中,我們將使用以下指令將振蕩器設(shè)置為8MHz:

配置和使用I/O端口

為了使我們的PIC能夠與外部電路進行交互,它需要能夠讀取和寫入其I/O引腳的數(shù)據(jù)。在處理PIC16F819上的I/O端口時,我們需要關(guān)注三個寄存器:

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

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

ADCON1寄存器(引腳是數(shù)字引腳還是模擬輸入引腳)

在我們的大多數(shù)項目中,我們將處理數(shù)字輸出(如LED,顯示器等),因此務(wù)必確保I/O引腳未配置為模擬輸入。為確保這一點,我們將查看ADCON1寄存器(見第82頁(PDF))并設(shè)置相應(yīng)的PCFG位,以便與ADC相關(guān)的所有引腳都是數(shù)字引腳。

在我們的電路中,我們有一個LED輸出連接到RB2(引腳8),因此我們需要將其配置為輸出。為此,我們使用TRIS(TRISTATE)寄存器,該寄存器用于確定哪些引腳是輸入,哪些是輸出。

PIC上的每個端口最多可以為8位寬(RB0-RB7用于示例)并且TRIS寄存器中的每個位對應(yīng)于輸出引腳。如果某位為1(打開),則后續(xù)引腳為輸入,如果某位為0(關(guān)閉),則該位為輸出。

例如,如果TRISB等于0,則全部為8 PORT B上的引腳將是輸出。如果TRISB = 255(二進制為11111111),則PORT B上的所有引腳都是輸入。如果TRISB的值為0xF0(二進制為11110000),則PORT B(RB0-RB3)中的前四個引腳為輸出,后四個引腳(RB4-RB7)為輸入。請記住,二進制數(shù)首先從最右邊讀取!

有了這些知識,我們需要將RB2配置為輸出。這可以使用TRISB寄存器名稱并訪問TRISB2位來完成,如下所示。

但我們?nèi)绾巫x寫I/O銷?這在其他PIC上可能略有不同,但在PIC16F819上我們使用PORT寄存器,我們再次使用位和點訪問各個引腳!

端口引腳不限于一次讀取一個。您可以改為對整個PORT寄存器進行讀寫操作。這意味著您可以將PORT用作8位輸入/輸出端口,這在與字母數(shù)字LCD顯示器等設(shè)備交互時非常有用。

您可能想要記住的一個簡潔功能是您可以隨時配置I/O引腳!一分鐘你的引腳可能是一個輸入引腳,下一個它可能是一個輸出!重要的是你設(shè)置了TRIS位的正確值。

示例程序

本示例程序配置PIC16F819讀取連接到其引腳RA0(引腳17)的觸覺開關(guān),然后打開/關(guān)閉RB2上的LED(引腳) 8),取決于開關(guān)的狀態(tài)。

雖然這個例子看起來很基本,但你現(xiàn)在應(yīng)該可以編寫一個PIC設(shè)備來運行你的C程序和讀/寫端口。這已經(jīng)允許您與市場上的大多數(shù)硬件接口,并且您可以開始與您自己的電路和項目進行交互!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • PIC
    PIC
    +關(guān)注

    關(guān)注

    8

    文章

    507

    瀏覽量

    87479
  • XC8
    XC8
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    13502
收藏 人收藏

    評論

    相關(guān)推薦

    何在智能手機系統(tǒng)中使用bq27505

    電子發(fā)燒友網(wǎng)站提供《如何在智能手機系統(tǒng)中使用bq27505.pdf》資料免費下載
    發(fā)表于 10-17 10:21 ?0次下載
    如<b class='flag-5'>何在</b>智能手機系統(tǒng)<b class='flag-5'>中使</b>用bq27505

    何在MSP430?MCU中使用智能模擬組合

    電子發(fā)燒友網(wǎng)站提供《如何在MSP430?MCU中使用智能模擬組合.pdf》資料免費下載
    發(fā)表于 09-14 10:19 ?0次下載
    如<b class='flag-5'>何在</b>MSP430?MCU<b class='flag-5'>中使</b>用智能模擬組合

    何在反向降壓-升壓拓撲中使用TPS6290x

    電子發(fā)燒友網(wǎng)站提供《如何在反向降壓-升壓拓撲中使用TPS6290x.pdf》資料免費下載
    發(fā)表于 09-13 10:07 ?0次下載
    如<b class='flag-5'>何在</b>反向降壓-升壓拓撲<b class='flag-5'>中使</b>用TPS6290x

    EN8F1823E完全替代PIC16F883,PIC16F1883,PIC16F1936,PIC16F1937

    PIC
    捷尚微輝芒微MCU單片機
    發(fā)布于 :2024年07月30日 16:59:15

    何在RTOS中使用spi_interface.c?

    何在 RTOS 中使用 spi_interface.c?
    發(fā)表于 07-10 06:29

    請問cmakelists的變量如何在程序中使用?

    大家好, 我有個問題請教,cmakelists.txt的變量如何在程序中使用?比如以下cmakelists.txt文件的PROJECT_VER變量,我如
    發(fā)表于 06-11 07:34

    工業(yè)計算機是什么?如何在不同行業(yè)中使用?

    工業(yè)電腦是專為在工業(yè)環(huán)境中使用而設(shè)計的計算機。它們可用于各個行業(yè),包括制造、運 輸和能源。它們通常比普通計算機更強大,并且能夠在大多數(shù)計算機無法運行的環(huán)境運行。在本文中,我們將更深入地了解什么是工業(yè)計算機以及它們?nèi)?b class='flag-5'>何在不同行業(yè)
    的頭像 發(fā)表于 04-01 15:45 ?751次閱讀
    工業(yè)計算機是什么?如<b class='flag-5'>何在</b>不同行業(yè)<b class='flag-5'>中使</b>用?

    何在CY8CMBR3110-SX2I中使用pwm控制gpo2亮度?

    何在CY8CMBR3110-SX2I中使用 pwm 控制 gpo2 亮度。
    發(fā)表于 03-05 06:59

    何在測試中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大會 上分享了他如何在測試中使用 ChatGPT。
    的頭像 發(fā)表于 02-20 13:57 ?721次閱讀

    無法在XC8將sprintf(32 位)打印為十六進制怎么解決?

    我有一個“瘋狂”的時刻 - 我無法在 XC8 中將sprintf(32 位)打印為十六進制。 因此,我將相關(guān)代碼部分剪切并粘貼到在線 C 編譯器,在那里它工作正常: C: #include
    發(fā)表于 01-31 08:09

    何在DAVE IDE中使用XMC7200?

    能否在 DAVE IDE 為 XMC 7200 EVK KIT 構(gòu)建應(yīng)用程序。我嘗試打開一個項目但它最多只能顯示 XMC48000。如何在 DAVE IDE 中使用 XMC7200 請幫忙。
    發(fā)表于 01-26 06:32

    何在我的CY8CKIT-062-WIFI-BT中使用Segger AppWizard并導(dǎo)入GUI項目?

    我想知道如何在我的 CY8CKIT-062-WIFI-BT 中使用 Segger AppWizard 并導(dǎo)入 GUI 項目。 我已經(jīng)按照快速入門指南所說的做了,我做了一個AppWizard項目來顯示
    發(fā)表于 01-22 06:19

    何在TC264/TC377中使用FOC呢?

    何在TC264/TC377中使用FOC呢?GTMMOLD 的相關(guān)配置實在太過了混亂了,實在有看不到,沒有什么相關(guān)的中文資料或者開源代碼可供參考。
    發(fā)表于 01-19 07:59

    何在ModustoolBox中使用SEGGER AppWizard GUI生成器軟件和CY8CKIT-062-WIFI-BT?

    我想知道如何在 ModustoolBox 中使用 SEGGER AppWizard GUI 生成器軟件和 CY8CKIT-062-WIFI-BT? 我構(gòu)建了 GUI 并導(dǎo)出了,但我不知道如何在
    發(fā)表于 01-19 06:26

    何在Linux中使用htop命令

    本文介紹如何在 Linux 中使用 htop 命令。
    的頭像 發(fā)表于 12-04 14:45 ?1914次閱讀
    如<b class='flag-5'>何在</b>Linux<b class='flag-5'>中使</b>用htop命令