一、I/O口工作模式
IO口即輸入輸出口,STC8H系列單片機(jī)支持四種工作模式, 即準(zhǔn)雙向口、推挽輸出、高阻輸入、開漏輸出,每個(gè)IO通過兩個(gè)寄存器進(jìn)行配置,如下圖所示,注:n = 0,1,2,3,4,5,6,7。
PnM1 |
PnM0 |
I/O口工作模式 |
0 |
0 |
準(zhǔn)雙向口(弱上拉),灌電流可達(dá)20mA,拉電流150-270uA |
0 |
1 |
推挽輸出,強(qiáng)上拉輸出,可達(dá)20mA,需加限流電阻 |
1 |
0 |
高阻輸入,電流既不能流入也不能流出 |
1 |
1 |
開漏輸出,內(nèi)部上拉電阻斷開 |
?PnM1和PnM0各一個(gè)字節(jié)八個(gè)bit,對應(yīng)Pn.0 – Pn.7。
例:P0M0的第0位和P0M1的第0位組合起來配置P0.0口的模式。
1.1、準(zhǔn)雙向口
準(zhǔn)雙向口即可作為輸入也可作為輸出,一般用于按鍵檢測、IO口時(shí)序控制等等。
摘自STC8H系列單片機(jī)技術(shù)參考手冊
1.2、推挽輸出?
推挽輸出驅(qū)動電流可達(dá)20mA,一般用于驅(qū)動LED燈、蜂鳴器等。
摘自STC8H系列單片機(jī)技術(shù)參考手冊?文章來源地址http://www.zghlxwxcb.cn/news/detail-851111.html
1.3、高阻輸入?
當(dāng)I/O口配置為高阻輸入工作模式時(shí),沒有片內(nèi)上拉MOSFET、上拉電阻和下拉MOSFET,I/O端口引腳處于完全懸空狀態(tài)。該工作模式最大好處是:把I/O口配置為高阻輸入模式時(shí),其消耗的輸入電流主要由外置的上拉電阻確定,可以做的僅可能的低功耗,單片機(jī)自身I/O口處于高阻輸入工作模式,消耗電流非常小。
當(dāng)STC8系列單片機(jī)I/O口配置為高阻輸入工作模式時(shí),一定在對應(yīng)I/O端口引腳上外置上拉電阻,保證I/O口輸入電平的穩(wěn)定。
高阻態(tài)情況下,IO口輸入電阻很大,不容易干擾那些輸出電阻較大、驅(qū)動能力弱的裝置輸出到IO口上的電平。
摘自STC8H系列單片機(jī)技術(shù)參考手冊?
1.4、開漏輸出?
該工作模式與準(zhǔn)雙向口和推挽輸出工作模式最大的不同是:其無上拉MOSFET,即MOS管漏極處于斷開狀態(tài); 開漏輸出的好處就是可以方便調(diào)節(jié)輸出電平,需要外接上拉電阻,調(diào)節(jié)上拉電阻的大小進(jìn)而調(diào)節(jié)驅(qū)動電流大??;
開漏輸出的這一特性另一個(gè)好處在于可以實(shí)現(xiàn)“線與”功能,所謂的“線與”指的是多個(gè)信號線直接連接在一起,只有當(dāng)所有信號全部為高電平時(shí),合在一起的總線為高電平;只要有任意一個(gè)或者多個(gè)信號為低電平,則總線為低電平。而推挽輸出就不行,如果高電平和低電平連在一起,會出現(xiàn)電流倒灌,損壞器件;
一般IIC總線上掛接多個(gè)從機(jī),需要線與進(jìn)行仲裁,所以IIC常常采用開漏輸出,需要外接上拉電阻;IIC不同通信速率上升沿有不同的要求,調(diào)節(jié)上拉電阻大小進(jìn)而改變上升沿的時(shí)間。
摘自STC8H系列單片機(jī)技術(shù)參考手冊?
二、發(fā)光二極管?
發(fā)光二極管通常稱為LED,不同顏色的LED正向?qū)妷翰灰粯?,如下為常?guī)參考數(shù)據(jù),實(shí)際以不同型號LED技術(shù)手冊為準(zhǔn)。
LED限流電阻計(jì)算方法:限流電阻 =(供電電壓-正向電壓)/正向電流,即R=(VCC-VF)/IF。
例:紅色直插LED的正向電壓為2.0V,正向電流為20mA,電源電壓為5V,則 R=(5-2.0)/0.02=150Ω ,P=I*I*R=0.02*0.02*150=0.06 W< 0.25W (0805封裝電阻功率) ? ?所以采用150Ω/0805 電阻即可。
三、發(fā)光二極管控制電路
1、LED1、LED2、LED3、LED4均接3.3V單片機(jī)IO口;
2、采用推挽輸出控制,高電平點(diǎn)亮LED,低電平熄滅LED;
3、為了降低LED的亮度,因此這里采用1K限流電阻,降低亮度。
?四、3.3V/5V不同電壓IO互連處理
1、單片機(jī)工作在3.3V,需要直連5V外部器件,如果對應(yīng)的I/O口作為輸入,可在I/O口上串接一個(gè)隔離二極管,隔離高壓部分,狀態(tài)邏輯如下: a、當(dāng)外部信號電壓高于單片機(jī)工作電壓二極管處于截止?fàn)顟B(tài),I/O因內(nèi)部上拉到高電平,所以單片機(jī)讀取到I/O口狀態(tài)為高電平; b、當(dāng)外部信號電壓為低時(shí)二極管導(dǎo)通,因?yàn)楣瓒O管導(dǎo)通壓降一般為0.5-0.7V,I/O被鉗位在0.5V-0.7V,小于0.8V時(shí),單片機(jī)讀取到I/O口狀態(tài)為高電平;
參考電路如下:
摘自STC8H系列單片機(jī)技術(shù)參考手冊?
2、單片機(jī)工作在3.3V,需要直連5V外部器件,如果對應(yīng)的I/O口作為輸出,可用一個(gè)NPN三極管隔離,參考電路如下:
摘自STC8H系列單片機(jī)技術(shù)參考手冊?
?五、示例代碼
#include "STC8H.h" //頭文件,包含單片機(jī)寄存器和特殊寄存器地址的聲明
#define LED1 P41 //宏定義,預(yù)處理命令,相當(dāng)于給指定的字符串起一個(gè)別名
#define LED2 P73 //宏定義
#define LED3 P72 //宏定義
#define LED4 P71 //宏定義
/*主函數(shù)*/
void main(void)
{
/*
1字節(jié)=8位(1 byte = 8bit),c語言中這樣表示進(jìn)制:
二進(jìn)制前綴 0b或者0B
十六進(jìn)制前綴 0X或者0X
如0x11 = 0b00010001
*/
P4M1 = 0X00; P4M0 = 0X02; //將P41設(shè)置為推挽輸出模式
P7M1 = 0X00; P7M0 = 0X0E; //將P71、P72、P73設(shè)置為推挽輸出模式
LED1 = 1; //P41設(shè)置為高電平,點(diǎn)亮LED1
LED2 = 1; //P73設(shè)置為高電平,點(diǎn)亮LED2
LED3 = 1; //P72設(shè)置為高電平,點(diǎn)亮LED3
LED4 = 1; //P71設(shè)置為高電平,點(diǎn)亮LED4
while(1);
/*
while(1);的作用:
大部分還是為了防止程序跑飛,因?yàn)楹芏鄷r(shí)候執(zhí)行完某段程序后單片機(jī)的
程序指針PC(就是程序指針)并不會停止,仍然會繼續(xù)從ROM中讀取指令
并執(zhí)行,這樣一來可能會出現(xiàn)程序跑飛的情況,進(jìn)而出現(xiàn)不確定的結(jié)果,
我們加個(gè)while(1)就能讓程序在執(zhí)行完后在原地循環(huán),相當(dāng)于停在原地,
防止跑飛。
*/
}
六、思考問題?
每個(gè)IO口電路結(jié)構(gòu)上都會在GND和VCC上并聯(lián)一個(gè)二極管,大家清楚這兩個(gè)二極管的作用是什么嗎?
文章來源:http://www.zghlxwxcb.cn/news/detail-851111.html
摘自STC8H系列單片機(jī)技術(shù)參考手冊?
到了這里,關(guān)于STC8H系列單片機(jī)入門教程之GPIO基本知識(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!