吴忠躺衫网络科技有限公司

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

    文章

    507

    瀏覽量

    87819
  • XC8
    XC8
    +關注

    關注

    0

    文章

    8

    瀏覽量

    13581
收藏 人收藏

    評論

    相關推薦

    適用于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 ?413次閱讀

    在AFE7225中使用DC耦合時鐘引腳

    電子發燒友網站提供《在AFE7225中使用DC耦合時鐘引腳.pdf》資料免費下載
    發表于 10-26 11:05 ?0次下載
    在AFE7225<b class='flag-5'>中使</b>用DC耦合時鐘<b class='flag-5'>引腳</b>

    何在智能手機系統中使用bq27505

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

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

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

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

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

    何在汽車CAN應用中使用負邊緣觸發觸發器節省電力

    電子發燒友網站提供《如何在汽車CAN應用中使用負邊緣觸發觸發器節省電力.pdf》資料免費下載
    發表于 09-13 10:06 ?0次下載
    如<b class='flag-5'>何在</b>汽車CAN應用<b class='flag-5'>中使</b>用負邊緣觸發觸發器節省電力

    何在新興的低軌衛星應用中使用數字隔離器隔離信號

    電子發燒友網站提供《如何在新興的低軌衛星應用中使用數字隔離器隔離信號.pdf》資料免費下載
    發表于 09-12 09:37 ?0次下載
    如<b class='flag-5'>何在</b>新興的低軌衛星應用<b class='flag-5'>中使</b>用數字隔離器隔離信號

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

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

    何在RTOS中使用spi_interface.c?

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

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

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

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

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

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

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

    何在code通過軟件實時配置各個PWM component的引腳

    PWM component連接到P2.6 P3.0 P3.4 P3.6上,實現下一個功能。 那么請問,如何在code通過軟件實時配置各個PWM component的引腳?能否提供相應的參考例程?
    發表于 02-21 08:00

    何在測試中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大會 上分享了他如何在測試中使用 ChatGPT。
    的頭像 發表于 02-20 13:57 ?802次閱讀
    澳门百家乐官网博| 百家乐官网缩水工具| 利来百家乐官网娱乐| 百家乐桌定制| 大发888官网df888esbgfwz| 皇冠网遮天小说| 有关百家乐官网玩家论坛| 百家乐类游戏平台| 博发百家乐的玩法技巧和规则| 皇冠网最新网址| 百家乐官网桌布9人| 百家乐注册18元体验金| 娱乐城开户送金| 星级百家乐官网技巧| 百家乐要怎么玩啊| 威尼斯人娱乐场内幕| 豪杰百家乐官网现金网| 百家乐官网如何赚洗码| 大发888娱乐场游戏下载| 百家乐官网游戏软件开发| 百家乐五式缆投法| 百家乐必赢术| 图片| 百家乐大小是什么| 博彩排名| 百家乐官网视| 大发888挖掘| 免费下百家乐官网赌博软件| 上市百家乐.评论| 在线百家乐官网有些一| 澳门百家乐娱乐城送彩金| 必博备用| 免费百家乐官网统计工具| 大发888 备用6222.co| 豪华百家乐官网人桌| 百家乐发牌规| 百家乐官网必学技巧| 百家乐试玩1000元| 百家乐官网输了100万| 澳门百家乐游戏下| 破解百家乐官网真人游戏|