『壹』 51單片機內置定時器製作計時的誤差怎麼產生的。
首先,單片機定時器的記數的頻率是由單片機的時鍾頻率所決定的,而單片機的時鍾頻率是由外部晶振或內部震盪電路所決定的。不管是外部晶振還是內部晶振,本身都是有誤差的!然後又受外部的溫度、濕度、電磁干擾的影響,他們的頻率也是在變化的。這是無法避免的。然後,人在操作時也是有誤差的,例如51單片機工作在模式1的16位的定時器。當發生定時中斷後,要重裝定時器的初值,而執行這兩條指令也是要花時間的。這個誤差很小,可以忽略。最後就是當你 的中斷函數過長,其執行時間已經超過了定時周期,這時候將會丟失中斷。因為在發生下一次中斷的時候,而CPU還在執行本次的中斷服務程序。由於同優先順序的中斷不能被打斷,所以就會丟失中斷信號,這是產生了錯誤,而非誤差,所以中斷函數盡量短!
『貳』 用51單片機匯編語言檢測上升沿和下降沿
這里只講原理,不關注速度。實際設計工作中,已經有很多單片機能夠識別io埠上升沿和下降沿中斷,且方式不止一種。
sbit
io_inp=p2^1;輸入端
bit
old_bit;輸入端電平記憶
unsigned
char
low_high;上升下降沿標志,0=無變化,1=上升沿,2、下降沿
void
io_rest(void)
{
if(old_bit=!io_inp)
{
old_bit=io_inp;
if(io_inp=1)
low_high=1;
else
low_high=2;
}
}
void
main(void)
{
old_bit=io_inp=p2^1;
while(1)
{
low_high=0;
io_rest(void);
//在此應用
}
}
(2)單片機下降沿計數誤差分析擴展閱讀:
直接使用肢猛匯編指令編寫單片機程序,對硬體的控制更加直接,可以直接操作物理地址,寄存器,埠等;歷坦橋其它更高級的語言(如:C語言)對硬體的控制是依賴於類庫來實現的。並且,對於一些對程序大小和運行速度有非常嚴苛要求的項目而言,都必須使用匯編指令。
C語言只是為了方便編寫,與機器打交道的信山其實都是2進製得代碼,匯編語言就是這些代碼好記憶的名稱和規則,只是比C語言難理解些。
『叄』 單片機怎麼檢測上升沿與下降沿
您是問硬體的方式?還是軟體的方式?
如果是硬體的方式,那麼,各種兄歲單片機很不相同,需要具體看它的資料。
一般來說,某些引腳,例如:外中斷引腳、定時器的計數觸發引腳、捕獲引腳等等,都可以用來檢測上升沿與下降沿。
以捕獲(有的單片機資料如80196,將它稱作「高速輸入」)引腳為例:
捕獲引腳可以與某個定時器相關聯,在捕獲引腳上遇到上升沿或下降沿時,硬體就自動記錄下當時定時器的讀數,並產生中斷請求。您可以在中斷服務程序中做所需的相應操作。
至於是上升沿捕獲,還是下降沿捕獲,還是二者都能捕獲,可以由用戶自己選擇配置。
如果是用軟體的方式來檢測,那道理就簡清敗單了。用查詢方式:只要將要檢測的信號接到某個輸入埠的某個位,在程序中反復讀取該位的輸入,一旦遇到「上次是0此次羨正睜是1」的情況,就說明檢測到了上升沿,遇到「上次是1此次是0」的情況,就說明檢測到了下降沿。
『肆』 單片機外部中斷0接收外部脈沖的問題。。
單片機外部中斷0, 有兩種情況
1 是 設置錯配和誤 如果設置 成低電平 中斷 那麼 只要 低電平 進入中斷服務程序,中斷結束
還是 低電平 繼續 進入中斷服務程序,產生重復計數,檢查中斷設野賣盯置。
2 脈沖信號波形不好,產生多個下降沿, 可以加濾波電容 (頌和103 & 104 )
『伍』 基於51單片機的頻率測量及測量誤差
可以用對單位時間內 脈沖個計數的方法來實現,用2個 定時/計數器 ,一個作為定時器,定時50 ms,累積10次或20次,即0.5S或1S
另外一個作為計數器,對外部脈沖計數
誤差與晶振頻率准確度有關,測量與時間有關的量,你本身的時間當然要准確。如果所測信號頻率高,可以測0.2s或0.5S內的脈沖數,可以防止溢出,如果頻率低,可以測1S或2S內的脈沖數,以減小誤差,但響應速度慢一些。
程序比較簡單,以下供參考
void init()//初始化設置
{
TMOD=0x15;//定時器0作為計數器,定時器1作為定時器用
TH0=0;//計數器清0
TL0=0;
EA=1;//開總中斷
ET1=1;//允許定時器1中斷
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR0=1;//啟動計數器
TR1=1;//啟動定時器
aa=0;
}
void main()//主程序
{
init();//初始化
while(1)//循環程序
{
dd=bb*256+cc;//0.5S的計數值
ee=2*dd;//換算為1秒鍾的計數值
if(aa==1)
{
if(TH0>12)//預判斷,50ms內TH0>12,1s內計數值將超過可計數的最大值65535
fm=1;//報警
}
display4(ee);//顯示
fm=0;//報警停止
}
}
void timer1()interrupt 3//注意:定時器1的中斷序號為3
{
aa++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
if(aa==10)//中斷10次,共0.5S
{
TR0=0;//暫停計數
aa=0;
bb=TH0;//讀出計數器數據
cc=TL0;
TL0=0;//計數器清0
TH0=0;
TR0=1;//重新啟動計數器
}
}
『陸』 單片機,什麼是下降沿
單片機中的下降沿,並非是一般意義的下降沿。
單片機工作時,它會自動的,每隔一個機器周期,檢測一次引腳上的電壓。
當,前一次檢測,是高電平,後一次,卻檢測到了低電平,
單片機,就認為是收到了一個《下降沿》。
在單片機中,所說的《下降沿滑滑散》,必須有一個高電平、有一個低電平。
高電平、信氏低電平的持續時間,都必須超過一個機器周期。
否則,單片機就檢測不到。
高、低之間的《斜坡》,不要超過一個機器周期,讓液否則,單片機就難以檢測。
『柒』 誰能詳細說一下單片機中誤差怎麼產生的,要非常詳細的
不知道你說的是什麼誤差?如果是時間或執行時間上的誤差,一般應該是晶振造成的,晶振頻率會有誤差,這就造成了延時和指令執行時間的誤差。