PIC32MX220F032B學習筆記之I O口

2021-08-01 22:32:50 字數 2378 閱讀 3796

先說說基礎定義吧:

1.一般要先定義埠的輸入和輸出trisx(資料方向暫存器)

如果相應的trisx的位為0表示為輸出,這個很容易記住,output的第乙個字母o和數字0相象。

如果相應的trisx的位為1表示為輸入,這個很容易記住,input的第乙個字母i和數字1相象。

如:trisb=0b11001010;(二進位制表示0b)注意的是二進位制從右向左數依次為0,1,2...

trisb=0xca;(十六進製制0x)  十六進製制1位換成4位二進位制0xf=0b1111

trisb=202;(十進位制)

他們的效果都是一樣的表示rb7,rb6,rb3,rb1為輸入,其餘(rb5,rb4,rb2,rb0)為輸出。

也可以單獨的對某個位進行操作:

trisabits.trisa7=0;//a端的編號七設定為輸出

trisbbits.trisb1=1;//b端的編號一設定為輸入

1.1也可以用我們實驗例子中所用到的在plib.h標頭檔案中的庫函式

portsetpinsdigitalout(ioport_b, bit_7);//將b端的rb7設為數字輸出埠

順便說一下,pic預設時,引腳是輸入的,即預設時,trisx=0xff.f=1111;

輸出:如果你要用某個引腳控制乙個東東,如讓它高電平或低電平,則這個引腳就得設定為輸出。(例如點亮乙個燈)

輸入:如果你想知道某個引腳是高電平或低電平,則這個引腳就得設定為輸入。還有如果作為ad轉換,相應的引腳就得做為輸入。(例如獲取按鈕的狀態)

2.然後就是設定i/o口的值portx ——— 埠暫存器(可以點亮led燈了)

如果相應的portx的位為1表示為高電位

如果相應的portx的位為0表示為低電位

如:porta=0b10100010; 

或  porta=0xa2;

都表示ra1,ra5,ra7為高電位,其他的為低電位。

同樣也可以單個控制

portbbits.rb6=1;//b端的rb6為高電位

2.1也可以用我們實驗例子中所用到的在plib.h標頭檔案中的庫函式

portsetbits(ioport_b,bit_7|bit_8|bit_9);//將b端io口的rb7,rb8,rb9置1高電位

portclearbits(ioport_a,bit_0|bit_1|bit_3);//將a端io口的ra0,ra1,ra3清零低電位

注意:要引用這些庫函式需要在起始位置添上#include

先寫個簡單的流水燈例子吧

開發板電路原理圖如下:

注意到有四個led d10,d12,d13,d4燈分別對應rb7,rb8,rb9,rb13只需控制這幾個埠就可以做簡單的流水燈了。

但觀察實際的開發板從上到下為d13,d12,d10,d4,也就是從上到下控制rb9,rb8,rb7,rb13要以實際為主。

**如下:

#include //32位的基本標頭檔案

#include//定義了多種庫函式的標頭檔案

#pragma config jtagen = off//好像用mplabx ide測試都要關閉jtagen埠(不太懂)

int main()

//  portb=0b11110111111111;//這個可以用,與下面兩句等效

portclearbits(ioport_b,bit_9);

portsetbits(ioport_b,bit_7|bit_8|bit_13);

for(i=0;i<100000;i++)

// portb=0b11111011111111;//同上(使用時注意去掉下面兩句)

portclearbits(ioport_b,bit_8);

portsetbits(ioport_b,bit_7|bit_9|bit_13);

for(i=0;i<100000;i++)

//  portb=0b11111101111111;

portclearbits(ioport_b,bit_7);

portsetbits(ioport_b,bit_8|bit_9|bit_13);

for(i=0;i<100000;i++)//等待延時的簡單設定

//  portb=0b01111111111111;

portclearbits(ioport_b,bit_13);//先點亮rb13

portsetbits(ioport_b,bit_7|bit_8|bit_9);//確保其他埠滅 }}

3.總結

面對乙個新的領域確實有點摸不著頭腦,還有一些語句也太多了,幾條不同的語句竟然都表示同乙個意思甚至彙編,c語言,偽指令都混用。

雖然這樣可移植性和適用語言性大大增強了,但對我們初學者也太多了,有點混亂。看來我的基礎也沒有掌握,還有這麼多語句要理解。

有些疑問還需要慢慢的查詢和解決。

PIC16F887 RB0外部中斷 2

include include config cp off wdte off boren on pwrte off fosc hs wrt off lvp off cpd off 配置位 cp off,保護位,程式儲存器 保護關閉 wdte off,看門狗定時器使能位,看門狗定時器關閉,可以通過wd...

STM32F0xx TIM輸出PWM配置詳細過程

前言 前面我說過stm32的定時器功能很強大,今天就來總結一下它的另外乙個 強大 功能 tim的比較輸出功能,輸出可調pwm波形。直接呼叫函式介面 tim2 ch1 pwm uint32 t freq,uint16 t dutycycle 傳入頻率和占空比就能輸出指定的波形。我提供的軟體工程直接呼叫...

STM32F0xx EXIT中斷配置詳細過程

概述exit外部中斷在使用到按鍵或者開關控制等應用中比較常見,低功耗中斷喚醒也是很常見的一種。因此,exit在實際專案開發中也是比較常見的一種。stm32f0中外部中斷exit屬於中斷和事件的章節,請看參考手冊第十二章,但需要配合系統配置控制器 system configuration contro...