導航:首頁 > 操作系統 > 單片機ic04

單片機ic04

發布時間:2024-04-23 06:18:10

單片機如何實現多路模擬量的數據採集、顯示

普通單片機實現多路模擬量的數據採集、顯示需要:

外部連接一個多通道輸入的ADC晶元,單片機按照一定的周期驅動模擬開關切換到不同的模擬通道,設計模數轉換控制器的控製程序,可以進行定時模擬信號採集和顯示。

(1)單片機ic04擴展閱讀:

單片機基本結構及作用:

1、運算器

運算器由運算部件——算術邏輯單元(Arithmetic & Logical Unit,簡稱ALU)、累加器和寄存器等幾部分組成。ALU的作用是把傳來的數據進行算術或邏輯運算,輸入來源為兩個8位數據,分別來自累加器和數據寄存器。

ALU能完成對這兩個數據進行加、減、與、或、比較大小等操作,最後將結果存入累加器。

運算器有兩個功能:

執行各種算術運算。

執行各種邏輯運算,並進行邏輯測試,如零值測試或兩個值的比較。

運算器所執行全部操作都是由控制器發出的控制信號來指揮的,並且,一個算術操作產生一個運算結果,一個邏輯操作產生一個判決。

2、控制器

控制器由程序計數器、指令寄存器、指令解碼器、時序發生器和操作控制器等組成,是發布命令的「決策機構」,即協調和指揮整個微機系統的操作。其主要功能有:

從內存中取出一條指令,並指出下一條指令在內存中的位置。

對指令進行解碼和測試,並產生相應的操作控制信號,以便於執行規定的動作。

指揮並控制CPU、內存和輸入輸出設備之間數據流動的方向。

微處理器內通過內部匯流排把ALU、計數器、寄存器和控制部分互聯,並通過外部匯流排與外部的存儲器、輸入輸出介面電路聯接。外部匯流排又稱為系統匯流排,分為數據匯流排DB、地址匯流排AB和控制匯流排CB。通過輸入輸出介面電路,實現與各種外圍設備連接。

3、主要寄存器

累加器A

累加器A是微處理器中使用最頻繁的寄存器。在算術和邏輯運算時它有雙功能:運算前,用於保存一個操作數;運算後,用於保存所得的和、差或邏輯運算結果。

數據寄存器DR

數據寄存器通過數據匯流排向存儲器和輸入散豎/輸出設備送(寫)或取(讀)數據的暫存單元。它可以保存一條正在解碼的指令,也可以保存正在送槐或往存儲器中存儲的一個數據位元組等等。

指令寄存器IR和指令解碼器ID

指令包括操作碼和操作數。

指令寄存器是用來保存當前正在執行的一條指令。當執行一條指令時,先把它從內存中取到數據寄存器中,然後再傳送到指令寄存器。

當系統執行給定的指令時,必須對操作碼進行解碼,以確定所要求的操作,指令解碼器就是負責這項工作的。其中,指令寄存器中操作碼欄位的輸出就是指令解碼器的輸入。

程序計數器PC

PC用於確定下一條指令鉛掘伍的地址,以保證程序能夠連續地執行下去,因此通常又被稱為指令地址計數器。在程序開始執行前必須將程序的第一條指令的內存單元地址(即程序的首地址)送入PC,使它總是指向下一條要執行指令的地址。

地址寄存器AR

地址寄存器用於保存當前CPU所要訪問的內存單元或I/O設備的地址。由於內存與CPU之間存在著速度上的差異,所以必須使用地址寄存器來保持地址信息,直到內存讀/寫操作完成為止。

顯然,當CPU向存儲器存數據、CPU從內存取數據和CPU從內存讀出指令時,都要用到地址寄存器和數據寄存器。同樣,如果把外圍設備的地址作為內存地址單元來看的話,那麼當CPU和外圍設備交換信息時,也需要用到地址寄存器和數據寄存器。

⑵ 單片機80c51中定時/計數器的工作方式中怎麼計數范圍怎麼算的為什麼這樣算

定時器有一個16位的計數寄存器,這個16位被分成兩個8位的寄存器,分別是THx和TLx,有4種工作方式:
方式0:用了THx的8位,用了TLx中的低5位,這樣,加起來一共是13位,所以,最大計數范圍就是0-8191,一共8192個時鍾
方式1:用了THx的8位,用了TLx中的全部8位,這樣,加起來一共是16位,所以,最大計數范圍就是0-65535,一共65536個時鍾,也是定時器用的最大的范圍
方式2:只用了THx用來計數,當THx的計數用完了之後,硬體自動把TLx賦值給THx,所以方式2相當於只是8位,所以最大計數到 0-255,共256個
方式3:用於串口波特率的計算,不討論.
方式0是為了向上兼容老式單片機,一般很少用,現在基本上用方式1最多.

⑶ 單片機主要外圍器件

