單片機IO口

單片機IO口

SPCE061A的I/O連線埠,對某一位的設定包括以下3個基本項:數據向量Data、屬性向量Attribution和方向控制向量Direction。3個連線埠內每個對應的位組合在一起,形成一個控制字,用來定義相應I/O口位的輸入輸出狀態和方式。例如,假設需要IOA0是下拉輸入管腳,則相應的Data、Attribution和Direction的值均被置為“0”。如果需要IOA1是帶喚醒功能的懸浮式輸入管腳,則Data、Attribution和Direction的值被置為“010”。A口和B口的Data、Attribution和Direction的設定值均在不同的暫存器里,用戶在進行I/O口設定時要特別注意這一點。

基本介紹

  • 中文名:單片機I/O口
  • 簡介:SPCE061A的I/O連線埠
  • 基本項數據向量Data
  • 領域:計算機
概述,A口相應的暫存器,並行I/O口的組合控制,B口相應的暫存器,B口的特殊功能,

概述

凌陽單片機I/OA,I/OB口的一些簡單設定和C語言套用函式

A口相應的暫存器

P_IOA_Buffer (讀/寫) (01H)
A口的數據向量單元,用於向數據向量暫存器寫入或從該暫存器讀出數據。當A口處於輸入狀態時,寫入是將A口的數據向量寫入A口的數據暫存器;讀出則是從A口數據暫存器內讀其數值。當A口處於輸出狀態時,寫入輸出數據到A口的數據暫存器。
P_IOA_Dir(讀/寫)(02H)
A口的方向向量單元,用於用來設定A口是輸入還是輸出,該方向控制向量暫存器可以寫入或從該暫存器內讀出方向控制向量。Dir位決定了口位的輸入/輸出方向:即‘0’為輸入,‘1’為輸出。
P_IOA_Attrib(讀/寫)(03H)
A口的屬性向量單元,用於A口屬性向量的設定。
P_IOA_Latch(讀)(04H)
讀該單元以鎖存A口上的輸入數據,用於進入睡眠狀態前的觸鍵喚醒功能的啟動。

並行I/O口的組合控制

方向向量Dir、屬性向量Attrib和數據向量Data分別代表三個控制口。這三個口中每個對應的位組合在一起,形成一個控制字,來定義相應I/O口位的輸入/輸出狀態和方式。
表3.1具體表示了如何通過對I/O口位的方向向量位Dir、屬性向量位Attrib以及數據向量位Data進行編程,來設定口位的輸入/輸出狀態和方式。
由表3.1可以得出以下一些結論:
Dir位決定了口位的輸入/輸出方向:即‘0’為輸入,‘1’為輸出。
Attrib位決定了在口位的輸入狀態下是為懸浮式輸入還是非懸浮式輸入:即‘0’為帶上拉或下拉電阻式輸入,而‘1’則為懸浮式輸入。在口位的輸出狀態下則決定其輸出是反相的還是同相的;‘0’為反相輸出,‘1’則為同相輸出。
Data位在口位的輸入狀態下被寫入時,與Attrib位組合在一起形成輸入方式的控制字‘00’、‘01’、‘10’、‘11’,以決定輸入口是帶喚醒功能的上拉電阻式、下拉電阻式或懸浮式以及不帶喚醒功能的懸浮式輸入。Data位在口位的輸出狀態下被寫入的是輸出數據,不過,數據是經過反相器輸出還是經過同相快取器輸出要由Attrib位來決定。
例如,假設要把A口的Bit0定義成下拉電阻式的輸入口,則A口_Dir、_Attrib和_Data向量的三個相應的Bit0應組合設為‘000’。如果想把A口的Bit1定義成懸浮式並具有喚醒功能的輸入口,只需將Dir、Attrib和Data向量中相應的Bit1組合設定為‘010’即可。
A口的I/OA0~I/OA7作為喚醒源,常用於鍵盤輸入。要激活IOA0~IOA7的喚醒功能,必須讀P_IOA_Latch單元,以此來鎖存IOA0~IOA7管腳上的鍵狀態。隨後,系統才可通過指令進入低功耗的睡眠狀態。當有鍵按下時,IOA0~IOA7的輸入狀態將不同於其在進入睡眠前被鎖存時的狀態,從而引起系統的喚醒。
表3.1
Direction
Attribution
Data
功能
是否帶喚喚醒功能
功能描述
0
0
0
下拉

帶下拉電阻的輸入管腳
0
0
1
上拉

帶上拉電阻的輸入管腳
0
1
0
懸浮

懸浮式輸入管腳
0
1
1
懸浮

懸浮式輸入管腳
1
0
0
高電平輸出
(帶數據反相器)

帶數據反相器的高電平輸出
(當向數據位寫入“0” 時輸出“1”)
1
0
1
低電平輸出
(帶數據反相器)

帶數據反相器的低電平輸出
(當向數據位寫入“1”時輸出“0”)
1
1
0
低電平輸出

帶數據快取器的低電平輸出
(無數據反相功能)
1
1
1
高電平輸出

