在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

ATmega芯片以及I/O引腳的簡單說明

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

原理圖

ATmega芯片以及I/O引腳的簡單說明

AVR Core

大多數ATmega設備的核心是AVR CPU,它被描述為RISC型CPU。然而,盡管是RISC CPU,AVR內核可以說非常強大,并且與競爭器件(例如Microchip PIC系列)相比具有許多優勢。

例如,AVR內核包含通用的8位寄存器可以配對為內存位置創建16位指針。此外,AVR內核有超過130條指令,其中許多是單周期的(由于一級管道),并且沒有方案。

然而,AVR設備特別容易發生磚塊化用戶開始使用保險絲(特定芯片選項),這就是為什么強烈建議您手頭有多個AVR設備。 AVR器件的另一個問題是如果沒有購買官方編程器,他們很難進行芯片編程(例如與PICKIT3相比)。

盡管如此,AVR已成為最流行的微控制器之一,謝謝Arduino的發明,其核心包含ATmega。事實上,Arduino只是一個AVR微控制器,帶有一些特殊的啟動加載代碼和一個USB轉串口轉換器

以下是典型ATmega器件的內部架構(在我們的例子中,ATmega168) 。

I/O端口

了解微控制器的內部工作情況很好,但知道如何讓芯片與外界交流是很好的。大多數微控制器(如果不是全部)都包含引腳,允許器件讀取和寫入外部電路的數字值。例如,LED可以連接到I/O(帶有串聯電阻),這將允許微控制器打開和關閉LED。另一個例子是一個開關,它可以連接在引腳和電源之間,微控制器可以在檢測到開關被按下時執行動作。

當然,微控制器可以連接到幾乎任何電路,并以您可能想象的任何方式與它進行交互。但要做到這一點,我們需要了解I/O端口如何在AVR設備上工作以及如何正確使用它們!

I/O端口包含三個寄存器:

DDRx - 端口x的數據方向寄存器

PINx - 從端口x讀取

PORTx - 寫入端口x

數據方向寄存器

數據方向寄存器(DDR)很可能是您配置的第一個寄存器,因為DDR寄存器確定特定端口上的引腳是輸入還是輸出。 DDR寄存器長8位,每個位對應I/O端口的引腳。

例如,DDRB的第一位(位0)將決定PB0是輸入還是輸出,最后一位(第7位)將確定PB7是輸入還是輸出。

在PIC器件中,值1用于輸入,值0用于輸出,但對于AVR器件則反之亦然; 1表示輸出,0表示輸入。因此,假設我們想要將PORT B上的所有引腳配置為輸出,我們只需使用以下代碼:

DDRB = 0xFF;

DDRB = 0b11111111;

第一個示例使用十六進制,而第二個示例使用二進制。雖然通常的做法是使用十六進制,但二進制版本可以更清楚地將端口中的哪些位用作輸入或輸出。如果我們想將PORT B上的所有引腳轉換為輸入引腳,那么我們可以使用。。.。。.

DDRB = 0x00;

DDRB = 0b00000000;

更復雜的事情怎么樣?假設您希望前兩個引腳為輸出(PB0和PB1),其余引腳為輸入。以下代碼可以解決這個問題:

DDRB = 0x03;

DDRB = 0b00000011;

PINx寄存器

我們的DDR寄存器排序out,是時候學習如何從現實世界中將數字值讀入微控制器。這是使用寄存器PINx完成的,其中x是要讀取的寄存器。從端口讀取相當容易,如下面的代碼示例所示:

dataValue = PINB;

執行此操作時,PORT B上的所有引腳都被讀入dataValue,并且dataValue中的每個位現在將對應于讀取時每個引腳上的數字電平。雖然這可能很有用,但我們有時可能希望同時測試單個位而不是所有位。在PIC中,.bits成員可用于訪問各個位,但AVR設備不是這種情況。相反,訪問單個位涉及一些操作(原諒雙關語),包括使用邏輯AND,OR和XOR。

要測試一個位是否打開(邏輯1),以下兩個可以使用語句。這些函數對PIN寄存器和位執行邏輯AND(表示為8位數)。如果結果為零,則不會執行if語句,因為if語句僅在條件為非零時執行。第一個語句使用二進制值來表示要測試的位,而第二個語句使用邏輯移位指令來創建位掩碼,該掩碼表示要測試的位。邏輯移位版本可以說更具可讀性,因此更容易理解。但是,執行該指令可能需要比第一次更長的時間(取決于優化)。

if(PINB&(0b00000001))