單片機外圍器件,常跟單片機外圍電路相關,其電路主要有鍵盤輸入 、A/D輸入,溫度、通訊、I2C存儲等單元電路,輸出主要有LED或者LCD輸出,一般控制介面輸出,在配相應的功率驅動IC。和以上相關的常見外圍器件有:通訊電平轉換晶元(比如SP3232EEY,相似型號還有很多)、I2C存儲器(一般是24C02、24C04、FM24CL16等,根據最後數據大小確定存儲容量)、溫度(DS1820單匯流排、DS600U)、LED數碼管驅動(CH452A V2)、輸出驅動一般用繼電器轉換控制,也有專用晶元等。其它日歷有2300系列。

⑷ 求教一個51單片機程序。。(LCD電子時鍾)

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;
#define yh 0x80
#define er 0x80+0x40//液晶屏的與 C51 之間的引腳連接定義
sbit rs=P2^5;
sbit en=P2^7;
sbit rw=P2^6;//如果硬體上 rw 接地,就不用寫這句和後面的 rw=0
//DS1302 時鍾晶元與 C51 之間的引腳連接定義
sbit IO=P3^6;
sbit SCLK=P3^5;
sbit RST=P3^7;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;//校時按鍵與 C51 的引腳連接定義
sbit key1=P3^2;//設置鍵
sbit key2=P3^3;//加鍵
sbit key3=P3^4;//減鍵
uchar code tab1[]={"20//////////"};//年顯示的固定字元
uchar code tab2[]={"LOVE ::::::"};//時間顯示的固定字元

//延時函數,後面經常調用
void delay(uint xms)//延時函數,有參函數
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
/********液晶寫入指令函數與寫入數據函數,以後可調用**************/
write_1602com(uchar com) //****液晶寫入指令函數****
{
rs=0; //數據/指令選擇置為指令
rw=0; //讀寫選擇 置為寫
P0=com; //送入數據
delay(1);
en=1; //拉高使能端,為製造有效的下降沿做准備
delay(1);
en=0;
//en 由高變低,產生下降沿,液晶執行命令
}

write_1602dat(uchar dat) //***液晶寫入數據函數****
{
rs=1; //數據/指令選擇置為數據
rw=0; //讀寫選擇置為寫
P0=dat; //送入數據
delay(1);
en=1; //en 置高電平,為製造下降沿做准備
delay(1);
en=0; //en 由高變低,產生下降沿,液晶執行命令

}

