㈠ 請問,51單片機的中斷函數定時器的具體用法
你可以使用這個制
time1
()
interrupt
3
using
3
{
TH1=a;//把a的數據讀到TH1,定時器1高八位置位
TL1=b;//把b的數據讀到TL1,定時器1低八位置位
BUZZER=!BUZZER;
//蜂嗚器取反輸出
}
㈡ 這是一個用51單片機pwm控制電機的定時器函數,不懂TH1和TL1有什麼用
TH1=0xfc;
TL1=0x18;
這兩個都是16進制,你化為10進制,
TH1=252;
TL1=24;
總:252*2^8+24=64536
所以64536是初值,65536-64536=1000;
所以該定時器是每過1000us進一次中斷
㈢ 在使用51單片機定時計數函數時,為什麼在主函數的結尾添加"while(1)"這種si循環函數
你可以先著重看下中斷的概念。
在運行一個程序的過程中,斷續地以「插入」方式執行一些完成特定處理功能的程序段,這種處理方式稱為中斷。
㈣ 51單片機定時器中斷函數,定時器,還有while()這三個之間是怎麼跳轉,工作流程是什麼呢
①TR0=1;//啟動定時器0 這就是 定時器開始 工作了。
②程序配置了 定時器的 中斷時間為 50ms(12MHz晶振),也就是每隔 50ms 就進入一次中斷函數。進入中斷後,程序又重新給定時器 定時 50ms,同時 對 中斷次數 進行 記錄(tt++)。主程序只要查詢 記錄值(tt),就能知道 定時器 中斷了多少次了。
③主函數的 while(1)表示 系統是個 循環系統,一直在 循環,不結束。當 定時器 產生中斷時,就會 暫停 主函數,這就稱為 中斷。等 中斷執行結束後,又 會的 主函數 被打斷的 地方,繼續執行主函數的 內容。
㈤ 51單片機用軟體定時來控制舵機,延時函數怎麼寫求解
延時可以用定時器來實現,也可以自己寫延時函數。
這是51單片機定時器初始化示常式序。
TMOD = 0x10f; //GATE=0 01010001
//C/T=0--定時/計數器1工作於定時方式
//M1=1;M0=0--選擇工作模式1,構成最大定時器
//T0:在此程序不使用
TL1 = 0x13; TH1 = 0x2C; //指定定時時間為50ms 65536-50/(11.0592/12)=11283=2C13h
EA = 1; //開總中斷
TF1 = 0;
ET1 = 1; //開定時器中斷
TR1 = 1; //開始計時
如果用延時函數,要精確計算時間。
這是精確定時1ms的程序,你可以參考一下。
void delay1ms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
㈥ 51單片機中,定時器怎麼做延時函數用,比如說,要精確延時1s,該怎麼寫
unsigned long TimeTickCount;//1ms計時器
void Timer0Configuration();
void Delay1ms(unsigned int a);
void main()
{
while(1)
{
Delay1ms(1000);//1s延時;
}
}
void Delay1ms(unsigned int a)//0~65535
{
unsigned long b;//0~0xffffffff
b = TimeTickCount;//記下及時器初始值
while((TimeTickCount-b<a)||(0xffffffff+TimeTickCount-b<a));
//當計數器未溢出只須用 計數器實時變化的值-其初始值
//當計數器溢出則須用 計時器上限值+計數器實時變化的值-其初始值
}
void Timer1Configuration()
{
TMOD=0X10;//選擇為定時器模式,工作方式1。
TH1=0Xfc; //給定時器賦初值,定時1000us
TL1=0X18;
ET1=1;//打開定時器1中斷允許
EA=1;//打開總中斷
TR1=1;//打開定時器
}
void interrupt_timer1() interrupt 3 //1000us
{
TH1 = 0xfc; //重裝
TL1 = 0x18;
TimeTickCount++;//1000us計時器
}
㈦ c編程時,51單片機怎麼用定時器寫一個延時1ms的子函數
好辦
用C51,方式一
void delay(unsigned int T) //T的單位取微秒
{
signed int cnt; //這里用符號數的相反數 就是2^16-n的原碼,也可以定義無符號數自己換成2^16-n
cnt=-(fosec*1.0/12)*T; // fosec的單位MHz
TMOD=0x01;
TH0=(unsigned char)(cnt>>8);
TL0=(unsigned char)cnt;
TR0=1;
while(!TF0);
TR0=0;
TF0=0;//加這句是為了可以循環使用
}
㈧ 51單片機定時計數器
TMOD = 0X01; //設置t0為16位(01)計時模式,以TR0來啟動計時器
//計算初值
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
EA = 1; //開總中斷
ET0 = 1;//開定時器0中斷
TR0 = 1; //啟動T0
while (1);
定時器中斷服務函數;
void timer0_service(void) interrupt 1 (T1 時這里應為3)
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256; //打算繼續定時下去時,進入中斷服務函數後,重新設定一下初值。
times++; //這可以產生更大的定時
if (times == 20) {
times = 0;
led = !led;
}
}
㈨ 51 單片機怎麼精確定時
選擇定時器模式2 ,8位自動重裝定時器
用軟體重裝初值會產生延遲 模式二是硬體重裝
㈩ 51單片機中執行完定時器中斷函數,TF0是硬體自動清0嗎
TF0是51單片機定時器T0的溢出中斷標志位。當T0被允許計數後,T0從初值開始按機器周期或者外部引腳輸入的脈沖進行加1計數。當計數到T0最高位產生溢出時,置「1」TF0,並向CPU請求中斷。當CPU響應該中斷時,將由硬體自動清「0」TF0。當然,你也可以用「位操作指令」對TF0進行置「1」或清「0」操作。