Bit 用法
bit是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個(gè)位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。它的值是一個(gè)二進(jìn)制位,不是0就是1,類似一些高級(jí)語(yǔ)言中的Boolean類型中的True和False。事實(shí)上,bit和數(shù)據(jù)類型為int,char等具有許多相同特性。
1. 值域:
以char為例。Char為8位一個(gè)字節(jié)的數(shù)據(jù)類型,取值范圍為 -128到+127。而bit只有1位,只能表示0和1兩種值。通常bit定義的變量作為一個(gè)標(biāo)志位用。
2.類型定義:
例如一個(gè)數(shù)據(jù)為25,那么它就可以定義為char型、int型等。因?yàn)樗麄兌荚谧约旱闹涤騼?nèi)。同樣一個(gè)在自己值域的數(shù)0和1就可以定義為bit型。Bit可以指定函數(shù)返回值的類型,如bit display(),也可對(duì)別的類型的數(shù)據(jù)進(jìn)行數(shù)據(jù)強(qiáng)制轉(zhuǎn)換,如x=(bit)y, (y為char,int型等)。此時(shí),x的值便為0或1。那么如何確定x是0還是1呢?現(xiàn)在看下面例題:
bit lcd_busy()
{
bitresult;
LCD_RS = 0;
LCD_RW= 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
在上面例題中我們可以看到,bit定義了一個(gè)函數(shù)返回值類型bit lcd_busy(),一個(gè)變量 result 和 一個(gè)運(yùn)算表達(dá)式 P0&0x80 .由此可以bit的用法和char、int等相同。那么resulit的值如何確定呢? 這個(gè)和運(yùn)算表達(dá)式 P0&0x80有關(guān)。如果表達(dá)式 P0&0x80的運(yùn)算結(jié)果為非零的值,那么resulit的值為1,否則為0。
總結(jié):由上面等內(nèi)容可以看出,我們完全可以像char、int那樣使用bit。只是在使用過(guò)程要注意bit的取值范圍以及bit對(duì)運(yùn)算表達(dá)式進(jìn)行數(shù)據(jù)強(qiáng)制轉(zhuǎn)換時(shí)的規(guī)則和bit定義的變量作為標(biāo)志位的特性。
51系列中data,idata,xdata,pdata的區(qū)別 data: 固定指前面0x00-0x7f的128個(gè)RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。 idata: 固定指前面0x00-0xff的256個(gè)RAM,其中前128和dATa的128完全相同,只是因?yàn)樵L問(wèn)的方式不同。idATa是用類似C中的指針?lè)绞?訪問(wèn)的。匯編中的語(yǔ)句為:mox ACC,@Rx.(不重要的補(bǔ)充:c中idATa做指針式的訪問(wèn)效果很好) xdata: 外部擴(kuò)展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問(wèn)。 pdata: 外部擴(kuò)展RAM的低256個(gè)字節(jié),地址出現(xiàn)在A0-A7的上時(shí)讀寫,用movx ACC,@Rx讀寫。這個(gè)比較特殊,而且C51好象有對(duì)此BUG, 建議少用。但也有他的優(yōu)點(diǎn),具體用法屬于中級(jí)問(wèn)題,這里不提。 startup.a51 的作用,和匯編一樣,在C中定義的那些變量和數(shù)組的初始化就在startup.a51中進(jìn)行,如果你在定義全局變量時(shí)帶有數(shù)值,如unsigned char dATa xxx="100";,那startup.a51中就會(huì)有相關(guān)的賦值。如果沒(méi)有=100,startup.a51就會(huì)把他清 0。(startup.a51==變量的初始化)。 這些初始化完畢后,還會(huì)設(shè)置SP指針。對(duì)非變量區(qū)域,如堆棧區(qū),將不會(huì)有賦值或清零動(dòng)作。 有 人喜歡改startup.a51,為了滿足自己一些想當(dāng)然的愛(ài)好,這是不必要的,有可能錯(cuò)誤的。比如掉電保護(hù)的時(shí)候想保存一些變量, 但改startup.a51來(lái)實(shí)現(xiàn)是很笨的方法,實(shí)際只要利用非變量區(qū)域的特性,定義一個(gè)指針變量指向堆棧低部:0xff處就可實(shí)現(xiàn)。, 為什么還要去改? 可以這么說(shuō):任何時(shí)候都可以不需要改startup.a51,如果你明白它的特性。 bit
是在內(nèi)部數(shù)據(jù)存儲(chǔ)空間中 20H .. 2FH 區(qū)域中一個(gè)位的地址,這在DATA的20H以后以字節(jié)形式出現(xiàn),可互相參照。另外加上8051 可尋址 的SFR,但剛剛試過(guò),只是00H--7FH起作用,也就是說(shuō)當(dāng)數(shù)據(jù)有變化時(shí)顏色變紅,以后的從80H到--FFH就不是位尋址區(qū)了,是位尋址的特殊寄存器,如涉及到了可位尋址的那11個(gè)當(dāng)然會(huì)有反應(yīng)。 復(fù)位后,程序計(jì)數(shù)器PC的內(nèi)容為0000H,內(nèi)部RAM各單元的值不確定。各功能寄存器的復(fù)位值如下:堆棧指針SP的復(fù)位值為07H,累加器ACC、寄存器B的復(fù)位值為00H,數(shù)據(jù)指針DPTR的復(fù)位值為0000H,而p0、p1、p2、p3四個(gè)口的復(fù)位值為0FFH。其他SFR如PSW、TCON、TMOD、TL0、TH0、TL1、TH1的復(fù)位值也為00H。 wave中是低128字節(jié)和高128字節(jié)(0-7FH),低128字節(jié)是片內(nèi)RAM區(qū),高128字節(jié)(80-FFH)是SFR(特殊功能寄存器)bit則是位于低128字節(jié)的20H .. 2FH 區(qū)域,即data的20H .. 2FH 區(qū)域
code
是在 0000H .. 0FFFFH 之間的一個(gè)代碼地址。 我用
ORG 5000H
TAB: DB 22H,3BH,43H,66H,5H,6DH,88H后,
CODE從5000H開(kāi)始以后變成DB各位
data
是在 0 到 127 之間的一個(gè)數(shù)據(jù)存儲(chǔ)器地址,或者加 128 .. 255 范圍內(nèi)的一個(gè)特殊功能寄存器(SFR)地址。兩者訪問(wèn)的方式不同。實(shí)際上由于PSW的復(fù)位設(shè)置PSW.3=RS0和PSW.4=RS1皆為0,所以通用工作寄存器區(qū)就是第0區(qū),所以data的00--07H部分是與REG欄中的R0--R7對(duì)應(yīng)的。以后的則僅代表低128字節(jié)的內(nèi)部RAM。
idata
是 0 to 255 范圍內(nèi)的一個(gè) idata 存儲(chǔ)器地址。 idata與data重合低128字節(jié),有的地方只有DATA表示256字節(jié)的片內(nèi)RAM,
xdata 是 0 to 65535 范圍內(nèi)的一個(gè) xdata 存儲(chǔ)器地址。 指針類型和存儲(chǔ)區(qū)的關(guān)系詳解
一、存儲(chǔ)類型與存儲(chǔ)區(qū)關(guān)系
data ---> 可尋址片內(nèi)ram
bdata ---> 可位尋址的片內(nèi)ram
idata ---> 可尋址片內(nèi)ram,允許訪問(wèn)全部?jī)?nèi)部ram
pdata ---> 分頁(yè)尋址片外ram (MOVX @R0) (256 BYTE/頁(yè))
xdata ---> 可尋址片外ram (64k 地址范圍FFFFH)
code ---> 程序存儲(chǔ)區(qū) (64k 地址范圍),對(duì)應(yīng)MOVC @DPTR
二、指針類型和存儲(chǔ)區(qū)的關(guān)系
對(duì)變量進(jìn)行聲明時(shí)可以指定變量的存儲(chǔ)類型如:
uchar data x和data uchar x相等價(jià)都是在內(nèi)ram區(qū)分配一個(gè)字節(jié)的變量。
同樣對(duì)于指針變量的聲明,因涉及到指針變量本身的存儲(chǔ)位置和指針?biāo)赶虻拇鎯?chǔ)區(qū)位置不同而進(jìn)行相應(yīng)的存儲(chǔ)區(qū)類型關(guān)鍵字的
使用如:
uchar xdata * data pstr
是指在內(nèi)ram區(qū)分配一個(gè)指針變量("*"號(hào)后的data關(guān)鍵字的作用),而且這個(gè)指針本身指向xdata區(qū)("*"前xdata關(guān)鍵字的作用),
可能初學(xué)C51時(shí)有點(diǎn)不好懂也不好記。沒(méi)關(guān)系,我們馬上就可以看到對(duì)應(yīng)“*”前后不同的關(guān)鍵字的使用在編譯時(shí)出現(xiàn)什么情況。
......
uchar xdata tmp[10]; //在外ram區(qū)開(kāi)辟10個(gè)字節(jié)的內(nèi)存空間,地址是外ram的0x0000-0x0009
......
第1種情況:
uchar data * data pstr;
pstr="tmp";
首先要提醒大家這樣的代碼是有bug的, 他不能通過(guò)這種方式正確的訪問(wèn)到tmp空間。 為什么?我們把編譯后看到下面的匯編
代碼:
MOV 0x08,#tmp(0x00) ;0x08是指針pstr的存儲(chǔ)地址
看到了嗎!本來(lái)訪問(wèn)外ram需要2 byte來(lái)尋址64k空間,但因?yàn)槭褂胐ata關(guān)鍵字(在"*"號(hào)前的那個(gè)),所以按KeilC編譯環(huán)境來(lái)說(shuō)
就把他編譯成指向內(nèi)ram的指針變量了,這也是初學(xué)C51的朋友們不理解各個(gè)存儲(chǔ)類型的關(guān)鍵字定義而造成的bug。特別是當(dāng)工程中的
默認(rèn)的存儲(chǔ)區(qū)類為large時(shí),又把tmp[10] 聲明為uchar tmp[10] 時(shí),這樣的bug是很隱秘的不容易被發(fā)現(xiàn)。
第2種情況:
uchar xdata * data pstr;
pstr = tmp;
這種情況是沒(méi)問(wèn)題的,這樣的使用方法是指在內(nèi)ram分配一個(gè)指針變量("*"號(hào)后的data關(guān)鍵字的作用),而且這個(gè)指針本身指向
xdata區(qū)("*"前xdata關(guān)鍵字的作用)。編譯后的匯編代碼如下。
MOV 0x08,#tmp(0x00) ;0x08和0x09是在內(nèi)ram區(qū)分配的pstr指針變量地址空間
MOV 0x09,#tmp(0x00)
這種情況應(yīng)該是在這里所有介紹各種情況中效率最高的訪問(wèn)外ram的方法了,請(qǐng)大家記住他。
第3種情況:
uchar xdata * xdata pstr;
pstr="tmp";
這中情況也是對(duì)的,但效率不如第2種情況。編譯后的匯編代碼如下。
MOV DPTR, #0x000A ;0x000A,0x000B是在外ram區(qū)分配的pstr指針變量地址空間
MOV A, #tmp(0x00)
MOV @DPTR, A
INC DPTR
MOV A, #tmp(0x00)
MOVX @DPTR, A
這種方式一般用在內(nèi)ram資源相對(duì)緊張而且對(duì)效率要求不高的項(xiàng)目中。
第4種情況:
uchar data * xdata pstr;
pstr="tmp";
如果詳細(xì)看了第1種情況的讀者發(fā)現(xiàn)這種寫法和第1種很相似,是的,同第1 種情況一樣這樣也是有bug的,但是這次是把pstr分
配到了外ram區(qū)了。編譯后的匯編代碼如下。
MOV DPTR, #0x000A ;0x000A是在外ram區(qū)分配的pstr指針變量的地址空間
MOV A, #tmp(0x00)
MOVX @DPTR, A
第5種情況:
uchar * data pstr;
pstr="tmp";
大家注意到"*"前的關(guān)鍵字聲明沒(méi)有了,是的這樣會(huì)發(fā)生什么事呢?下面這么寫呢!對(duì)了用齊豫的一首老歌名來(lái)說(shuō)就是 “請(qǐng)跟我
來(lái)”,請(qǐng)跟我來(lái)看看編譯后的匯編代碼,有人問(wèn)這不是在講C51嗎? 為什么還要給我們看匯編代碼。C51要想用好就要盡可能提升C51
編譯后的效率,看看編譯后的匯編會(huì)幫助大家盡快成為生產(chǎn)高效C51代碼的高手的。還是看代碼吧!
MOV 0x08, #0X01 ;0x08-0x0A是在內(nèi)ram區(qū)分配的pstr指針變量的地址空間
MOV 0x09, #tmp(0x00)
MOV 0x0A, #tmp(0x00)
注意:這是新介紹給大家的,大家會(huì)疑問(wèn)為什么在前面的幾種情況的pstr指針變量都用2 byte空間而到這里就用3 byte空間了
呢?這是KeilC的一個(gè)系統(tǒng)內(nèi)部處理,在KeilC中一個(gè)指針變量最多占用 3 byte空間,對(duì)于沒(méi)有聲明指針指向存儲(chǔ)空間類型的指針,
系統(tǒng)編譯代碼時(shí)都強(qiáng)制加載一個(gè)字節(jié)的指針類型分辯值。具體的對(duì)應(yīng)關(guān)系可以參考KeilC的help中C51 User's Guide。
第6種情況:
uchar * pstr;
pstr="tmp";
這是最直接最簡(jiǎn)單的指針變量聲明,但他的效率也最低。還是那句話,大家一起說(shuō)好嗎!編譯后的匯編代碼如下。
MOV DPTR, #0x000A ;0x000A-0x000C是在外ram區(qū)分配的pstr指針變量地址空間
MOV A, #0x01
MOV @DPTR, A
INC DPTR
MOV DPTR, #0x000A
MOV A, #tmp(0x00)
MOV @DPTR, A
INC DPTR
MOV A, #tmp(0x00)
MOVX @DPTR, A
這種情況很類似第5種和第3種情況的組合,既把pstr分配在外ram空間了又增加了指針類型的分辨值。 |
1 電感在電路中的作用
電感在電路中的作用
基本作用:濾波、振蕩、延遲、陷波等
形象說(shuō)法:“通直流,阻交流
通直流:所謂通直流就是指在直流電路中,電感的作用就相當(dāng)于一根導(dǎo)線,不起任何作用。
阻交流:在交流電路中,電感會(huì)有阻抗,即XL,整個(gè)電路的電流會(huì)變小,對(duì)交流有一定的阻礙作用。
細(xì)化解說(shuō):在電子線路中,電感線圈對(duì)交流有限流作用,它與電阻器或電容器能組成高通或低通濾波器、移相電路及諧振電路等;
電感的作用是阻礙電流的變化,但是這種作用與電阻阻礙電流流通作用是有區(qū)別的。
電阻阻礙電流流通作用是以消耗電能為其標(biāo)志,而電感阻礙電流的變化則純粹是不讓電流變化,當(dāng)電流增加時(shí)電感阻礙電流的增加,當(dāng)電流減小時(shí)電感阻礙電流的減小。電感阻礙電流變化過(guò)程并不消耗電能,阻礙電流增加時(shí)它將電的能量以磁場(chǎng)的形式暫時(shí)儲(chǔ)存起來(lái),等到電流減小時(shí)它也將磁場(chǎng)的能量釋放出來(lái),以結(jié)果來(lái)說(shuō),就是阻礙電流的變化。
2三極管在電路中的作用
在設(shè)計(jì)一些線路時(shí)。需用到npn/pnp。在哪種時(shí)候用呢?下面來(lái)介紹一下。
1.如果輸入一個(gè)高電平,而輸出需要一個(gè)低電平時(shí),首選擇npn。
2.如果輸入一個(gè)低電平,而輸出需要一個(gè)低電平時(shí),首選擇pnp。
3.如果輸入一個(gè)低電平,而輸出需要一個(gè)高電平時(shí),首選擇npn。
4.如果輸入一個(gè)高電平,而輸出需要一個(gè)高電平時(shí),首選擇pnp。
npn基極高電壓,極電極與發(fā)射極短路,如果基極加低電壓,極電極與發(fā)射極開(kāi)路.也就是不工作。
pnp基極高電壓.極電極與發(fā)射極開(kāi)路,也就是不工作。如果基極加低電位,集電極與發(fā)射極短路。
即工作與不工作
電容在電路中的作用
熟悉電容器在不同電路中的名稱意義,有助于我們讀懂電子電路圖。
電容器在電子電路中幾乎是不可缺少的儲(chǔ)能元件,它具有隔斷直流、連通交流、阻止低頻的特性。廣泛應(yīng)用在耦合、隔直、旁路、濾波、調(diào)諧、能量轉(zhuǎn)換和自動(dòng)控制等電路中。
1.濾波電容 它接在直流電源的正、負(fù)極之間,以濾除直流電源中不需要的交流成分,使直流電平滑。一般常采用大容量的電解電容器,也可以在電路中同時(shí)并接其他類型的小容量電容以濾除高頻交流電。
2.退耦電容 并接于放大電路的電源正、負(fù)極之間,防止由電源內(nèi)阻形成的正反饋而引起的寄生振蕩。
3.旁路電容 在交、直流信號(hào)的電路中,將電容并接在電阻兩端或由電路的某點(diǎn)跨接到公共電位上,為交流信號(hào)或脈沖信號(hào)設(shè)置一條通路,避免交流信號(hào)成分因通過(guò)電阻產(chǎn)生壓降衰減。
4.耦合電容 在交流信號(hào)處理電路中,用于連接信號(hào)源和信號(hào)處理電路或者作兩放大器的級(jí)間連接,用以隔斷直流,讓交流信號(hào)或脈沖信號(hào)通過(guò),使前后級(jí)放大電路的直流工作點(diǎn)互不影響。
5.調(diào)諧電容 連接在諧振電路的振蕩線圈兩端,起到選擇振蕩頻率的作用。
電解電容在電路中的作用 電解電容在電路中的作用 | 1,濾波作用,在電源電路中,整流電路將交流變成脈動(dòng)的直流,而在整流電路之后接入一個(gè)較大容量的電解電容,利用其充放電特性,使整流后的脈動(dòng)直流電壓變成相對(duì)比較穩(wěn)定的直流電壓。在實(shí)際中,為了防止電路各部分供電電壓因負(fù)載變化而產(chǎn)生變化,所以在電源的輸出端及負(fù)載的電源輸入端一般接有數(shù)十至數(shù)百微法的電解電容.由于大容量的電解電容一般具有一定的電感,對(duì)高頻及脈沖干擾信號(hào)不能有效地濾除,故在其兩端并聯(lián)了一只容量為0.001--0.lpF的電容,以濾除高頻及脈沖干擾.
2,耦合作用:在低頻信號(hào)的傳遞與放大過(guò)程中,為防止前后兩級(jí)電路的靜態(tài)工作點(diǎn)相互影響,常采用電容藕合.為了防止信號(hào)中韻低頻分量損失過(guò)大,一般總采用容量較大的電解電容。
二、電解電容的判斷方法
電解電容常見(jiàn)的故障有,容量減少,容量消失、擊穿短路及漏電,其中容量變化是因電解電容在使用或放置過(guò)程中其內(nèi)部的電解液逐漸干涸引起,而擊穿與漏電一般為所加的電壓過(guò)高或本身質(zhì)量不佳引起。判斷電源電容的好壞一般采用萬(wàn)用表的電阻檔進(jìn)行測(cè)量.具體方法為:將電容兩管腳短路進(jìn)行放電,用萬(wàn)用表的黑表筆接電解電容的正極。紅表筆接負(fù)極(對(duì)指針式萬(wàn)用表,用數(shù)字式萬(wàn)用表測(cè)量時(shí)表筆互調(diào)),正常時(shí)表
針應(yīng)先向電阻小的方向擺動(dòng),然后逐漸返回直至無(wú)窮大處。表針的擺動(dòng)幅度越大或返回的速度越慢,說(shuō)明電容的容量越大,反之則說(shuō)明電容的容量越小.如表針指在中間某處不再變化,說(shuō)明此電容漏電,如電阻指示值很小或?yàn)榱悖瑒t表明此電容已擊穿短路.因萬(wàn)用表使用的電池電壓一般很低,所以在測(cè)量低耐壓的電容時(shí)比較準(zhǔn)確,而當(dāng)電容的耐壓較高時(shí),打時(shí)盡管測(cè)量正常,但加上高壓時(shí)則有可能發(fā)生漏電或擊穿現(xiàn)象.
三、電解電容的使用注意事項(xiàng)
1、電解電容由于有正負(fù)極性,因此在電路中使用時(shí)不能顛倒聯(lián)接。在電源電路中,輸出正電壓時(shí)電解電容的正極接電源輸出端,負(fù)極接地,輸出負(fù)電壓時(shí)則負(fù)極接輸出端,正極接地.當(dāng)電源電路中的濾波電容極性接反時(shí),因電容的濾波作用大大降低,一方面引起電源輸出電壓波動(dòng),另一方面又因反向通電使此時(shí)相當(dāng)于一個(gè)電阻的電解電容發(fā)熱.當(dāng)反向電壓超過(guò)某值時(shí),電容的反向漏電電阻將變得很小,這樣通電工作不久,即可使電容因過(guò)熱而炸裂損壞.
2.加在電解電容兩端的電壓不能超過(guò)其允許工作電壓,在設(shè)計(jì)實(shí)際電路時(shí)應(yīng)根據(jù)具體情況留有一定的余量,在設(shè)計(jì)穩(wěn)壓電源的濾波電容時(shí),如果交流電源電壓為220~時(shí)變壓器次級(jí)的整流電壓可達(dá)22V,此時(shí)選擇耐壓為25V的電解電容一般可以滿足要求.但是,假如交流電源電壓波動(dòng)很大且有可能上升到250V以上時(shí),最好選擇耐壓30V以上的電解電容。
3,電解電容在電路中不應(yīng)靠近大功率發(fā)熱元件,以防因受熱而使電解液加速干涸.
4、對(duì)于有正負(fù)極性的信號(hào)的濾波,可采取兩個(gè)電解電容同極性串聯(lián)的方法,當(dāng)作一個(gè)無(wú)極性的電容。
|
從名稱認(rèn)識(shí)電容在電路中的作用0 電容器在電子電路中幾乎是不可缺少的儲(chǔ)能元件,它具有隔斷直流、連通交流、阻止低頻的特性。廣泛應(yīng)用在耦合、隔直、旁路、濾波、調(diào)諧、能量轉(zhuǎn)換和自動(dòng)控制等電路中。熟悉電容器在不同電路中的名稱意義,有助于我們讀懂電子電路圖。
1.濾波電容 它接在直流電源的正、負(fù)極之間,以濾除直流電源中不需要的交流成分,使直流電平滑。一般常采用大容量的電解電容器,也可以在電路中同時(shí)并接其他類型的小容量電容以濾除高頻交流電。
2.退耦電容 并接于放大電路的電源正、負(fù)極之間,防止由電源內(nèi)阻形成的正反饋而引起的寄生振蕩。
3.旁路電容 在交、直流信號(hào)的電路中,將電容并接在電阻兩端或由電路的某點(diǎn)跨接到公共電位上,為交流信號(hào)或脈沖信號(hào)設(shè)置一條通路,避免交流信號(hào)成分因通過(guò)電阻產(chǎn)生壓降衰減。
4.耦合電容 在交流信號(hào)處理電路中,用于連接信號(hào)源和信號(hào)處理電路或者作兩放大器的級(jí)間連接,用以隔斷直流,讓交流信號(hào)或脈沖信號(hào)通過(guò),使前后級(jí)放大電路的直流工作點(diǎn)互不影響。
5.調(diào)諧電容 連接在諧振電路的振蕩線圈兩端,起到選擇振蕩頻率的作用。
6.襯墊電容 與諧振電路主電容串聯(lián)的輔助性電容,調(diào)整它可使振蕩信號(hào)頻率范圍變小,并能顯著地提高低頻端的振蕩頻率。適當(dāng)?shù)剡x定襯墊電容的容量,可以將低端頻率曲線向上提升,接近于理想頻率跟蹤曲線。
7.補(bǔ)償電容 它是與諧振電路主電容并聯(lián)的輔助性電容,調(diào)整該電容能使振蕩信號(hào)頻率范圍擴(kuò)大。
8.中和電容 并接在三極管放大器的基極與發(fā)射極之間,構(gòu)成負(fù)反饋網(wǎng)絡(luò),以抑制三極管極間電容造成的自激振蕩。
9.穩(wěn)頻電容 在振蕩電路中,起穩(wěn)定振蕩頻率的作用。
10.定時(shí)電容 在RC時(shí)間常數(shù)電路中與電阻R串聯(lián),共同決定充放電時(shí)間長(zhǎng)短的電容。
11.加速電容 接在振蕩器反饋電路中,使正反饋過(guò)程加速,提高振蕩信號(hào)的幅度。
12.縮短電容 在UHF高頻頭電路中,為了縮短振蕩電感器長(zhǎng)度而串接的電容。
13.克拉潑電容 在電容三點(diǎn)式振蕩電路中,與電感振蕩線圈串聯(lián)的電容,起到消除晶體管結(jié)電容對(duì)頻率穩(wěn)定性影響的作用。
14.錫拉電容 在電容三點(diǎn)式振蕩電路中,與電感振蕩線圈兩端并聯(lián)的電容,起到消除晶體管結(jié)電容的影響,使振蕩器在高頻端容易起振。
15.穩(wěn)幅電容 在鑒頻器中,用于穩(wěn)定輸出信號(hào)的幅度。
16.預(yù)加重電容 為了避免音頻調(diào)制信號(hào)在處理過(guò)程中造成對(duì)分頻量衰減和丟失,而設(shè)置的RC高頻分量提升網(wǎng)絡(luò)電容。
17.去加重電容 為恢復(fù)原伴音信號(hào),要求對(duì)音頻信號(hào)中經(jīng)預(yù)加重所提升的高頻分量和噪聲一起衰減掉,設(shè)置在RC網(wǎng)絡(luò)中的電容。
18.移相電容 用于改變交流信號(hào)相位的電容。
19.反饋電容 跨接于放大器的輸入與輸出端之間,使輸出信號(hào)回輸?shù)捷斎攵说碾娙荨?br />
20.降壓限流電容 串聯(lián)在交流電回路中,利用電容對(duì)交流電的容抗特性,對(duì)交流電進(jìn)行限流,從而構(gòu)成分壓電路。
21.逆程電容 用于行掃描輸出電路,并接在行輸出管的集電極與發(fā)射極之間,以產(chǎn)生高壓行掃描鋸齒波逆程脈沖,其耐壓一般在1500V以上。
22.校正電容 串接在偏轉(zhuǎn)線圈回路中,用于校正顯像管邊緣的延伸線性失真。
23.自舉升壓電容 利用電容器的充、放電儲(chǔ)能特性提升電路某點(diǎn)的電位,使該點(diǎn)電位達(dá)到供電端電壓值的2倍。
24.消亮點(diǎn)電容 設(shè)置在視放電路中,用于關(guān)機(jī)時(shí)消除顯像管上殘余亮點(diǎn)的電容。
25.軟啟動(dòng)電容 一般接在開(kāi)關(guān)電源的開(kāi)關(guān)管基極上,防止在開(kāi)啟電源時(shí),過(guò)大的浪涌電流或過(guò)高的峰值電壓加到開(kāi)關(guān)管基極上,導(dǎo)致開(kāi)關(guān)管損壞。
26.啟動(dòng)電容 串接在單相電動(dòng)機(jī)的副繞組上,為電動(dòng)機(jī)提供啟動(dòng)移相交流電壓。在電動(dòng)機(jī)正常運(yùn)轉(zhuǎn)后與副繞組斷開(kāi)。
27.運(yùn)轉(zhuǎn)電容 與單相電動(dòng)機(jī)的副繞組串聯(lián),為電動(dòng)機(jī)副繞組提供移相交流電流。在電動(dòng)機(jī)正常運(yùn)行時(shí),與副繞組保持串接。
單片機(jī)晶振的兩個(gè)電容的作用 這兩個(gè)電容叫晶振的負(fù)載電容,分別接在晶振的兩個(gè)腳上和對(duì)地的電容,一般在幾十皮發(fā)。它會(huì)影響到晶振的諧振頻率和輸出幅度,一般訂購(gòu)晶振時(shí)候供貨方會(huì)問(wèn)你負(fù)載電容是多少。
晶振的負(fù)載電容=[(Cd*Cg)/(Cd+Cg)]+Cic+△C式中Cd,Cg為分別接在晶振的兩個(gè)腳上和對(duì)地的電容,Cic(集成電路內(nèi)部電容)+△C(PCB上電容)經(jīng)驗(yàn)值為3至5pf。
各種邏輯芯片的晶振引腳可以等效為電容三點(diǎn)式振蕩器。晶振引腳的內(nèi)部通常是一個(gè)反相器, 或者是奇數(shù)個(gè)反相器串聯(lián)。在晶振輸出引腳 XO 和晶振輸入引腳 XI 之間用一個(gè)電阻連接, 對(duì)于 CMOS 芯片通常是數(shù) M 到數(shù)十M 歐之間. 很多芯片的引腳內(nèi)部已經(jīng)包含了這個(gè)電阻, 引腳外部就不用接了。這個(gè)電阻是為了使反相器在振蕩初始時(shí)處與線性狀態(tài), 反相器就如同一個(gè)有很大增益的放大器, 以便于起振. 石英晶體也連接在晶振引腳的輸入和輸出之間, 等效為一個(gè)并聯(lián)諧振回路, 振蕩頻率應(yīng)該是石英晶體的并聯(lián)諧振頻率. 晶體旁邊的兩個(gè)電容接地, 實(shí)際上就是電容三點(diǎn)式電路的分壓電容, 接地點(diǎn)就是分壓點(diǎn). 以接地點(diǎn)即分壓點(diǎn)為參考點(diǎn), 振蕩引腳的輸入和輸出是反相的, 但從并聯(lián)諧振回路即石英晶體兩端來(lái)看, 形成一個(gè)正反饋以保證電路持續(xù)振蕩. 在芯片設(shè)計(jì)時(shí), 這兩個(gè)電容就已經(jīng)形成了, 一般是兩個(gè)的容量相等, 容量大小依工藝和版圖而不同, 但終歸是比較小, 不一定適合很寬的頻率范圍. 外接時(shí)大約是數(shù) PF 到數(shù)十 PF, 依頻率和石英晶體的特性而定. 需要注意的是: 這兩個(gè)電容串聯(lián)的值是并聯(lián)在諧振回路上的, 會(huì)影響振蕩頻率. 當(dāng)兩個(gè)電容量相等時(shí), 反饋系數(shù)是 0.5, 一般是可以滿足振蕩條件的, 但如果不易起振或振蕩不穩(wěn)定可以減小輸入端對(duì)地電容量, 而增加輸出端的值以提高反饋量. 晶振起振后的頻率準(zhǔn)確與否,和選取的C1,C2是否與晶振規(guī)格要求的負(fù)載電容要求相吻合有直接關(guān)系,計(jì)算公式如下:CL=C1*C2/(C1+C2)+5pF;算出的CL值要與晶振規(guī)格要求的負(fù)載電容盡量接近才能獲得晶振的標(biāo)稱頻率的振蕩頻率. 一般電容的計(jì)算公式是: 兩邊電容為Cg,Cd,負(fù)載電容為Cl,則
cl=cg*cd/(cg+cd)+a 就是說(shuō)負(fù)載電容15pf的話,兩邊個(gè)接27pf的差不多了,一般a為6.5~13.5pF 晶振的作用:?jiǎn)纹瑱C(jī)工作時(shí),就必須要一個(gè)時(shí)鐘信號(hào),也是說(shuō)它能分出一個(gè)時(shí)間單位能做多少事情(就像出操時(shí)的口令)才能步調(diào)一致,要過(guò)到這個(gè)條件,就必須要有一個(gè)人來(lái)吹這個(gè)口哨,所以我們就給他一個(gè)發(fā)指令的"人"(這就是我們常用的晶振),當(dāng)然不用晶振也行,只要做個(gè)能發(fā)送穩(wěn)定脈沖的電路送入CPU同樣能工作(當(dāng)然必須在工作頻率范圍之內(nèi))。
標(biāo)題:?jiǎn)纹瑱C(jī)c語(yǔ)言教程第十六課 C51指針的使用 2009-04-06 08:12:00 指針就是指變量或數(shù)據(jù)所在的存儲(chǔ)區(qū)地址。如一個(gè)字符型的變量 STR 存放在內(nèi)存單元DATA 區(qū)的 51H 這個(gè)地址中,那么 DATA 區(qū)的 51H 地址就是變量 STR 的指針。在 C 語(yǔ)言中 指針是一個(gè)很重要的概念,正確有效的使用指針類型的數(shù)據(jù),能更有效的表達(dá)復(fù)雜的數(shù)據(jù) 結(jié)構(gòu),能更有效的使用數(shù)組或變量,能方便直接的處理內(nèi)存或其它存儲(chǔ)區(qū)。指針之所以 能這么有效的操作數(shù)據(jù),是因?yàn)闊o(wú)論程序的指令、常量、變量或特殊寄存器都要存放在內(nèi) 存單元或相應(yīng)的存儲(chǔ)區(qū)中,這些存儲(chǔ)區(qū)是按字節(jié)來(lái)劃分的,每一個(gè)存儲(chǔ)單元都能用唯一的 編號(hào)去讀或?qū)憯?shù)據(jù),這個(gè)編號(hào)就是常說(shuō)的存儲(chǔ)單元的地址,而讀寫這個(gè)編號(hào)的動(dòng)作就叫做尋 址,通過(guò)尋址就能訪問(wèn)到存儲(chǔ)區(qū)中的任一個(gè)能訪問(wèn)的單元,而這個(gè)功能是變量或數(shù)組等 是不可能代替的。C 語(yǔ)言也因此引入了指針類型的數(shù)據(jù)類型,專門用來(lái)確定其他類型數(shù)據(jù)的 地址。用一個(gè)變量來(lái)存放另一個(gè)變量的地址,那么用來(lái)存放變量地址的變量稱為“指針變量”。 如用變量 STRIP 來(lái)存放文章開(kāi)頭的 STR 變量的地址 51H,變量 STRIP 就是指針變量。下面 用一個(gè)圖表來(lái)說(shuō)明變量的指針和指針變量?jī)蓚(gè)不一樣的概念。
file:///Z:\TEMP\msohtmlclip1\01\clip_image001.png
變量的指針就是變量的地址,用取地址運(yùn)算符‘&’取得賦給指針變量。&STR 就是把 變量 STR 的地址取得。用語(yǔ)句 STRIP = &STR 就能把所取得的 STR 指針存放在 STRIP 指 針變量中。STRIP 的值就變?yōu)?/font> 51H。可見(jiàn)指針變量的內(nèi)容是另一個(gè)變量的地址,地址所屬的 變量稱為指針變量所指向的變量。
要訪問(wèn)變量 STR 除了能用‘STR’這個(gè)變量名來(lái)訪問(wèn)之外,還能用變量地址來(lái)訪 問(wèn)。方法是先用&STR 取變量地址并賦于 STRIP 指針變量,然后就能用*STRIP 來(lái)對(duì) STR 進(jìn)行訪問(wèn)了。‘*’是指針運(yùn)算符,用它能取得指針變量所指向的地址的值。在上圖中指針 變量 STRIP 所指向的地址是 51H,而 51H 中的值是 40H,那么*STRIP 所得的值就是 40H。 使用指針變量之前也和使用其它類型的變量那樣要求先定義變量,而且形式也相類似,
一般的形式如下:
數(shù)據(jù)類型 [存儲(chǔ)器類型] * 變量名;
unsigned char xdata *pi //指針會(huì)占用二字節(jié),指針自身存放在編譯器默認(rèn)存儲(chǔ)區(qū),指
向 xdata 存儲(chǔ)區(qū)的 char 類型
unsigned char xdata * data pi; //除指針自身指定在 data 區(qū),其它同上
int * pi; //定義為一般指針,指針自身存放在編譯器默認(rèn)存儲(chǔ)區(qū),占三個(gè)字節(jié) 在定義形式中“數(shù)據(jù)類型”是指所定義的指針變量所指向的變量的類型。“存儲(chǔ)器類型”
是編譯器編譯時(shí)的一種擴(kuò)展標(biāo)識(shí),它是可選的。在沒(méi)有“存儲(chǔ)器類型”選項(xiàng)時(shí),則定義為一
般指針,如有“存儲(chǔ)器類型”選項(xiàng)時(shí)則定義為基于存儲(chǔ)器的指針。限于 51 芯片的尋址范圍,
指針變量最大的值為 0xFFFF,這樣就決定了一般指針在內(nèi)存會(huì)占用 3 個(gè)字節(jié),第一字節(jié)存 放該指針存儲(chǔ)器類型編碼,后兩個(gè)則存放該指針的高低位址。而基于存儲(chǔ)器的指針因?yàn)椴挥?/font> 識(shí)別存儲(chǔ)器類型所以會(huì)占一或二個(gè)字節(jié),idata,data,pdata 存儲(chǔ)器指針占一個(gè)字節(jié),code,xdata 則會(huì)占二個(gè)字節(jié)。由上可知,明確的定義指針,能節(jié)省存儲(chǔ)器的開(kāi)銷,這在嚴(yán)格要求程序 體積的項(xiàng)目中很有用處。
指針的使用方法很多,限于篇幅以上只能對(duì)它做一些基礎(chǔ)的介紹。下面用在講述常量時(shí) 的例程改動(dòng)一下,用以說(shuō)明指針的基本使用方法。
#include //預(yù)處理文件里面定義了特殊寄存器的名稱如 P1 口定義為 P1
void main(void)
{
//定義花樣數(shù)據(jù),數(shù)據(jù)存放在片內(nèi) CODE 區(qū)中
unsigned char code design[]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,
0xE7,0xDB,0xBD,0x7E,0xFF};
unsigned int a; //定義循環(huán)用的變量
unsigned char b;
unsigned char code * dsi; //定義基于 CODE 區(qū)的指針
do{
dsi = &design[0]; //取得數(shù)組第一個(gè)單元的地址
for (b=0; b<32; b++)
{
}
}while(1);
}
for(a=0; a<30000; a++); //延時(shí)一段時(shí)間
P1 = *dsi; //從指針指向的地址取數(shù)據(jù)到 P1 口
dsi++; //指針加一,
為了能清楚的了解指針的工作原理,能使用 keil uv2 的軟件仿真器查看各變量和存儲(chǔ)器的
值。編譯程序并執(zhí)行,然后打開(kāi)變量窗口,如圖。用單步執(zhí)行,就能查到到指針的變量。 如圖中所示的是程序中循環(huán)執(zhí)行到第二次,這個(gè)時(shí)候指針 dsi 指向 c:0x0004 這個(gè)地址,這個(gè)地址 的值是 0xFE。在存儲(chǔ)器窗口則能察看各地址單元的值。使用這種方法不但在學(xué)習(xí)時(shí)能 幫助更好的了解語(yǔ)法或程序的工作,而且在實(shí)際使用中更能讓你更快更準(zhǔn)確的編寫程序或解 決程序中的問(wèn)題。
|
| 在程序運(yùn)行中,函數(shù)代碼是程序的算法指令部分,它們和數(shù)組一樣也占用存儲(chǔ)空間,都有相應(yīng)的地址。可以使用指針變量指向數(shù)組的首地址,也可以使用指針變量指向函數(shù)代碼的首地址,指向函數(shù)代碼首地址的指針變量稱為函數(shù) | | | file:///Z:\TEMP\msohtmlclip1\01\clip_image003.png
|
file:///Z:\TEMP\msohtmlclip1\01\clip_image004.png
| file:///Z:\TEMP\msohtmlclip1\01\clip_image002.png
| file:///Z:\TEMP\msohtmlclip1\01\clip_image005.png
|
|
|
|
|
|
|
在程序運(yùn)行中,函數(shù)代碼是程序的算法指令部分,它們和數(shù)組一樣也占用存儲(chǔ)空間,都有相應(yīng)的地址。可以使用指針變量指向數(shù)組的首地址,也可以使用指針變量指向函數(shù)代碼的首地址,指向函數(shù)代碼首地址的指針變量稱為函數(shù)指針。
1.函數(shù)指針定義
函數(shù)類型 (*指針變量名)(形參列表);
“函數(shù)類型”說(shuō)明函數(shù)的返回類型,由于“()”的優(yōu)先級(jí)高于“*”,所以指針變量名外的括號(hào)必不可少,后面的“形參列表”表示指針變量指向的函數(shù)所帶的參數(shù)列表。
例如:
int (*f)(int x);
double (*ptr)(double x);
在定義函數(shù)指針時(shí)請(qǐng)注意:
函數(shù)指針和它指向的函數(shù)的參數(shù)個(gè)數(shù)和類型都應(yīng)該是—致的;
函數(shù)指針的類型和函數(shù)的返回值類型也必須是一致的。
2.函數(shù)指針的賦值
函數(shù)名和數(shù)組名一樣代表了函數(shù)代碼的首地址,因此在賦值時(shí),直接將函數(shù)指針指向函數(shù)名就行了。
例如,
int func(int x); /* 聲明一個(gè)函數(shù)*/
int (*f) (int x); /*聲明一個(gè)函數(shù)指針 */
f=func; /* 將func函數(shù)的首地址賦給指針f*/
賦值時(shí)函數(shù)func不帶括號(hào),也不帶參數(shù),由于func代表函數(shù)的首地址,因此經(jīng)過(guò)賦值以后,指針f就指向函數(shù)func(x)的代碼的首地址。
3.通過(guò)函數(shù)指針調(diào)用函數(shù)
函數(shù)指針是通過(guò)函數(shù)名及有關(guān)參數(shù)進(jìn)行調(diào)用的。
與其他指針變量相類似,如果指針變量pi是指向某整型變量i的指針,則*p等于它所指的變量i;如果pf是指向某浮點(diǎn)型變量f的指針,則*pf就等價(jià)于它所指的變量f。同樣地,*f是指向函數(shù)func(x)的指針,則*f就代表它所指向的函數(shù)func。所以在執(zhí)行了f=func;之后,(*f)和func代表同一函數(shù)。
由于函數(shù)指針指向存儲(chǔ)區(qū)中的某個(gè)函數(shù),因此可以通過(guò)函數(shù)指針調(diào)用相應(yīng)的函數(shù)。現(xiàn)在我們就討論如何用函數(shù)指針調(diào)用函數(shù),它應(yīng)執(zhí)行下面三步:
首先,要說(shuō)明函數(shù)指針變量。
例如:int (*f)(int x);
其次,要對(duì)函數(shù)指針變量賦值。
例如: f=func; (func(x)必須先要有定義)
最后,要用 (*指針變量)(參數(shù)表);調(diào)用函數(shù)。
例如: (*f)(x);(x必須先賦值)
【例】任意輸入n個(gè)數(shù),找出其中最大數(shù),并且輸出最大數(shù)值。
main()
{
int f();
int i,a,b;
int(*p)(); /* 定義函數(shù)指針*/
scanf('%d',&a);
p=f; /* 給函數(shù)指針p賦值,使它指向函數(shù)f*/
for(i=1;i<9;i++)
{
scanf('%d',&b);
a=(*p)(a,b); /* 通過(guò)指針p調(diào)用函數(shù)f*/
}
printf('The MaxNumber is:%d',a)
}
f(int x,int y)
{
int z;
z=(x>y)?x:y;
return(z);
}
運(yùn)行結(jié)果為:
343 -45 4389 4235 1 -534 988 555 789↙
The Max Number is:4389
【例】(*((void (*)())0))() 表示什么意思?
void (*)() 聲明函數(shù)指針
讓我們來(lái)分析一下,左邊圓括弧中的星號(hào)是函數(shù)指針聲明的關(guān)鍵。另外兩個(gè)元素是函數(shù)的返回類型(void)和右邊圓括弧中的入口參數(shù)(本例中參數(shù)是空)。注意本例中還沒(méi)有創(chuàng)建指針變量-只是聲明了變量類型。
(void (*)())0 把0強(qiáng)制轉(zhuǎn)換成函數(shù)指針
(*((void (*)())0))() 調(diào)用
所以(*((void (*)())0))()的意思是:調(diào)用地址為0處的程序。
【指針函數(shù)】
一個(gè)函數(shù)不僅可以帶回一個(gè)整型數(shù)據(jù)的值,字符類型值和實(shí)型類型的值,還可以帶回指針類型的數(shù)據(jù),使其指向某個(gè)地址單元。
返回指針的函數(shù),一般定義格式為:
類型標(biāo)識(shí)符 *函數(shù)名(參數(shù)表)
int *f(x,y);
其中x,y是形式參數(shù),f是函數(shù)名,調(diào)用后返回一個(gè)指向整型數(shù)據(jù)的地址指針。f(x,y)是函數(shù),其值是指針。
如:char *ch();表示的就是一個(gè)返回字符型指針的函數(shù),請(qǐng)看下面的例題:
【例】將字符串1(str1)復(fù)制到字符串2(str2),并輸出字符串2.
#include 'stdio.h'
main()
{
char *ch(char *,char*);
char str1[]='I amglad to meet you!';
char str2[]='Welcomto study C!';
printf('%s',ch(str1,str2));
}
char *ch(char *str1,char*str2)
{
int i;
char *p;
p=str2
if(*str2==NULL) exit(-1);
do
{
*str2=*str1;
str1++;
str2++;
}while(*str1!=NULL);
return(p);
}
通過(guò)分析可得
函數(shù)指針是一個(gè)指向函數(shù)的指針,而指針函數(shù)只是說(shuō)明他是一個(gè)返回值為指針的函數(shù),
函數(shù)指針可以用來(lái)指向一個(gè)函數(shù)。
三極管的主要特點(diǎn)是具有電流放大功能,以共發(fā)射極接法為例(信號(hào)從基極輸入,從集電極輸出,發(fā)射極接地),當(dāng)基極電壓UB有一個(gè)微小的變化時(shí),基極電流IB也會(huì)隨之有一小的變化,受基極電流IB的控制,集電極電流IC會(huì)有一個(gè)很大的變化,基極電流IB越大,集電極電流IC也越大,反之,基極電流越小,集電極電流也越小,即基極電流控制集電極電流的變化。但是集電極電流的變化比基極電流的變化大得多,這就是三極管的放大作用。IC 的變化量與IB變化量之比叫做三極管的放大倍數(shù)β(β=ΔIC/ΔIB, Δ表示變化量。),三極管的放大倍數(shù)β一般在幾十到幾百倍。
0.png (47.98 KB, 下載次數(shù): 27)
下載附件
2018-7-14 21:02 上傳
幾乎在所有的電子電路中,都要用到半導(dǎo)體二極管,它在許多的電路中起著重要的作用,它是誕生最早的半導(dǎo)體器件之一,其應(yīng)用也非常廣泛。
二極管的工作原理
晶體二極管為一個(gè)由p型半導(dǎo)體和n型半導(dǎo)體形成的p-n結(jié),在其界面處兩側(cè)形成空間電荷層,并建有自建電場(chǎng)。當(dāng)不存在外加電壓時(shí),由于p-n 結(jié)兩邊載流子濃度差引起的擴(kuò)散電流和自建電場(chǎng)引起的漂移電流相等而處于電平衡狀態(tài)。
當(dāng)外界有正向電壓偏置時(shí),外界電場(chǎng)和自建電場(chǎng)的互相抑消作用使載流子的擴(kuò)散電流增加引起了正向電流。
當(dāng)外界有反向電壓偏置時(shí),外界電場(chǎng)和自建電場(chǎng)進(jìn)一步加強(qiáng),形成在一定反向電壓范圍內(nèi)與反向偏置電壓值無(wú)關(guān)的反向飽和電流I0。
當(dāng)外加的反向電壓高到一定程度時(shí),p-n結(jié)空間電荷層中的電場(chǎng)強(qiáng)度達(dá)到臨界值產(chǎn)生載流子的倍增過(guò)程,產(chǎn)生大量電子空穴對(duì),產(chǎn)生了數(shù)值很大的反向擊穿電流,稱為二極管的擊穿現(xiàn)象。
二極管的類型
二極管種類有很多,按照所用的半導(dǎo)體材料,可分為鍺二極管(Ge管)和硅二極管(Si管)。根據(jù)其不同用途,可分為檢波二極管、整流二極管、穩(wěn)壓二極管、開(kāi)關(guān)二極管等。按照管芯結(jié)構(gòu),又可分為點(diǎn)接觸型二極管、面接觸型二極管及平面型二極管。點(diǎn)接觸型二極管是用一根很細(xì)的金屬絲壓在光潔的半導(dǎo)體晶片表面,通以脈沖電流,使觸絲一端與晶片牢固地?zé)Y(jié)在一起,形成一個(gè)“PN結(jié)”。由于是點(diǎn)接觸,只允許通過(guò)較小的電流(不超過(guò)幾十毫安),適用于高頻小電流電路,如收音機(jī)的檢波等。
面接觸型二極管的“PN結(jié)”面積較大,允許通過(guò)較大的電流(幾安到幾十安),主要用于把交流電變換成直流電的“整流”電路中。
平面型二極管是一種特制的硅二極管,它不僅能通過(guò)較大的電流,而且性能穩(wěn)定可靠,多用于開(kāi)關(guān)、脈沖及高頻電路中。
二極管的導(dǎo)電特性
二極管最重要的特性就是單方向?qū)щ娦浴T陔娐分校娏髦荒軓亩䴓O管的正極流入,負(fù)極流出。下面通過(guò)簡(jiǎn)單的實(shí)驗(yàn)說(shuō)明二極管的正向特性和反向特性。
正向特性
在電子電路中,將二極管的正極接在高電位端,負(fù)極接在低電位端,二極管就會(huì)導(dǎo)通,這種連接方式,稱為正向偏置。必須說(shuō)明,當(dāng)加在二極管兩端的正向電壓很小時(shí),二極管仍然不能導(dǎo)通,流過(guò)二極管的正向電流十分微弱。只有當(dāng)正向電壓達(dá)到某一數(shù)值(這一數(shù)值稱為“門檻電壓”,鍺管約為0.2V,硅管約為0.6V)以后,二極管才能直正導(dǎo)通。導(dǎo)通后二極管兩端的電壓基本上保持不變(鍺管約為0.3V,硅管約為0.7V),稱為二極管的“正向壓降”。
2、反向特性
在電子電路中,二極管的正極接在低電位端,負(fù)極接在高電位端,此時(shí)二極管中幾乎沒(méi)有電流流過(guò),此時(shí)二極管處于截止?fàn)顟B(tài),這種連接方式,稱為反向偏置。二極管處于反向偏置時(shí),仍然會(huì)有微弱的反向電流流過(guò)二極管,稱為漏電流。當(dāng)二極管兩端的反向電壓增大到某一數(shù)值,反向電流會(huì)急劇增大,二極管將失去單方向?qū)щ娞匦裕@種狀態(tài)稱為二極管的擊穿。
二極管的主要參數(shù)
用來(lái)表示二極管的性能好壞和適用范圍的技術(shù)指標(biāo),稱為二極管的參數(shù)。不同類型的二極管有不同的特性參數(shù)。對(duì)初學(xué)者而言,必須了解以下幾個(gè)主要參數(shù):
1、額定正向工作電流
是指二極管長(zhǎng)期連續(xù)工作時(shí)允許通過(guò)的最大正向電流值。因?yàn)殡娏魍ㄟ^(guò)管子時(shí)會(huì)使管芯發(fā)熱,溫度上升,溫度超過(guò)容許限度(硅管為140左右,鍺管為90左右)時(shí),就會(huì)使管芯過(guò)熱而損壞。所以,二極管使用中不要超過(guò)二極管額定正向工作電流值。例如,常用的IN4001-4007型鍺二極管的額定正向工作電流為1A。
2、最高反向工作電壓
加在二極管兩端的反向電壓高到一定值時(shí),會(huì)將管子擊穿,失去單向?qū)щ娔芰Α榱吮WC使用安全,規(guī)定了最高反向工作電壓值。例如,IN4001二極管反向耐壓為50V,IN4007反向耐壓為1000V。
3、反向電流
反向電流是指二極管在規(guī)定的溫度和最高反向電壓作用下,流過(guò)二極管的反向電流。反向電流越小,管子的單方向?qū)щ娦阅茉胶谩V档米⒁獾氖欠聪螂娏髋c溫度有著密切的關(guān)系,大約溫度每升高10,反向電流增大一倍。例如2AP1型鍺二極管,在25時(shí)反向電流若為250uA,溫度升高到35,反向電流將上升到500uA,依此類推,在75時(shí),它的反向電流已達(dá)8mA,不僅失去了單方向?qū)щ娞匦裕會(huì)使管子過(guò)熱而損壞。又如,2CP10型硅二極管,25時(shí)反向電流僅為5uA,溫度升高到75時(shí),反向電流也不過(guò)160uA。故硅二極管比鍺二極管在高溫下具有較好的穩(wěn)定性。
測(cè)試二極管的好壞
初學(xué)者在業(yè)余條件下可以使用萬(wàn)用表測(cè)試二極管性能的好壞。測(cè)試前先把萬(wàn)用表的轉(zhuǎn)換開(kāi)關(guān)撥到歐姆檔的RX1K檔位(注意不要使用RX1檔,以免電流過(guò)大燒壞二極管),再將紅、黑兩根表筆短路,進(jìn)行歐姆調(diào)零。
1、正向特性測(cè)試
把萬(wàn)用表的黑表筆(表內(nèi)正極)搭觸二極管的正極,,紅表筆(表內(nèi)負(fù)極)搭觸二極管的負(fù)極。若表針不擺到0值而是停在標(biāo)度盤的中間,這時(shí)的阻值就是二極管的正向電阻,一般正向電阻越小越好。若正向電阻為0值,說(shuō)明管芯短路損壞,若正向電阻接近無(wú)窮大值,說(shuō)明管芯斷路。短路和斷路的管子都不能使用。
2、反向特性測(cè)試
把萬(wàn)且表的紅表筆搭觸二極管的正極,黑表筆搭觸二極管的負(fù)極,若表針指在無(wú)窮大值或接近無(wú)窮大值,管子就是合格的。
二極管的應(yīng)用
1、整流二極管
利用二極管單向?qū)щ娦裕梢园逊较蚪惶孀兓慕涣麟娮儞Q成單一方向的脈動(dòng)直流電。
2、開(kāi)關(guān)元件
二極管在正向電壓作用下電阻很小,處于導(dǎo)通狀態(tài),相當(dāng)于一只接通的開(kāi)關(guān);在反向電壓作用下,電阻很大,處于截止?fàn)顟B(tài),如同一只斷開(kāi)的開(kāi)關(guān)。利用二極管的開(kāi)關(guān)特性,可以組成各種邏輯電路。
3、限幅元件
二極管正向?qū)ê螅恼驂航祷颈3植蛔儯ü韫転?.7V,鍺管為0.3V)。利用這一特性,在電路中作為限幅元件,可以把信號(hào)幅度限制在一定范圍內(nèi)。
4、繼流二極管
在開(kāi)關(guān)電源的電感中和繼電器等感性負(fù)載中起繼流作用。
5、檢波二極管
在收音機(jī)中起檢波作用。
6、變?nèi)荻䴓O管
使用于電視機(jī)的高頻頭中。
經(jīng)驗(yàn)
浮點(diǎn)轉(zhuǎn)十六進(jìn)制:
/*作用:浮點(diǎn)數(shù)---轉(zhuǎn)---十六進(jìn)制 */
union fnum
{
long int m;
float f;
};
然后需要在引用的函數(shù)內(nèi)聲明共用體比如:
union fnum num;
用法:共用體是將 多個(gè)成員變量共用一個(gè)地址,并且同一時(shí)刻只允許1個(gè)成員變量被賦值,當(dāng)某個(gè)成員變量修改后,其他的成員立刻改變,
比如:num.f=6.91;那么num.m=0x40DD1EB8;
當(dāng)num.f=6.0時(shí),另一個(gè)成員變量也改變num.m=40C00000
因?yàn)?單片機(jī)的十進(jìn)制和十六進(jìn)制都可以進(jìn)行直接計(jì)算,所以用以上辦法就可以實(shí)現(xiàn)浮點(diǎn)數(shù)轉(zhuǎn)十六進(jìn)制.
通俗的講:共用體就像一個(gè)容器,成員變量就是不同形狀的容器出口,當(dāng)我們把1個(gè)圓形的物體放進(jìn)去,如果這時(shí)我們像要一個(gè)方形的物體,那么就從方形的出口將物體取出,就得到方形了,
同理,我們要浮點(diǎn)轉(zhuǎn)十六進(jìn)制,就把浮點(diǎn)放進(jìn)共用體(num.f=6.91),然后從整形取出( Rec=num.m )
細(xì)節(jié)問(wèn)題:
因?yàn)楦↑c(diǎn)數(shù)轉(zhuǎn)成十六進(jìn)制后,通常都是32位數(shù)據(jù),所以我們?cè)谌〕稣螖?shù)的時(shí)候要 用一個(gè)32位的變量(long int,或者u32 ) 去存.
2. 共用體和結(jié)構(gòu)體的區(qū)別 共用體和結(jié)構(gòu)體有下列區(qū)別:
1. 共用體和結(jié)構(gòu)體都是由多個(gè)不同的數(shù)據(jù)類型成員組成,
但在任何同一時(shí)刻, 共用體只存放了一個(gè)被選中的成員, 而結(jié)構(gòu)體的所有成員都存在。
2. 對(duì)于共用體的不同成員賦值, 將會(huì)對(duì)其它成員重寫, 原來(lái)成員的值就不存在了,
而對(duì)于結(jié)構(gòu)體的不同成員賦值是互不影響的。 另外要注意的是,
計(jì)算串口接收到的浮點(diǎn)數(shù):
我們通常在接收到串口的數(shù)字時(shí), 基本上都是文本類型的數(shù)字, 并且是一位一位的文本,
比如6.19就是 ‘6’, ’.’ , ’1’ , ’9’
我們將它重新變?yōu)?.19需要進(jìn)行一下操作:
Arr[]={‘6’,’.’,’1’,’9’}
1.所有文本類型的數(shù)字只有 減零 之后才可以進(jìn)行計(jì)算,否則是文本型.
Arr[0]-‘0’;
2. 特別注意
sum_num= (float)(arr[6]-'0')+
(float)(arr[8]-'0')/10 +(float)(arr[9]-'0')/ 100;
在計(jì)算的時(shí)候,小數(shù)部分要轉(zhuǎn)換成 小數(shù),然后進(jìn)行相加,
注意的是 在(float) (arr[8]-'0')/10的時(shí)候, 前面要先強(qiáng)制裝換成(float)之后 才可以/10,這樣才是把 1變成0.1,
如果在/10之前 沒(méi)有(float)的話,意味著取10的倍數(shù),
如果是 1/10,不加(float),那就等于0;最后相加就等于6.00000;
正確:
3. 注意細(xì)節(jié):
成功將Arr[]={‘6’,’.’,’1’,’9’}
組合成sum_num =6.19之后, 在進(jìn)行判斷sum_num時(shí):
if(sum_num == 62.91f) { LED1=0; }
注意這里的62.91后面加f,如果不加會(huì)報(bào)警告:
:?jiǎn)尉炔僮鲾?shù)隱式轉(zhuǎn)換為雙精度
當(dāng)if(sum_num == 62.91) { LED1=0; }
這里的sum_num是浮點(diǎn)型,而62.91默認(rèn)是雙精度類型的;
當(dāng)2個(gè)不同類型的變量 相加減時(shí),會(huì)將二者都轉(zhuǎn)換成較大一方的類型,
所以 浮點(diǎn)數(shù) 和 雙精度進(jìn)行判斷時(shí):浮點(diǎn)數(shù)會(huì)被轉(zhuǎn)換成雙精度.所以會(huì)報(bào)警告,告訴你這里進(jìn)行了這樣的操作.
當(dāng)if(sum_num == 62.91f) { LED1=0; }這里的62.91f
是將62.91轉(zhuǎn)換成浮點(diǎn)數(shù)
浮點(diǎn)數(shù) 和 浮點(diǎn)數(shù)進(jìn)行判斷 或者 計(jì)算,并不會(huì)轉(zhuǎn)換成雙精度,警告自然沒(méi)了
原創(chuàng):http://www.raoushi.com/bbs/dpj-128076-1.html
|