lcd_init() //***液晶初始化函數****//
{
write_1602com(0x38); //設置液晶工作模式,意思:16*2 行顯示,5*7 點陣,8 位數據
write_1602com(0x0c); //開顯示不顯示游標
write_1602com(0x06); //整屏不移動,游標自動右移
write_1602com(0x01); //清顯示
write_1602com(yh+1); //日歷顯示固定符號從第一行第 1 個位置之後開始顯示
for(a=0;a<14;a++)
{
write_1602dat(tab1[a]); //向液晶屏寫日歷顯示的固定符號部分
}
write_1602com(er+1);//時間顯示固定符號寫入位置,從第 2 個位置後開始顯示
for(a=0;a<12;a++)
{
write_1602dat(tab2[a]);//寫顯示時間固定符號,兩個冒號
}
}
/***************DS1302 有關子函數********************/
void write_byte(uchar dat)//寫一個位元組
{
ACC=dat;
RST=1;
for(a=8;a>0;a--)
{
IO=ACC0;//相當於匯編中的 RRC
SCLK=0;
SCLK=1;
ACC=ACC>>1;
}
}
uchar read_byte() //讀一個位元組
{
RST=1;
for(a=8;a>0;a--)
{
ACC7=IO;
SCLK=1;
SCLK=0;
ACC=ACC>>1;
}
return (ACC);
}
//----------------------------------------//
void write_1302(uchar add,uchar dat) //向 1302 晶元寫函數,指定寫入地址,數據
{
RST=0;
SCLK=0;
RST=1;
write_byte(add);
write_byte(dat);
SCLK=1;
RST=0;
}
uchar read_1302(uchar add) //從 1302 讀數據函數,指定讀取數據來源地址
{
uchar temp;
RST=0;
SCLK=0;
RST=1;
write_byte(add);
temp=read_byte();
SCLK=1;
RST=0;
return(temp);
}
uchar BCD_Decimal(uchar bcd)//BCD 碼轉十進制函數,輸入 BCD,返回十進制
{
uchar Decimal;
Decimal=bcd>>4;
return(Decimal=Decimal*10+(bcd&=0x0F));
}
//--------------------------------------//
void ds1302_init()//1302 晶元初始化子函數(2010-01-07,12:00:00,week4)
{
RST=0;
SCLK=0;
write_1302(0x8e,0x00);//允許寫,禁止防寫
write_1302(0x8e,0x80);//打開防寫
}
//時分秒顯示子函數
void write_sfm(uchar add,uchar dat)//向 LCD 寫時分秒,有顯示位置加、現示數據,兩個參數
{
uchar gw,sw;
gw=dat%10;//取得個位數字
sw=dat/10;//取得十位數字
write_1602com(er+add);//er 是頭文件規定的值 0x80+0x40
write_1602dat(0x30+sw);//數字+30 得到該數字的 LCD1602 顯示碼
write_1602dat(0x30+gw);//數字+30 得到該數字的 LCD1602 顯示碼
}
//年月日顯示子函數
void write_nyr(uchar add,uchar dat)//向 LCD 寫年月日,有顯示位置加數、顯示數據,兩個參數
{
uchar gw,sw;
gw=dat%10;//取得個位數字
sw=dat/10;//取得十位數字
write_1602com(yh+add);//設定顯示位置為第一個位置+add
write_1602dat(0x30+sw);//數字+30 得到該數字的 LCD1602 顯示碼
write_1602dat(0x30+gw);//數字+30 得到該數字的 LCD1602 顯示碼
}
void write_week(uchar week)//寫星期函數
{
write_1602com(yh+0x0c);//星期字元的顯示位置
switch(week)
{
case 1:write_1602dat('M');//星期數為一時,顯示
write_1602dat('o');
write_1602dat('n');break;
case 2:write_1602dat('T');//星期數據為二時顯示
write_1602dat('u');
write_1602dat('e');break;
case 3:write_1602dat('W');//星期數據為三時顯示
write_1602dat('e');
write_1602dat('d');break;
case 4:write_1602dat('T');//星期數據為四是顯示
write_1602dat('h');
write_1602dat('u');break;
case 5:write_1602dat('F');//星期數據為五時顯示
write_1602dat('r');
write_1602dat('i');break;
case 6:write_1602dat('S');//星期數據為六時顯示
write_1602dat('t');
write_1602dat('a');break;
case 7:write_1602dat('S');//星期數據為日時顯示
write_1602dat('u');
write_1602dat('n');break;
}
}
//****************鍵盤掃描有關函數**********************
void keyscan()
{
if(key1==0)//key1 為功能鍵(設置鍵)
{
delay(9);//延時,用於消抖動
if(key1==0)//延時後再次確認按鍵按下
{
delay(20);
while(!key1);
key1n++;
if(key1n==9)
key1n=1;//設置按鍵共有秒、分、時、星期、日、月、年、返回,8 個功能循環
switch(key1n)
{
case 1:TR0=0;//關閉定時器
write_1602com(er+0x0E);//設置按鍵按動一次,秒位置顯示游標
write_1602com(0x0f);//設置游標為閃爍
temp=(miao)/10*16+(miao)%10;//秒數據寫入 DS1302
write_1302(0x8e,0x00);
write_1302(0x80,0x80|temp);//miao
write_1302(0x8e,0x80);break;
case 2:write_1602com(er+11);//按 2 次 fen 位置顯示游標
break;
case 3:write_1602com(er+8);//按動 3 次,shi
break;
case 4:write_1602com(yh+0x0e);//按動 4 次,week
break;
case 5:write_1602com(yh+0x0a);//按動 5 次,ri
break;
case 6:write_1602com(yh+0x07);//按動 6 次,yue
break;
case 7:write_1602com(yh+0x04);//按動 7 次,nian
break;
case 8:write_1602com(0x0c);//按動到第 8 次,設置游標不閃爍
TR0=1;//打開定時器
TR0=1;
temp=(miao)/10*16+(miao)%10;
write_1302(0x8e,0x00);
write_1302(0x80,0x00|temp);//miao 數據寫入 DS1302
write_1302(0x8e,0x80);break;
}
}
}
//------------------------------加鍵 key2----------------------------//
if(key1n!=0)//當 key1 按下以下。再按以下鍵才有效(按鍵次數不等於零)
{
if(key2==0)//上調鍵
{
delay(10);
if(key2==0)
{
delay(20);
while(!key2);
switch(key1n)
{
case 1:miao++;//設置鍵按動 1 次,調秒
if(miao==60)
miao=0;
write_sfm(0x0D,miao);
temp=(miao)/10*16+(miao)%10;
write_1302(0x8e,0x00);
write_1302(0x80,temp);
write_1302(0x8e,0x80);
write_1602com(er+0x0E);
break;
case 2:fen++;
if(fen==60)
fen=0;
write_sfm(0x0A,fen);
temp=(fen)/10*16+(fen)%10;
write_1302(0x8e,0x00);
write_1302(0x82,temp);
write_1302(0x8e,0x80);
write_1602com(er+11);
break;
case 3:shi++;
if(shi==24)
shi=0;
write_sfm(7,shi);
temp=(shi)/10*16+(shi)%10;
write_1302(0x8e,0x00);
write_1302(0x84,temp);
write_1302(0x8e,0x80);
write_1602com(er+8);
break;
case 4:week++;
if(week==8)
week=1;
write_1602com(yh+0x0C) ;
write_week(week);
temp=(week)/10*16+(week)%10;
write_1302(0x8e,0x00);
write_1302(0x8a,temp);
write_1302(0x8e,0x80);
write_1602com(yh+0x0e);
break;
case 5:ri++;
if(ri==32)
ri=1;
write_nyr(9,ri);
temp=(ri)/10*16+(ri)%10;
write_1302(0x8e,0x00);
write_1302(0x86,temp);
write_1302(0x8e,0x80);
write_1602com(yh+10);
break;
case 6:yue++;
if(yue==13)
yue=1;
write_nyr(6,yue);
temp=(yue)/10*16+(yue)%10;
write_1302(0x8e,0x00);
write_1302(0x88,temp);
write_1302(0x8e,0x80);
write_1602com(yh+7);
break;
case 7:nian++;
if(nian==100)
nian=0;
write_nyr(3,nian);
temp=(nian)/10*16+(nian)%10;
write_1302(0x8e,0x00);
write_1302(0x8c,temp);
write_1302(0x8e,0x80);
write_1602com(yh+4);
break;
}
}
}
//------------------減鍵 key3,各句功能參照'加鍵'注釋---------------
if(key3==0)
{
delay(10);
//調延時,消抖動
if(key3==0)
{
delay(20);
while(!key3);
switch(key1n)
{
case 1:miao--;
if(miao==-1)
miao=59;
write_sfm(0x0D,miao);
temp=(miao)/10*16+(miao)%10;
write_1302(0x8e,0x00);
write_1302(0x80,temp);
write_1302(0x8e,0x80);
write_1602com(er+0x0E);
break;
case 2:fen--;
if(fen==-1)
fen=59;
write_sfm(10,fen);
temp=(fen)/10*16+(fen)%10;
write_1302(0x8e,0x00);
write_1302(0x82,temp);
write_1302(0x8e,0x80);
write_1602com(er+11);
break;
case 3:shi--;
if(shi==-1)
shi=23;
write_sfm(7,shi);
temp=(shi)/10*16+(shi)%10;
write_1302(0x8e,0x00);
write_1302(0x84,temp);
write_1302(0x8e,0x80);
write_1602com(er+8);
break;
case 4:week--;
if(week==0)
week=7;
write_1602com(yh+0x0C);
write_week(week);
temp=(week)/10*16+(week)%10;
write_1302(0x8e,0x00);
write_1302(0x8a,temp);
write_1302(0x8e,0x80);
write_1602com(yh+0x0e);
break;
case 5:ri--;
if(ri==0)
ri=31;
write_nyr(9,ri);
temp=(ri)/10*16+(ri)%10;//十進制轉換成 DS1302 要求的 DCB 碼
write_1302(0x8e,0x00);//允許寫,禁止防寫
write_1302(0x86,temp);//向 DS1302 內寫日期寄存器 86H 寫入調整後的日期數據 BCD 碼
write_1302(0x8e,0x80);//打開防寫
write_1602com(yh+10);//因為設置液晶的模式是寫入數據後,指針自動加一,所以需要游標回位
break;
case 6:yue--;
if(yue==0)
yue=12;
write_nyr(6,yue);
temp=(yue)/10*16+(yue)%10; //十進制轉換成 DS1302 要求的 DCB 碼
write_1302(0x8e,0x00); //允許寫,禁止防寫
write_1302(0x88,temp); //向 DS1302 內寫月份寄存器 88H 寫入調整後的月份數據 BCD 碼
write_1302(0x8e,0x80); //打開防寫
write_1602com(yh+7); //因為設置液晶的模式是寫入數據後,指針自動加一,所以需要游標回位
break;
case 7:nian--;
if(nian==-1)
nian=99;
write_nyr(3,nian);
temp=(nian)/10*16+(nian)%10; //十進制轉換成 DS1302 要求的 DCB 碼
write_1302(0x8e,0x00); //允許寫,禁止防寫
write_1302(0x8c,temp); //向 DS1302 內寫年份寄存器 8cH 寫入調整後的年份數據 BCD 碼
write_1302(0x8e,0x80); //打開防寫
write_1602com(yh+4); //因為設置液晶的模式是寫入數據後,指針自動加一,所以需要游標回位
break;
}
}
}
}
}
void init()
//定時器、計數器設置函數
{
TMOD=0x11;
//指定定時/計數器的工作方式為 3
TH0=0;
//定時器 T0 的高四位=0
TL0=0;
//定時器 T0 的低四位=0
EA=1;
//系統允許有開放的中斷
ET0=1;
//允許 T0 中斷
TR0=1;
//開啟中斷,啟動定時器
}
//*******************主函數**************************
void main()
{
lcd_init(); //調用液晶屏初始化子函數
ds1302_init(); //調用 DS1302 時鍾的初始化子函數
init(); //調用定時計數器的設置子函數
delay(80);
while(1)
//無限循環下面的語句:
{
keyscan();
//調用鍵盤掃描子函數
}
}
void timer0() interrupt 1 //取得並顯示日歷和時間
{ //讀取秒時分周日月年七個數據(DS1302 的讀寄存器與寫寄存器不一樣)
miao = BCD_Decimal(read_1302(0x81));
fen = BCD_Decimal(read_1302(0x83));
shi = BCD_Decimal(read_1302(0x85));
ri = BCD_Decimal(read_1302(0x87));
yue = BCD_Decimal(read_1302(0x89));
nian=BCD_Decimal(read_1302(0x8d));
week=BCD_Decimal(read_1302(0x8b));
//顯示秒、時、分數據:
write_sfm(13,miao); //秒,從第二行第 8 個字後開始顯示(調用時分秒顯示子函數)
write_sfm(10,fen); //分,從第二行第 5 個字元後開始顯示
write_sfm(7,shi); //小時,從第二行第 2 個字元後開始顯示
//顯示日、月、年數據:
write_nyr(9,ri); //日期,從第二行第 9 個字元後開始顯示
write_nyr(6,yue); //月份,從第二行第 6 個字元後開始顯示
write_nyr(3,nian); //年,從第二行第 3 個字元後開始顯示
write_week(week);
}

