① c語言程序本身執行需要時間,那定時器怎樣進行精準定時
定時器是自動計數的,其過程不需要程序干預,到時會自動觸發中斷,如果定時器中斷是唯一的最高級,在中斷中重載定時器常數時,對壓棧和重載常數指令所需時間進行補償,定時精度是能保證的。
② 關於單片機定時器C語言編程,這段程序看不懂
因為每個CLK後TL0是向上加1的,並且在FFFF變成0000的時候才中斷,所以正式的寫法應該是(0x10000-SYSCLK)/1000,而對於一個兩位元組寬的數,0x10000-SYSCLK就等於~SYSCLK,但~SYSCLK更省代碼和時間
③ 單片機定時器控制電子門鈴c語言程序
圖中那示波器的接法有什麼用?應該是監測P2.0口和P2.3口吧。
編程如下:
#include <reg52.h> //52系列頭文件
#define uchar unsigned char //變數類型宏定義
#define uint unsigned int
sbit Key = P2^0; //按鍵位聲明
sbit Bell = P2^3; //門鈴位聲明
uint p; //中斷次數變數
void main() //主程序
{
TMOD = 0x00; //設置T0工作於方式0
TH0 = (8192-700)/32; //T0計數器裝入定時700us初值
TL0 = (8192-700)%32;
IE = 0x82; //開總中斷,開T0中斷
if(Key==0) //如果鍵被按下
{
TR0 = 1; //啟動T0定時器計時
}
while(Key==0); //等待按鍵松開
}
void Timer0() interrupt 1 //T0中斷服務子程序
{
Bell = ~Bell; //每次中斷發生時,門鈴狀態取反
p++; //中斷計次值加1
if(p<=400) //如果中斷<=400次,
{
TH0 = (8192-700)/32; //重裝700us定時初值
TL0 = (8192-700)%32;
}
if(p>400) //如果中斷次數>400
{
TH0 = (8192-1000)/32; //則重裝定時 1ms 初值
TL0 = (8192-1000)%32;
if(p==1000) //如果中斷次數 =800次
{
P = 0; //中斷計數值歸0
TR0 = 0; //關閉T0定時器
}
}
}
操作說明:每當按下並保持,響鈴一聲。松開後再按,即重復上述狀態。
④ 單片機C語言定時器程序知識
如果這個程序沒有錯誤的話,那麼定時器肯定使用的是工作方式2,也就是自動重裝初值的方式。
你在MAIN程序中找找,TMOD的值應該是X2H,而且TH0和TL0的值應該一樣。
⑤ 如何建立C語言程序內部精確計時器
共勉,我也在學習階段。
#include<time.h>
#include<stdio.h>
intmain(void){
//nanotime
structtimespects1,ts2,ts3,ts4,ts5;
interr;
err=clock_gettime(CLOCK_REALTIME,&ts1);
if(err<0){
return1;
}
printf("ts1nano:%di ",ts1.tv_nsec);
err=clock_gettime(CLOCK_REALTIME,&ts2);
if(err<0){
return1;
}
printf("ts2nano:%d ",ts2.tv_nsec);
printf("nano:ts2-ts1=%d ",ts2.tv_nsec-ts1.tv_nsec);err=clock_gettime(CLOCK_MONOTONIC,&ts3);
if(err<0){
return1;
}
printf("systemstartedtimenano:%d ",ts3.tv_nsec);
err=clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&ts4);
if(err<0){
return1;
}
printf("processcputimenano:%d ",ts4.tv_nsec);
err=clock_gettime(CLOCK_THREAD_CPUTIME_ID,&ts5);
if(err<0){
return1;
}
printf("threadcuptimenano:%d ",ts5.tv_nsec);
return0;
}
⑥ C語言控制台程序,如何實現定時器
說兩個思路:
1、硬體如果有定時器,那麼使用硬體定時器。
2、軟體搞個for循環(空函數),然後測試每個循環的耗時,就能搞出一個純軟的延時程序。
⑦ 求單片機定時器簡單程序(C語言)詳解。不勝感激~
用定時器0中斷做流水燈,程序如下:#include<reg52.h>#include<intrins.h> //包含_crol_()循環左移函數
unsigned char temp,count;void init() //初始化函數{ TMOD=0x01;//設置定時器0為工作方式1 TH0=(65536-50000)/256;//裝初值,高8位 TL0=(65536-50000)%256;//裝初值,低8位 EA=1;//開總中斷 ET0=1;//開定時器0中斷 TR0=1;//啟動定時器0 temp=0xfe; count=0;//記數值清0}void main(){ init(); while(1){ P1=temp;}}void timer0() interrupt 1 using 1 //定時器0中斷函數{ TH0=(65536-50000)/256;//重裝初值,同上 TL0=(65536-50000)%256; count++;//計數值加1 if(count==10)//500ms{ count=0;//計數值清0 temp=_crol_(temp,1);循環左移一位}
⑧ 非單片機c語言定時器程序
c語言標准庫文件提供了一個叫<time.h>的頭文件。time.h提供了一個延時函數delay(int n),也有一個time()函數可以獲取當前系統時間,這些都可以作為延時之用。具體用法請查閱相關文檔,因為我也沒有用過,呵呵,希望能夠幫到你。
⑨ 求一個定時5秒的c語言程序
sleep()函數不太准啊!最好要用定時器。