if(PINB&(1 《

在主要測試(!)

if(!(PINB&(0b00000001)))

或《之前使用否定運算符可以輕松地測試邏輯0 br》 if(!(PINB&(1 《

PORTx寄存器

現在我們可以讀取整個端口和各個引腳,我們如何寫入端口和單個引腳?這是PORTx寄存器的用武之地。寫入該寄存器(其中x表示要寫入的端口)將導致輸出引腳打開或關閉。請記住,物理輸出引腳只有與PORTx寄存器IF對應的數字電平,只有相應的DDR位被設置為輸出!

將值寫入端口非常容易:

PORTB = 0xFF;

PORTB = 0b11111111;

但個別位怎么樣?這再次使用按位運算符完成,并且設置/清除位稍微復雜一些。這是因為我們需要保留PORT寄存器中其他位的值,否則它們可能會被更改,如果它們連接到外部設備(如LED,顯示器,IC等),可能會導致意外行為。

要打開特定位,我們可以使用OR邏輯運算符:

PORTB = PORTB | (0b00000001);打開位0

PORTB = PORTB | (1 《

要關閉特定位,我們使用AND運算符和NOT運算符(?):

PORTB = PORTB& ?(0b00000001);關閉位0

PORTB = PORTB& ?(1 《

要切換一點(以便它與以前相反)我們可以使用XOR運算符:

PORTB = PORTB ^(0b00000001);切換位0

o r

PORTB = PORTB ^(1 《

引腳名稱

使用數字來表示引腳可能會導致某些不可讀代碼,這就是為什么WinAVR足夠好,可以包含一些我們可以使用的定義。請參閱以下示例:

PORTB = PORTB& ?(1 《

如果(PINC&(1 《

一個簡單的例子

在我們的例子中,我們將制作一個電路當按下連接到PD1的開關時,切換連接到PD0的LED。

/*

* AVR IO.c

*

* Created: 03/01/2018 11:25:21

* Author : RobinLaptop

*/

#define F_CPU 1000000UL

#include

#include

int main(void)

{

// Configure PORT D bit 0 to an output and bit 1 to an input

DDRD = 0b00000001;

// Main program loop

while (1)

{

// Wait until the switch found on PIND1 (bit 1)

if(PIND & (1 《《 PIND1))

{

// Toggle the LED found on PIND0

PORTD = PORTD ^ (1 《《 PIND0);

// Force a delay to prevent de-bounce!

_delay_ms(100);

// Wait until the button is released

while(PIND & (1 《《 PIND1));

}

}

}

結論

現在我們可以控制I/O引腳了,沒有理由不能在復雜控制器可以使用的項目中開始使用AVR。使用本文中的知識,您可以創建一個鍵盤輸入系統,一個復雜的7段顯示控制器,一個音樂系統,甚至是一個基本的80年代風格的計算機。

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

    關注

    2

    文章

    79

    瀏覽量

    42858
收藏 人收藏

    評論

    相關推薦

    直接I/O

    電子發燒友網站提供《直接I/O庫.pdf》資料免費下載
    發表于 10-14 10:55 ?0次下載
    直接<b class='flag-5'>I</b>/<b class='flag-5'>O</b>庫

    物聯網中常見的I/O擴展電路設計方案_IIC I/O擴展芯片

    物聯網系統中為什么要使用 IIC I/O擴展芯片 ??在物聯網系統中使用IIC(也稱為I2C)I/O
    的頭像 發表于 09-24 11:29 ?588次閱讀
    物聯網中常見的<b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展電路設計方案_IIC <b class='flag-5'>I</b>/<b class='flag-5'>O</b>擴展<b class='flag-5'>芯片</b>

    保護I/O模塊免受浪涌事件的影響

    電子發燒友網站提供《保護I/O模塊免受浪涌事件的影響.pdf》資料免費下載
    發表于 09-21 10:14 ?0次下載
    保護<b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊免受浪涌事件的影響

    用SN6507優化PLC I/O模塊的24V隔離電源設計應用說明

    電子發燒友網站提供《用SN6507優化PLC I/O模塊的24V隔離電源設計應用說明.pdf》資料免費下載
    發表于 09-12 09:52 ?0次下載
    用SN6507優化PLC <b class='flag-5'>I</b>/<b class='flag-5'>O</b>模塊的24V隔離電源設計應用<b class='flag-5'>說明</b>

    區域架構和 MCU I/O 擴展

    電子發燒友網站提供《區域架構和 MCU I/O 擴展.pdf》資料免費下載
    發表于 09-09 10:51 ?0次下載
    區域架構和 MCU <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 擴展

    MSP430 I/O口驅動段式LCD設計說明

    電子發燒友網站提供《MSP430 I/O口驅動段式LCD設計說明.pdf》資料免費下載
    發表于 08-30 10:39 ?1次下載
    MSP430 <b class='flag-5'>I</b>/<b class='flag-5'>O</b>口驅動段式LCD設計<b class='flag-5'>說明</b>

    簡述計算機的I/O控制方式

    計算機的I/O(輸入/輸出)控制方式是計算機系統中至關重要的部分,它決定了CPU與外設之間數據交換的方式和效率。隨著計算機技術的不斷發展,I/O控制方式也經歷了從
    的頭像 發表于 08-20 10:55 ?1337次閱讀

    淺談如何克服FPGA I/O引腳分配挑戰

    形式顯示出PCB布局和FPGA物理器件引腳以及內部FPGA I/O點和相關資源。不幸的是,到今天為止還沒有單個工具或方法能夠同時滿足所有這些協同設計需求。然而,可以結合不同的技術和策
    發表于 07-22 00:40

    PLC的I/O點數是什么意思

    在工業自動化領域中,可編程邏輯控制器(PLC)扮演著至關重要的角色。PLC以其高可靠性、易編程性和強大的控制功能,廣泛應用于各種自動化系統中。而在PLC的性能參數中,I/O點數是一個不可忽視的重要指標。本文將對PLC的I/
    的頭像 發表于 06-27 11:15 ?4784次閱讀

    便攜儲能中種類豐富的I/O接口芯片

    電子發燒友網報道(文/黃山明)接口芯片,又稱為I/O接口芯片,是嵌入在電子設備中的集成電路,其主要功能是作為中介,實現設備內部的處理器(如CPU)與外部設備之間的溝通與數據交換。它們在
    的頭像 發表于 06-18 01:31 ?3000次閱讀

    軟件可配置模擬 I/O 的設計理念

    作者: Kenton Williston 曾幾何時,模擬 I/O 就是最專業、功能最固定的硬件。例如,電流驅動器和電壓傳感器是完全不同的零件,試圖顛倒其角色可謂是荒謬至極。 軟件可配置模擬 I/
    的頭像 發表于 05-05 11:10 ?920次閱讀
    軟件可配置模擬 <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的設計理念

    求助,關于CX3上未使用的I/O引腳簡單問題

    這是一個關于 CX3 上未使用的 I/O 引腳簡單問題。CYUSB306X 數據表(第 20 頁)建議 \" 應使用內部上拉電阻 \" 將所有未使用的
    發表于 02-22 06:55

    FANUC外部I/O點數不夠用了怎么辦?可以擴展I/O點數嗎?

    連接起來,以便進行輸入和輸出操作。每個I/O模塊都有一定數量的輸入和輸出點數,這取決于具體的模塊型號。但是,當您的應用需要更多的I/O點數時,您可以使用以下方法來擴展: 1. 增加
    的頭像 發表于 02-18 15:21 ?2008次閱讀

    空調制熱原理簡單說明 空調制熱開輔熱和不開輔熱的區別

    空調制熱原理簡單說明: 空調制熱是利用空調系統中的制冷循環來實現的。制冷循環是根據熱力學原理,通過改變制冷劑的狀態變化,將室內熱量轉移到室外,從而降低室內溫度。而在冬季,我們需要提高室內溫度,因此
    的頭像 發表于 02-04 15:08 ?1555次閱讀

    如何確定芯片的方向 最簡單芯片原理

     最簡單芯片原理可以使用邏輯門芯片說明。邏輯門芯片是由幾個晶體管組成的電路,用于執行基本的邏輯運算。   最
    的頭像 發表于 01-25 15:47 ?1.5w次閱讀
    如何確定<b class='flag-5'>芯片</b>的方向 最<b class='flag-5'>簡單</b>的<b class='flag-5'>芯片</b>原理
    主站蜘蛛池模板: 四虎最新地址| 日日噜噜夜夜狠狠久久丁香| h视频国产| 一级毛片日韩a欧美| 欧美一卡2卡三卡四卡五卡 | 欧美精品黑人性xxxx| zsvdy午夜片| 婷婷国产成人久久精品激情| 日韩孕交| 亚洲狠狠婷婷综合久久久久图片 | h黄网站| 欧美成年性色mmm| 亚洲色图综合图区| 日韩三级中文| 国产在线色视频| 午夜精品久久久| 港台无码| 男女交性高清视频无遮挡| 午夜三级国产精品理论三级| 人与牲动交xxxxbbbb| 国模私拍一区二区三区| 午夜免费看视频| yy6080亚洲半夜理论一级毛片| 天堂8在线天堂资源在线| 五月婷婷婷婷婷| 久久国产精品99精品国产987 | 你懂得视频在线| www.av在线免费观看| 免费任我爽橹视频在线观看| 欧美性妇| 亚洲最新在线| 男人的天堂网在线| 夜色福利视频| 性欧美xx| 亚洲图片欧美色图| 欧美乱论视频| 亚洲精品在线视频| 男人操女人视频网站| 婷婷综合久久中文字幕蜜桃三| 久久精品国产四虎| 人人玩人人添天天爽|