⑸ 單片機的最小系統晶振電路的兩個電阻作用,為什麼

晶振電路需要2個10-30pF級別的電容作為起振用途,10-30pF具體的值根據不同的晶振頻率不同的單片機而有所不同,作用都是使晶振起振,如果去掉這2個電容,晶振就不會起振,就沒有頻率輸出,單片機就不會工作。這樣說你懂了嗎?

也有串並連電阻的案例,正常我們不需要那麼做,官方的Deom里也是沒有的,以下內容來自網路,講解的很詳細,你可以自習讀讀,以後對這部分電路會有更詳細的認識。

一份電路在其輸出端串接了一個22K的電阻,在其輸出端和輸入端之間接了一個10M的電阻,這是由於連接晶振的晶元端內部是一個線性運算放大器,將輸入進行反向180度輸出,晶振處的負載電容電阻組成的網路提供另外180度的相移,整個環路的相移360度,滿足振盪的相位條件,同時還要求閉環增益大於等於1,晶體才正常工作。

晶振輸入輸出連接的電阻作用是產生負反饋,保證放大器工作在高增益的線性區,一般在M歐級,輸出端的電阻與負載電容組成網路,提供180度相移,同時起到限流的作用,防止反向器輸出對晶振過驅動,損壞晶振。

和晶振串聯的電阻常用來預防晶振被過分驅動。晶振過分驅動的後果是將逐漸損耗減少晶振的接觸電鍍,這將引起頻率的上升,並導致晶振的早期失效,又可以講drive level調整用。用來調整drive level和發振餘裕度。

