這是單片機C語言中斷函數(shù)的編程格式,()后面的只是告訴編譯系統(tǒng)該函數(shù)是一個中斷函數(shù),具體的執(zhí)行還是按照C語言函數(shù)的執(zhí)行方式去執(zhí)行。
公司主營業(yè)務:網(wǎng)站建設、網(wǎng)站設計、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出尼元陽免費做網(wǎng)站回饋大家。
using1 表示用寄存器工作組1.。其實不加也可以,在c語言中,是自動分配寄存器的,所以可以不加。。
interrupt 1 后面數(shù)字是中斷源 ,表示啟用中斷源1(定時器0).(51單片機里有5個中斷源)
給你上個較完整的程序,可以直接在KEIL中運行并觀察輸出
/******************************************************************************
功能:
本程序在12M晶振模式下,通過定時器中斷精確實現(xiàn)數(shù)字時鐘計時操作,并在KEIL
中實現(xiàn)輸出。時、分、秒的變化在定時中斷里處理。
說明:
因采用工作方式2,自動裝入初值,所以此程序計時很精確,只是在KEIL中模擬輸
出顯示的變化速度很快,這點可不理會
******************************************************************************/
#include
#include
#define
TEST
//此行用于KEIL輸出顯示,如果不需要顯示可將其刪除
typedef
unsigned
char
uchar;
typedef
unsigned
int
uint;
#define
TH0TL0_INIT
(256-250)
//定時器8位自動裝入模式下寄存器初值,0.25ms中斷一次
char
cHour;
//時
char
cMin;
//分
char
cSec;
//秒
uint
iCount;
//秒計數(shù),計數(shù)達到4000時1s,4000*0.25ms
=1000ms
=
1s
bit
bSecChanged;
//秒發(fā)生變化標志,每秒送一次輸出顯示,送顯完成后清0,提高主程序效率
//==============================================================================
//T0定時器中斷服務程序,12M晶振下每0.25ms產(chǎn)生中斷,本程序執(zhí)行一次
//==============================================================================
void
Timer0()
interrupt
1
{
iCount++;
//秒計數(shù)值+1
if(iCount==4000)
{//時間計數(shù)達到1S
iCount
=
0;
//重新開始下一秒計數(shù)
cSec++;
//時鐘:秒+1
bSecChanged
=
1;
//置秒發(fā)生變化標志
if(cSec==60)
{//計夠60s
cSec
=
0;
//重新開始下一分計數(shù)
cMin++;
//時鐘:分+1
}
if(cMin==60)
{//計夠60分鐘
cMin
=
0;
//重新開始下一小時計數(shù)
cHour++;
//時鐘:小時+1
}
if(cHour==24)
{//計夠24小時
cHour
=
0;
//重新開始第二天計數(shù)
}
}
}
//==============================================================================
//主程序
//==============================================================================
void
main()
{
uchar
outstr[10];
//輸出字符串,我的編譯器可能有問題,直接輸出有錯
TMOD
=
0X02;//工作方式2,8位自動重裝計時模式
TH0
=
TH0TL0_INIT;
//0.25ms中斷一次
TL0
=
TH0TL0_INIT;
//0.25ms中斷一次
#ifdef
TEST
SCON
=
0x50;
/*
SCON:
mode
1,
8-bit
UART,
enable
rcvr
*/
TMOD
|=
0x20;
/*
TMOD:
timer
1,
mode
2,
8-bit
reload
*/
TH1
=
221;
/*
TH1:
reload
value
for
1200
baud
@
16MHz
*/
TR1
=
1;
/*
TR1:
timer
1
run
*/
TI
=
1;
/*
TI:
set
TI
to
send
first
char
of
UART
*/
#endif
cHour
=
0;
//時
cMin
=
0;
//分
cSec
=
0;
//秒
iCount
=
0;
//秒計數(shù)
bSecChanged
=
0;
outstr[2]
=
':';
//時分分隔符
outstr[5]
=
':';
//分秒分隔符
outstr[8]
=
0;
//字符串結(jié)束符
EA=1;
//開總中斷
ET0=1;
//允許T0中斷
TR0=1;
//啟動T0
while(1)
{
if(bSecChanged==1)
{//秒發(fā)生變化,將時間值轉(zhuǎn)換為可顯示字符串準備送顯示
bSecChanged
=
0;//清除標志,節(jié)省CPU資源
outstr[0]
=
cHour/10
+
0x30;
//將秒轉(zhuǎn)換為ASCII碼
outstr[1]
=
cHour%10
+
0x30;
outstr[3]
=
cMin/10
+
0x30;
//將分轉(zhuǎn)換為ASCII碼
outstr[4]
=
cMin%10
+
0x30;
outstr[6]
=
cSec/10
+
0x30;
//將小時轉(zhuǎn)換為ASCII碼
outstr[7]
=
cSec%10
+
0x30;
#ifdef
TEST
printf("
%s\r",outstr);
//在KEIL中顯示時鐘
#endif
}
}
}
名稱欄目:c語言單片機中斷函數(shù) 單片機c語言中斷函數(shù)的編寫注意事項
分享鏈接:http://jinyejixie.com/article12/ddispdc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、全網(wǎng)營銷推廣、電子商務、網(wǎng)站建設、網(wǎng)站內(nèi)鏈、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)