帶數據快取器的高電平輸出
(無數據反相功能)

B口相應的暫存器

P_IOB_Data(讀/寫)(05H)
B口的數據單元,用於向B口寫入或從B口讀出數據。當B口處於輸入狀態時,讀出是讀B口管腳電平狀態; 寫入是將數據寫入B口的數據暫存器。當B口處於輸出狀態時,寫入輸出數據到B口的數據暫存器。
P_IOB_Buffer(讀/寫)(06H)
B口的數據向量單元,用於向數據暫存器寫入或從該暫存器內讀出數據。當B口處於輸入狀態時,寫入是將數據寫入B口的數據暫存器;讀出則是從B口數據暫存器里讀其數值。當B口處於輸出狀態時,寫入數據到B口的數據暫存器。
P_IOB_Dir(讀/寫)(07H)
B口的方向向量單元,用於設定IOB口的狀態。‘0’為輸入,‘1’為輸出。
P_IOB_Attrib(讀/寫)(08H)
B口的屬性向量單元,用於設定IOB口的屬性。

B口的特殊功能

B口除了具有常規的輸入/輸出連線埠功能外,還有一些特殊的功能,如下表3.2所示:
口位
特殊功能
功能描述
備註
I/OB0
SCK

I/OB1
SDA
串列接口SIO的數據傳送信號

I/OB2
1,EXT1
2, Feedback_Output1
1,外部中斷源(下降沿觸發)
2,與IOB4組成一個RC反饋電路,以獲得振盪信號,作為外部中斷源EXT1
1,IOB2 設為輸入狀態
2,設定IOB2為反相輸出方式
I/OB3
1,EXT2
2,Feedback_Output2
1,外部中斷源(下降沿觸發)
2,與IOB5組成一個RC反饋電路,以獲得一個振盪信號,作為外部中斷源EXT2
1,IOB3 設為輸入狀態
2,設定IOB3為反相輸出方式
I/OB4
Feedback_Input1


I/OB5
Feedback_Input2


I/OB6
---


I/OB7
Rx
通用異步串列數據接收連線埠

I/OB8
APWMO
TimerA脈寬調製輸出

I/OB9
BPWMO
TimerB脈寬調製輸出

I/OB10
Tx
通用異步串列數據傳送連線埠

IO連線埠設定的C庫函5
SPCE061.lib中提供了相應的API函式如下所示:
1, 函式原型
void Set_IOA_Dir(unsigned int);
void Set_IOB_Dir(unsigned int);
功能說明 設定IO Dircetion信息
用法 Set_IOA_Dir(Direction_A);
Set_IOB_Dir(Direction_B);
參數 1代表輸出,0代表輸入
返回值 無
2,函式原型
unsigned int Get_IOA_Dir(void);
unsigned int Get_IOB_Dir(void);
功能說明 獲取IO Dircetion信息
用法 Direction_A =Get_IOA_Dir();
Direction_B =Get_IOB_Dir();
返回值 1代表輸出,0代表輸入
3.函式原型
void Set_IOA_Data(unsigned int);
void Set_IOB_Data(unsigned int);
功能說明 設定IO Data信息
用法 Set_IOA_Data(Data_A);
Set_IOB_Data(Data_B);
參數 1代表高電平,0代表低電平
返回值 無
4,函式原型
unsigned int Get_IOA_Data(void);
unsigned int Get_IOB_Data(void);
功能說明 獲取IO Data信息
用法 Data_A =Set_IOA_Data();
Data_B =Set_IOB_Data();
參數 無
返回值 1代表高電平,0代表低電平
5,函式原型
void Set_IOA_Buffer(unsigned int);
void Set_IOB_Buffer(unsigned int);
功能說明 設定IO Buffer信息
用法 Set_IOA_Buffer(Buffer_A);
Set_IOB_Buffer(Buffer_B);
參數 1代表高電平,0代表低電平
返回值 無
6.函式原型
unsigned int Get_IOA_Buffer(void);
unsigned int Get_IOB_Buffer(void);
功能說明 獲取IO Buffer信息
用法 Buffer_A =Set_IOA_Buffer();
Buffer_B =Set_IOB_Buffer();
參數 無
返回值 1代表高電平,0代表低電平
7.函式原型
void Get_IOA_Latch(void);
功能說明 讀P_IOA_Latch單元,以此來鎖存IOA0~IOA7管腳上的鍵狀態
用法 Get_IOA_Latch();
參數 無
返回值 無
另外還有:
sp_lib.asm中定義了兩個很有用的IO API,在C中可以調用。它們是SP_Init_IOA(),SP_Init_IOB()。
函式原型
void SP_Init_IOA(unsigned int, unsigned int, unsigned int);
void SP_Init_IOB(unsigned int, unsigned int, unsigned int);
功能說明 同時設定IO Dircetion、Attribution和Data信息
用法 SP_Init_IOA(Direction_A, Data_A, Attribution_A);
SP_Init_IOB(Direction_B, Data_B, Attribution_B);
參數
返回值 無

相關詞條

熱門詞條

聯絡我們