Xin和Xout的內部一般是一個施密特反相器,反相器是不能驅動晶體震盪的.因此,在反相器的兩端並聯一個電阻,由電阻完成將輸出的信號反向 180度反饋到輸入端形成負反饋,構成負反饋放大電路.晶體並在電阻上,電阻與晶體的等效阻抗是並聯關系,自己想一下是電阻大還是電阻小對晶體的阻抗影響小大?

電阻的作用是將電路內部的反向器加一個反饋迴路,形成放大器,當晶體並在其中會使反饋迴路的交流等效按照晶體頻率諧振,由於晶體的Q值非常高,因此電阻在很大的范圍變化都不會影響輸出頻率。過去,曾經試驗此電路的穩定性時,試過從100K~20M都可以正常啟振,但會影響脈寬比的。

晶體的Q值非常高, Q值是什麼意思呢? 晶體的串聯等效阻抗是 Ze = Re + jXe, Re<< |jXe|, 晶體一般等效於一個Q很高很高的電感,相當於電感的導線電阻很小很小。Q一般達到10^-4量級。

避免信號太強打壞晶體的。電阻一般比較大,一般是幾百K。

串進去的電阻是用來限制振盪幅度的,並進去的兩顆電容根據LZ的晶振為幾十MHZ一般是在20~30P左右,主要用與微調頻率和波形,並影響幅度,並進去的電阻就要看 IC spec了,有的是用來反饋的,有的是為過EMI的對策

可是轉化為 並聯等效阻抗後,Re越小,Rp就越大,這是有現成的公式的。晶體的等效Rp很大很大。外面並的電阻是並到這個Rp上的,於是,降低了Rp值 -----> 增大了Re -----> 降低了Q

精確的分析還可以知道,對頻率也會有很小很小的影響。

總結並聯電阻的四大作用:

1、配合IC內部電路組成負反饋、移相,使放大器工作在線性區;
2、限流防止諧振器被過驅;
3、並聯降低諧振阻抗,使諧振器易啟動;
4、電阻取值影響波形的脈寬。

有源晶振與無源晶振以及無源晶振起振電容的選擇:
無源晶振(Crystal):內只有一片按一定軸向切割的石英晶體薄片,供接入運放(或微處理器的Xtal端)以形成振盪。(依靠配合其他IC內部振盪電路工作)

有源晶振(Oscillator):內帶運放,工作在最佳狀態,送入電源後,可直接輸出一定頻率的等副正弦波。(晶振+振動電路,封裝在一起,加上電源,就有波形輸出)

