『壹』 單片機指令周期的計算
計算方法:PIC單片機的每四個時鍾周期為一個內部指令周期,例如:8MHz的晶振,則內部指令周期為1/(8/4)= 0.5 uS
實例一:35us, 8MHz的晶振, 8位定時器, 分頻比1/2 , 初值 E4
實例二:156.25us , 32768Hz的晶振, 8位定時器, 分頻比1/32 , 初值 FC
計算方法一: 35 = =(256-初值)*分頻*4/晶振 + 14/分頻 =(256-初值)+14/2
計算方法二:0.015625 =(256-初值)*分頻*4/晶振 = (256-初值)*32*4/32768
特別注意:分頻比1-8 需要加上一個14/分頻
指令周期是指令周期執行某一條指令所消耗的時間,它等於機器周期的整數倍。傳統的80C51單片機的指令周期大多數是單周期指令,也就是指令周期=機器周期,少部分是雙周期指令。
(1)pic單片機定時器初值計算擴展閱讀
在MCS-51系統中,有單周期指令,雙周期指令。四周期指令只有乘,除兩條指令。指令的運算速度和它的機器周期直接相關,機器周期數較小則執行速度快。
在編程時要注意選用具有同樣功能而機器周期數小的指令。每一條指令的執行都可以包括取指和執行兩個階段。在取指階段,CPU從內部或者外部ROM中取出指令操作碼及操作數,然後再執行這條指令。
在8051指令系統中,根據各種操作的繁簡程度,其指令可由單位元組,雙位元組和三位元組組成。從機器執行指令的速度看,單位元組和雙位元組指令都可能是單周期或雙周期,
而三位元組指令都是雙周期,只有乘,除指令佔四個周期,一條指令的位元組數表徵這條指令在存儲器中所佔空間大小,而周期數表徵運行這條指令所花時間長短,即運行速度。
『貳』 在PIC單片機中,如何用一個普通的I/O埠輸出一個38K的頻率求解答,在線等,謝謝!
12MHZ晶振
#include<reg52.h>
#define uchar unsigned char
sbit PULS=P1^0;
void main()
{
TMOD=0x01; //設置定時器0位工作模式1(M1,M0位0,1)
TH0=(65536-600)/256;
TL0=(65536-600)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
while(1) ;
}
void T0_time()inte rrupt 1
{
TH0=(65536-600)/256; //重新裝載初值
TL0=(65536-600)%256;
PULS=!PULS;
}
『叄』 pic單片機 實現10ms定時的簡單程序
這個可以用幾種辦法:
1、直接用軟體延時,如用以下的DELAY()延時子程序,如要延時5ms,直接調用DELAY(5)就好了,但這種是純軟體的延時。
//======延時(n)ms,在4MHz晶振下!!!
void DELAY(uint n)
{ uint j;
uchar k;
for (j=0;j<n;j++)
for (k=246;k>0;k--) NOP();
}
2、用定時器延時,要通過計算延時的時間來確定延時的常數(分頻比和定時器初值)。
『肆』 單片機中的12分頻是什麼意思
單片機中的12分頻是單片機的標准運算速度是晶振的12分之1。
計算方法:PIC單片機的每四個時鍾周期為一個內部指令周期,例如:8MHz的晶振,則內部指令周期為1/(8/4)= 0.5 uS
計數周期
1、時鍾周期=振盪周期,名稱不同而已,是指為單片機提供時鍾信號的振盪源的周期,都是等於單片機晶振頻率的倒數,如常見的外接12M晶振,那它的時鍾周期=1/12M。
2、機器周期,8051系列單片機的機器周期=12*時鍾周期。之所以這樣分是因為單個時鍾周期根本幹不了一件完整的事情(如取指令、寫寄存器、讀寄存器等),而12個時鍾周期就能基本完成一項基本操作了。
3、指令周期,一個機器周期能完成一項基本操作,但一條指令常常是需要多項基本操作結合才能完成,完成一條指令所需的時間就是指令周期,當然不同的指令,其指令周期就不一樣的了。MCS-51系統中,有單周期指令、雙周期指令和四周期指令。
(4)pic單片機定時器初值計算擴展閱讀:
定時器/計數器每接受一個計數脈沖,加法計數器的值就加1;計滿時則發生溢出,計數器又從0開始計數並置溢出標志位(TF0=1或TF1=1)。
1、定時模式 在此模式下,計數器的輸入脈沖是由晶振12分頻獲得的。例如,晶振頻率為12MHz的值加1.這樣就可以根據計數值計算定時時間,也可以根據定時時間計算計數器的初值。
2、計數模式 在此模式下,計數器的輸入脈沖是由外部引腳(T0或T1)輸入的。外部引腳出現下降沿時,對應計數器的值加1.如果設置計數器的初值,那麼讀取當時計數器就可以計算脈沖個數。
『伍』 PIC單片機 4M晶振 產生1秒延遲的原理
可以用任何定時器陸檔,如TMR0,設置它基本延時時間為50ms,延時20次就是1s了!
因為你用的是4M晶振,指令周期為1us,TMR0的延時50ms延時常數計算如下:
先計算TMR0的分頻系數K:
50000=256*1*K,K=195.3,取K=256(只能取略大的計算值,不能四捨五入!),這是的1是指令周期,下周
再計算TMR0的延時常數X:
5000=(256-X)*1*K,K用256代入,得X=61.
程序設計時用一個累計TMR0中斷次數的變數T0_N,每早蘆亂中斷一次嘩激T0_N+1,並判斷其值>=20時就是1秒了。
注意,TMR0中斷時要清TMR0IF,並要重新對TMR0賦初值61。