PIC单片机入门_输入输出端口详解
生活随笔
收集整理的這篇文章主要介紹了
PIC单片机入门_输入输出端口详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.引言:
PIC單片機引腳圖:在PIC16F87X 單片機中,28引腳型號的單片機有3 個I/O端口,分別是RA、RB和RC;40引腳型號單片機有5個 I/O端口,分別是RA、RB、RC、RD和RE。其中RA有6條口線,RE有3條口線,其余都有 8條口線。
PIC16F87X端口口線既可作普通I/O引腳,又可作某些部件或外圍模塊的外接引腳,比如端口引腳RC.4既可用作普通I/O腳,又可以作為SPI串行通信的數據輸入引腳。這里只介紹端口的基本功能和基本用法,端口的其他復合功能,在以后介紹。
2.與輸入/輸出端口相關的2個寄存器
PIC單片機中各個I/O端口都具備兩個基本的專用寄存器:端口數據寄存器和端口方向寄存器。如下所示。 ? ? ?這些寄存器在RAM中都有統一的編址,即PIC單片機的端口都可以當作RAM單元來訪問,無需專門的指令訪問。
3.輸入/輸出端口的基本結構
PIC16F87X的3/5個端口不但結構上存在差異,而且同一端口的各口線的內部結構也略有差別,但是他們的基本結構模型,如下圖所示。圖中有三個D觸發器(也稱為鎖存器)。 其中Data Latch代表了端口數據寄存器,例如PORTA、PORTB、PORTC; TRIS Latch端口方向寄存器,例如TRISA、TRISB、TRISC;而Input Latch是端口設置為輸入時作為緩沖器。
3.1?基本輸入/輸出端口的工作原理
下面對端口口線進行的基本操作說明如下:⒈寫I/O方向寄存器TRIS Latch
?當方向寄存器中的內容為1時,則對應口線被設置為輸入(Input);當其內容為0時,則對應引腳設置為輸出(Output)。
?⒉ 經端口引腳輸出數據
? ?要把端口口線作為輸出,必須要把該口線預先設定為輸出態,即相應的TRIS Latch的內容必須為0。
⒊從端口引腳輸入數據
? 要把端口口線作為輸入,必須要把該口線預先設定為輸出態,即相應的TRIS Latch的內容必須為1。
3.2輸入/輸出端口基本功能的應用舉例
下面的實例是單鍵觸發8位二進制累加計數器,是針對端口功能和ICD在線調試器上的硬件為基礎而設計的。該實例中要用到的硬件電路如下圖所示。 ?圖中端口RC外接8條支路,這8條支路構成了端口RC的輸出電路,其中8只電阻起限流作用,保護端口引腳和發光二極管LED;LED在高電平時發光。圖中還使用了端口RB的RB0口線作為外接輸入引腳。電阻R4為限流電阻,對RB0引腳起保護作用;電阻R21為上拉電阻,將RB0電平拉高;開關SW1用來人工輸入低電平脈沖信號。程序設計思路 :
剛接通電源時,8只發光二極管都不亮,表示計數器初始值為0。
按下開關SW1時,計數器值加l,D0點亮,表示二進制數00000001B,然后松開按鈕;再次按下SW1時,計數器值又加1,D1點亮,表示二進制數00000010B,然后再松開按鈕;依次類推。直到按了255次按鈕時,D7~D0全部點亮,假如再次按動按鈕將使計數器回0。如此循環往復。 設計按鈕輸入程序時,有一點需要注意,就是必須處理按鈕在按下或松開時存在抖動現象,以免產生誤判。按鈕的去抖動一般都是調用延遲程序來消除抖動的。即在程序設計中,當查詢到RB0上的首次電平變化后,馬上延遲τ(例如10ms),待RB0上的狀態穩定后,再次查詢確認,果真是按鍵動作(按下或者松開),方認定為有效,否則,判為干擾脈沖。程序清單如下: STATUS EQU 03H PORTB EQU 06H TRISB EQU 86H PORTC EQU 07H TRISC EQU 87H DATA1 EQU 20H ; DATA1為延時變量 DATA2 EQU 21H ; DATA2為延時變量 N1 EQU D'13' ;外層循環延時常數 N2 EQU 0FFH ;內層循環延時常數 RP0 EQU 5H ;體選位RP0 ORG 000H BSF STATUS, RP0 ;切換到RAM的體1MOVLW 00H ;將端口C設為輸出MOVWF TRISC MOVLW 0FFH ;將端口B設置為輸入MOVWF TRISB BCF STATUS, RP0 ;恢復到RAM的體0PORTC EQU 07H TRISC EQU 87H DATA1 EQU 20H ; DATA1為延時變量DATA2 EQU 21H ; DATA2為延時變量N1 EQU D'13' ;外層循環延時常數N2 EQU 0FFH ;內層循環延時常數RP0 EQU 5H ;體選位RP0 ORG 000H BSF STATUS, RP0 ;切換到RAM的體1MOVLW 00H ;將端口C設為輸出MOVWF TRISC MOVLW 0FFH ;將端口B設置為輸入MOVWF TRISB BCF STATUS, RP0 ;恢復到RAM的體0 匯編語言往往需要更多硬件知識,因此對于主攻軟件或者有著良好C語言編程能力的人,我更像偏向于C編程。
以下是用C語言編寫的程序:
include <pic.h> #define N1 13 //外循環 #define N2 0xff //內循環 static volatile bit PORTB0 @(unsigned)&PORTB*8+0; //端口可變設計 int DATA1,DATA2; main() {TRISC=0xff; //Input ??????? TRISC = 0x00; //OutputTRISB=0xff; //InputPORTC=0; //清零 check: if PORTB0==0 then goto check; //監測是否有電平信號輸入 有效電平信號1DELAY(); //延時去抖動if PORTB0==0 then goto check;//去抖動確定PORTC++; //C語言設計好處 立刻就凸顯出來了 CHECK1 if PORTB0==1 goto CHECK1; DELAY()if PORTB0==1 goto CHECK1;GOTO check;while(1) { }; } void DELAY() {DATA1=N1; LP0: DATA2=N2; LP1: if DATA2-- > 0 goto LP1; if DATA1-- > 0 goto LP0;return;}
總結
以上是生活随笔為你收集整理的PIC单片机入门_输入输出端口详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt修炼手册2_动态设计
- 下一篇: JAVASCRIPT:VOID(0)含义