1.無源晶振是有2個引腳的無極性元件,需要藉助於時鍾電路才能產生振盪信號,自身無法振盪起來 無源晶振需要用DSP片內的振盪器,在datasheet上有建議的連接方法。無源晶振沒有電壓的問題,信號電平是可變的,也就是說是根據起振電路來決定的,同樣的晶振可以適用於多種電壓,可用於多種不同時鍾信號電壓要求的DSP,而且價格通常也較低,因此對於一般的應用如果條件許可建議用晶體,這尤其適合於產品線豐富批量大的生產者。無源晶振相對於晶振而言其缺陷是信號質量較差,通常需要精確匹配外圍電路(用於信號匹配的電容、電感、電阻等),更換不同頻率的晶體時周邊配置電路需要做相應的調整。使用時建議採用精度較高的石英晶體,盡可能不要採用精度低的陶瓷晶體。

2.有源晶振有4隻引腳,是一個完整的振盪器,裡面除了石英晶體外,還有晶體管和阻容元件 。有源晶振不需要DSP的內部振盪器,信號質量好,比較穩定,而且連接方式相對簡單(主要是做好電源濾波,通常使用一個電容和電感構成的PI型濾波網路,輸出端用一個小阻值的電阻過濾信號即可),不需要復雜的配置電路。相對於無源晶體,有源晶振的缺陷是其信號電平是固定的,需要選擇好合適輸出電平,靈活性較差,價格相對較高。對於時序要求敏感的應用,還是有源的晶振好,因為可以選用比較精密的晶振,甚至是高檔的溫度補償晶振。有些DSP內部沒有起振電路,只能使用有源的晶振,如TI的6000系列等。有源晶振相比於無源晶體通常體積較大,但現在許多有源晶振是表貼的,體積和晶體相當,有的甚至比許多晶體還要小。

在電子學上,通常將含有晶體管元件的電路稱作「有源電路」(如有源音箱、有源濾波器等),而僅由阻容元件組成的電路稱作「無源電路」。電腦中的晶體振盪器也分為無源晶振和有源晶振兩種類型。無源晶振與有源晶振的英文名稱不同,無源晶振為crystal(晶體),而有源晶振則叫做oscillator(振盪器)。無源晶振是有2個引腳的無極性元件,需要藉助於時鍾電路才能產生振盪信號,自身無法振盪起來,所以「無源晶振」這個說法並不準確;有源晶振有4隻引腳,是一個完整的振盪器,其中除了石英晶體外,還有晶體管和阻容元件,因此體積較大。

有源晶振型號縱多,而且每一種型號的引腳定義都有所不同,接發也不同,下面我介紹一下有源晶振引腳識別,以方便大家

有個點標記的為1腳,按逆時針(管腳向下)分別為2、3、4。

有源晶振通常的用法:一腳懸空,二腳接地,三腳接輸出,四腳接電壓。

有源晶振不需要DSP的內部振盪器,信號質量好,比較穩定,而且連接方式相對簡單(主要是做好電源濾波,通常使用一個電容和電感構成的PI型濾波網路,輸出端用一個小阻值的電阻過濾信號即可),不需要復雜的配置電路。相對於無源晶體,有源晶振的缺陷是其信號電平是固定的,需要選擇好合適輸出電平,靈活性較差,而且價格高。

有源晶振是右石英晶體組成的,石英晶片之所以能當為振盪器使用,是基於它的壓電效應:在晶片的兩個極上加一電場,會使晶體產生機械變形;在石英晶片上加上交變電壓,晶體就會產生機械振動,同時機械變形振動又會產生交變電場,雖然這種交變電場的電壓極其微弱,但其振動頻率是十分穩定的。當外加交變電壓的頻率與晶片的固有頻率(由晶片的尺寸和形狀決定)相等時,機械振動的幅度將急劇增加,這種現象稱為「壓電諧振」。

壓電諧振狀態的建立和維持都必須藉助於振盪器電路才能實現。圖3是一個串聯型振盪器,晶體管T1和T2構成的兩級放大器,石英晶體XT與電容C2構成LC電路。在這個電路中,石英晶體相當於一個電感,C2為可變電容器,調節其容量即可使電路進入諧振狀態。該振盪器供電電壓為5V,輸出波形為方波。

有源晶振型號縱多,而且每一種型號的引腳定義都有所不同,接發也不同,下面我介紹一下有源晶振引腳識別,以方便大家

有個點標記的為1腳,按逆時針(管腳向下)分別為2、3、4。

有源晶振通常的用法:一腳懸空,二腳接地,三腳接輸出,四腳接電壓。

有源晶振不需要DSP的內部振盪器,信號質量好,比較穩定,而且連接方式相對簡單(主要是做好電源濾波,通常使用一個電容和電感構成的PI型濾波網路,輸出端用一個小阻值的電阻過濾信號即可),不需要復雜的配置電路。相對於無源晶體,有源晶振的缺陷是其信號電平是固定的,需要選擇好合適輸出電平,靈活性較差,而且價格高。

有源晶振是右石英晶體組成的,石英晶片之所以能當為振盪器使用,是基於它的壓電效應:在晶片的兩個極上加一電場,會使晶體產生機械變形;在石英晶片上加上交變電壓,晶體就會產生機械振動,同時機械變形振動又會產生交變電場,雖然這種交變電場的電壓極其微弱,但其振動頻率是十分穩定的。當外加交變電壓的頻率與晶片的固有頻率(由晶片的尺寸和形狀決定)相等時,機械振動的幅度將急劇增加,這種現象稱為「壓電諧振」。

