發表日期 3/8/2022, 4:08:27 PM
用定時器T1中斷控製兩個LED以不同周期閃爍
#include// 包含51單片機寄存器定義的頭文件
sbit D1=P0^0; //將D1位定義為P0.0引腳
sbit D2=P0^1; //將D2位定義為P0.1引腳
注意:對照原理圖,原理圖不清楚的放大看。
unsigned char Countor1; //設置全局變量,儲存定時器T1中斷次數
unsigned char Countor2; //設置全局變量,儲存定時器T1中斷次數
/**************************************************************
函數功能:主函數
**************************************************************/
void main(void)
{
EA=1; //開總中斷
ET1=1; //定時器T1中斷允許
TMOD=0x10; //使用定時器T1的模式1
TH1=(65536-46083)/256; //定時器T1的高8位賦初值
TL1=(65536-46083)%256; //定時器T1的高8位賦初值
TR1=1; //啓動定時器T1
Countor1=0; //從0開始纍計中斷次數
Countor2=0; //從0開始纍計中斷次數
while(1)//無限循環等待中斷
;
}
/**************************************************************
函數功能:定時器T1的中斷服務程序
**************************************************************/
void Time1(void) interrupt 3 using 0 //“interrupt”聲明函數為中斷服務函數
//其後的3為定時器T1的中斷編號;0錶示使用第0組工作寄存器
{
Countor1++; //Countor1自加1
Countor2++; //Countor2自加1
if(Countor1==2) //若纍計滿2次,即計時滿100ms
{
D1=~D1; //按位取反操作,將P2.0引腳輸齣電平取反
Countor1=0; //將Countor1清0,重新從0開始計數
}
if(Countor2==8) //若纍計滿8次,即計時滿400ms
{
D2=~D2; //按位取反操作,將P2.1引腳輸齣電平取反
Countor2=0; //將Countor1清0,重新從0開始計數
}
TH1=(65536-46083)/256; //定時器T1的高8位重新賦初值
TL1=(65536-46083)%256; //定時器T1的高8位重新賦初值
}
用計數器T1的中斷控製蜂鳴器發齣1KHz音頻
#include// 包含51單片機寄存器定義的頭文件
sbit sound=P1^7; //將sound位定義為P1.7引腳 注意:對照原理圖,原理圖不清楚的放大看。
/**************************************************************
函數功能:主函數
**************************************************************/
void main(void)
{
EA=1; //開總中斷
ET1=1; //定時器T1中斷允許
TMOD=0x10; //TMOD=0001 000B,使用定時器T1的模式1
TH1=(65536-921)/256; //定時器T1的高8位賦初值
TL1=(65536-921)%256; //定時器T1的高8位賦初值
TR1=1; //啓動定時器T1
while(1)//無限循環等待中斷
;
}
/**************************************************************
函數功能:定時器T1的中斷服務程序
**************************************************************/
void Time1(void) interrupt 3 using 0 //“interrupt”聲明函數為中斷服務函數
{
sound=~sound;
TH1=(65536-921)/256; //定時器T1的高8位重新賦初值
TL1=(65536-921)%256; //定時器T1的高8位重新賦初值
}
編輯:渡江雲