1T和12T單片機的區(qū)別
標準51單片機是12T的,就是說12個時鐘周期(晶振周期,例如12M的,周期是1/12M,單位秒),機器做一個指令周期,剛好就是1/12M*12=1uS,常見指令例如_nop_就是一個周期,剛好1uS,其他的大多多于一個周期,乘除法更多。所以如果計算指令時間可以這樣算。
而現(xiàn)在很多51核的單片機工藝質(zhì)量上去后,頻率大大提高,增強型51有6T的,如果接12M的話,一個nop就只需要0.51uS,如果是STC的部分單片機1T的話,那只需要1/12uS。
單片機的晶振不是隨便選,要看技術(shù)手冊,看最高頻率,看支持類型等等。一般12M,接串口的話11.0592M。如果是PIC,很多4M,8M。
不是越高越好,對很多不需要大量處理,只是控制的情況,為了增加可靠性,降低編程難度,降低功耗,往往可選用低頻的,例如實時時鐘的32768晶振。
故 計算nT單片機的指令周期公式為:
T = 1/晶振周期*n
例如: 使用12M晶振的1T單片機的指令周期為: T = 1 / 12 * 1 = 1 / 12 us
/***********************************************************************/
/*******************下面是單片機的幾個周期的介紹****************/
/***********************************************************************/
(1)時鐘周期 又名 振蕩周期: 定義為時鐘頻率的倒數(shù),可以理解為單片機外界晶振的倒數(shù)。在一個時鐘周期內(nèi),CPU僅完成一個最基本的動作。對于某個單片機來講,若采用了1MHZ的時鐘頻率,則時鐘周期就是1us;若采用了4MHZ的時鐘頻率,則時鐘周期就是250ns。由于時鐘脈沖是CPU的基本工作脈沖,它控制著CPU的工作節(jié)奏。對于同一種單片機,時鐘頻率越高,單片機的工作速度就越快。我們使用的STC89C系列單片機的時鐘范圍約在1——40MHZ。
(2)狀態(tài)周期:狀態(tài)周期是時鐘周期的兩倍。
(3)機器周期:單片機的基本操作周期,在一個操作周期內(nèi),單片機完成一項基本操作,如取指令、存儲器讀寫等。它由12個時鐘周期(6個狀態(tài)周期)組成。
(4)指令周期:它是指CPU執(zhí)行一條指令所需要的時間。一般一個指令周期含有1——4個機器周期。
/*****************************************************************/
/************1T和12T單片機的編程所需要注意的************/
/****************************************************************/
定時器部分不用改。1T單片機的計時器是兼容傳統(tǒng)12T單片機的。也就是說只是執(zhí)行一般的指令會快12倍,但是它的定時器卻是先進行12分頻,再計時的,與原來的一樣。只是用軟件延時的話,就要改。
/****************************************************************/
/**************1T和12T單片機軟件延時程序?qū)嵗龑Ρ?******/
/*****************************************************************/
1.對于使用12M晶振的12T單片機,如:STC90C52RC
延時n個10us的程序:
[objc] view plain copy print?
void DelayXus(unsigned char n)
{
while( n-- )
{
_nop_();
_nop_();
}
}
2.而對于使用12M晶振的1T單片機,如:STC12C5206AD
延時n個1us的程序
[objc] view plain copy print?
void DelayXus(unsigned char n)
{
while( n-- )
{
_nop_();
_nop_();
}
}
對比可見,相同的程序在不同時鐘周期的單片機下延時是不同的,所以當我們在不同時鐘周期的單片機中移植程序的時候要注意軟件延時需要修改成適當?shù)某绦,否則會造成不必要的錯誤。
編輯:admin 最后修改時間:2018-05-18