壓電諧振狀態的建立和維持都必須藉助於振盪器電路才能實現。

石英晶體振盪器的頻率穩定度可達10^-9/日,甚至10^-11。例如10MHz的振盪器,頻率在一日之內的變化一般不大於0.1Hz。因此,完全可以將晶體振盪器視為恆定的基準頻率源(石英錶、電子表中都是利用石英晶體來做計時的基準頻率)。從PC誕生至現在,主板上一直都使用一顆14.318MHz的石英晶體振盪器作為基準頻率源。 主板上除了這顆14.318MHz的晶振,還能找到一顆頻率為32.768MHz的晶振,它被用於實時時鍾(RTC)電路中,顯示精確的時間和日期

方形有源晶振引腳分布:

1、正方的,使用DIP-8封裝,打點的是1腳。

1-NC; 4-GND; 5-Output; 8-VCC

2、長方的,使用DIP-14封裝,打點的是1腳。

1-NC; 7-GND; 8-Output; 14-VCC

BTW:

1、電源有兩種,一種是TTL,只能用5V,一種是HC的,可以3.3V/5V

2、邊沿有一個是尖角,三個圓角,尖角的是一腳,和打點一致。

Vcc out

NC(點) GND

現在提供一些實際數據:

測試樣品為TOYOCOM的711SC 1.000M的輸出頻率,1腳懸空,2腳接地,3腳輸出,4叫接+5V;

1.4V就開始起振,峰值電壓1.64V,但是工作頻率會有一定的偏差;3V時峰值電壓3.24V,工作頻率1.000M,輸出頻率准確;5V時峰值電壓為5.6V,工作頻率1.000M,輸出頻率准確

關於晶振的匹配電容問題

晶振還是晶體?
晶振的話好像不用電容吧?
晶體的話0.1u和0.01u的電容有些大了,
一般應該100p到20p之間

nod
晶振的標稱值在測試時有一個「負載電容」的條件,在工作時滿足這個條件,振盪頻率才與標稱值一致。一般來講,有低負載電容(串聯諧振晶體)
高負載電容(並聯諧振晶體)之分。在電路上的特徵為:晶振串一隻電容跨接在IC兩只腳上的,則為串聯諧振型;一隻腳接IC,一隻腳接地的,則為並聯型。如確實沒有原型號,需要代用的可採取串聯諧振型電路上的電容再並一個電容,並聯諧振電路上串一隻電容的措施。例如:4.433MHz晶振,並一隻3300PF電容或串一隻70P的微調電容。另一種說法是「損耗值」與「激勵電平」之說:

其實,上述原因都可以作為選擇晶振的條件作為考慮。

常見的晶振大多是二隻腳,3腳的晶振是一種集晶振和電容為一體的復合元件。由於在集成電路振盪端子外圍電路中總是以一個晶振(或其它諧振元件)和兩個電容組成迴路,為便於簡化電路及工藝,人們便研製生產了這種復合件。其3個引腳中,中間的1個腳通常是2 個電容連接一起的公共端,另外2個引腳即為晶振兩端,也是兩個電容各自與晶振連接的兩端。由此可見,這種復合件可用一個同頻率晶振和兩個100~200pF的瓷片電容按常規連接後直接予以代換。

*********************************************************************************

怎樣選擇一款合適的晶體振盪器21ic.com
發信站: 瀚海星雲 (2003年11月04日10:18:05 星期二), 站內信件

---- 本文介紹了一些足以表現出一個晶體振盪器性能高低的技術指標,了解這些指標的含義,將有助於通訊設計工程師順利完成設計項目,同時也可以大大減少整機

---- 總頻差:在規定的時間內,由於規定的工作和非工作參數全部組合而引起的晶體振盪器頻率與給定標稱頻率的最大頻差。

---- 說明:總頻差包括頻率溫度穩定度、頻率溫度准確度、頻率老化率、頻率電源電壓穩定度和頻率負載穩定度共同造成的最大頻差。一般只在對短期頻率穩定度關心,而對其他頻率穩定度指標不嚴格要求的場合採用。例如:精密制導雷達。

---- 頻率溫度穩定度:在標稱電源和負載下,工作在規定溫度范圍內的不帶隱含基準溫度或帶隱含基準溫度的最大允許頻偏。

---- fT=±(fmax-fmin)/(fmax+fmin)
---- fTref =±MAX[|(fmax-fref)/fref|,|(fmin-fref)/fref|] fT:頻率溫度穩定度(不帶隱含基準溫度)
---- fTref:頻率溫度穩定度(帶隱含基準溫度)
---- fmax :規定溫度范圍內測得的最高頻率
---- fmin:規定溫度范圍內測得的最低頻率
---- fref:規定基準溫度測得的頻率

---- 說明:採用fTref指標的晶體振盪器其生產難度要高於採用fT指標的晶體振盪器,故fTref指標的晶體振盪器售價較高。

---- 幾種電子系統使用的晶體振盪器典型頻率溫度穩定度指標見下表:

---- 表中有一部分頻率溫度穩定度指標應是帶隱含基準溫度的頻率溫度穩定度指標,但沒表示出來。 (1ppm=1×10-6;1ppb=1×10-9)。

---- 頻率穩定預熱時間:以晶體振盪器穩定輸出頻率為基準,從加電到輸出頻率小於規定頻率允差所需要的時間。

---- 說明:在多數應用中,晶體振盪器是長期加電的,然而在某些應用中晶體振盪器需要頻繁的開機和關機,這時頻率穩定預熱時間指標需要被考慮到(尤其是對於在苛刻環境中使用的軍用通訊電台,當要求頻率溫度穩定度≤±0.3ppm(-45℃~85℃),採用OCXO作為本振,頻率穩定預熱時間將不少於5分鍾,而採用DTCXO只需要十幾秒鍾)。

---- 頻率老化率:在恆定的環境條件下測量振盪器頻率時,振盪器頻率和時間之間的關系。這種長期頻率漂移是由晶體元件和振盪器電路元件的緩慢變化造成的,可用規定時限後的最大變化率(如±10ppb/天,加電72小時後),或規定的時限內最大的總頻率變化(如:±1ppm/(第一年)和±5ppm/(十年))來表示。

---- 說明:TCXO的頻率老化率為:±0.2ppm~±2ppm(第一年)和±1ppm~±5ppm(十年)(除特殊情況,TCXO很少採用每天頻率老化率的指標,因為即使在實驗室的條件下,溫度變化引起的頻率變化也將大大超過溫度補償晶體振盪器每天的頻率老化,因此這個指標失去了實際的意義)。OCXO的頻率老化率為:±0.5ppb~±10ppb/天(加電72小時後),±30ppb~±2ppm(第一年),±0.3ppm~±3ppm(十年)。

---- 頻率壓控范圍:將頻率控制電壓從基準電壓調到規定的終點電壓,晶體振盪器頻率的最小峰值改變數。

---- 說明:基準電壓為+2.5V,規定終點電壓為+0.5V和+4.5V,壓控晶體振盪器在+0.5V頻率控制電壓時頻率改變數為-110ppm,在+4.5V頻率控制電壓時頻率改變數為+130ppm,則VCXO電壓控制頻率壓控范圍表示為:≥±100ppm(2.5V±2V)。

---- 壓控頻率響應范圍:當調制頻率變化時,峰值頻偏與調制頻率之間的關系。通常用規定的調制頻率比規定的調制基準頻率低若干dB表示。

---- 說明:VCXO頻率壓控范圍頻率響應為0~10kHz。

---- 頻率壓控線性:與理想(直線)函數相比的輸出頻率-輸入控制電壓傳輸特性的一種量度,它以百分數表示整個范圍頻偏的可容許非線性度。

---- 說明:典型的VCXO頻率壓控線性為:≤±10%,≤±20%。簡單的VCXO頻率壓控線性計算方法為(當頻率壓控極性為正極性時):

---- 頻率壓控線性=±((fmax-fmin)/ f0)×100%
---- fmax:VCXO在最大壓控電壓時的輸出頻率
---- fmin:VCXO在最小壓控電壓時的輸出頻率
---- f0:壓控中心電壓頻率

---- 單邊帶相位雜訊£(f):偏離載波f處,一個相位調制邊帶的功率密度與載波功率之比。

*****************************************************************************************
請問單片機晶震旁的2個電容有什麼要求嗎?

這個是晶體的匹配電容,只有在外部所接電容為匹配電容的情況下,
振盪頻率才能保證在標稱頻率附近的誤差范圍內。

最好按照所提供的數據來,如果沒有,一般是30pF左右。太小了不容易
起振。

在某些情況下,也可以通過調整這兩個電容的大小來微調振盪頻率,當然
可調范圍一般在10ppm量級。

閱讀全文

與單片機ic04相關的資料

熱點內容
取消壓縮管理的公司 瀏覽:116
打真軍的電影豆瓣 瀏覽:168
特斯拉app超級充電樁如何使用 瀏覽:422
男人懷孕電影袋鼠男人 瀏覽:507
如何刪去應用加密 瀏覽:468
服從命令聽指揮陌千依小說 瀏覽:761
《赤足驚魂》電影介紹 瀏覽:359
ic卡內數據如何傳到伺服器 瀏覽:21
安卓系統如何更改托盤 瀏覽:403
許志安演的電影有哪些 瀏覽:824
odbc文件夾是什麼 瀏覽:391
男主用鐵鏈囚禁女主的小說 瀏覽:914
sift演算法harris演算法 瀏覽:241
python命令行模式 瀏覽:459
新媽媽韓國電影中的輔導老師是誰 瀏覽:389
php郵箱驗證代碼 瀏覽:404
光貓偽裝命令 瀏覽:175
安卓高端機為什麼都用曲屏 瀏覽:419
老電影大全 戰爭片 瀏覽:971
有沒有小電影得網址網站 瀏覽:378