新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)匯編中斷程序(定時(shí)器中斷)

單片機(jī)匯編中斷程序(定時(shí)器中斷)

作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/201611/315807.htm

;首相,介紹一下51單片機(jī)定時(shí)計(jì)數(shù)器,51有兩個(gè)定時(shí)計(jì)數(shù)器,分別為T0,T1,基本一樣,

;有一點(diǎn)不同,下面我們介紹定時(shí)計(jì)數(shù)器T0

;了解8051的timer0中斷的程序?qū)懛?用中斷法產(chǎn)生定時(shí)

;上面顯示的是proteus仿真圖,下面的是源程序

;說明:(源程序中的終端入口地址很重要(這個(gè)是固定的),程序中斷時(shí),會(huì)在對(duì)應(yīng)中斷固定的

;入口地址進(jìn)入,因?yàn)橐?guī)定的相隔入口間的空進(jìn)有限,只能用跳轉(zhuǎn)指令跳轉(zhuǎn),最終用RETI強(qiáng)制返回

;這個(gè)程序把所有的中斷入口地址都寫上了,沒有用到的,用RETI直接屏蔽)

;運(yùn)行結(jié)果是使led燈明一下,暗一下。

COUNT EQU9217;對(duì)于11.0592的晶振來說,延時(shí)10ms

LEDEQUP1.1

ORG0000H

LJMP RESET;開始時(shí)跳轉(zhuǎn)轉(zhuǎn)到初始化程序中

ORG0003H;外部中斷0

RETI

ORG000BH;定時(shí)器/計(jì)數(shù)器T0入口地址

LJMP INT_TIMER0;跳轉(zhuǎn)到定時(shí)器/計(jì)數(shù)器中斷服務(wù)程序中去

ORG0013H;外部中斷1

RETI

ORG001BH;定時(shí)器/計(jì)數(shù)器T1

RETI

ORG0023H ;串行口中斷

RETI

ORG0030H

RESET:

MOVR0,#00H

DJNZ R0,$;剛開始,先進(jìn)行少量的延時(shí),是各種工作寄存器準(zhǔn)備好

CLRLED

MOVTMOD,#00000001B;設(shè)置定時(shí)器T0工作在方式1(16位)

MOVTH0,#HIGH(65536-COUNT);設(shè)置初值(關(guān)于怎么計(jì)算,很多書上都有)

MOVTL0,#LOW(65536-COUNT)

;MOVTH0,#(65536-COUNT)/256;取高八位數(shù)據(jù)(這是第二種方法)

;MOVTL0,#255;取底五位(為最大了)

CLRTF0;先把溢出標(biāo)志位清零

SETB TR0;開始計(jì)時(shí)

SETB EA;全局中斷打開

SETB ET0;定時(shí)器/計(jì)數(shù)器T0溢出中斷打開

MOVR2,#00H;作為定時(shí)器累加器使用

LOOP:SJMP LOOP;在此循環(huán),等待中斷

INT_TIMER0:;當(dāng)TF0=1,跳轉(zhuǎn)到下面的中斷服務(wù)程序中

INCR2;使R2自增一

CLRTF0;重新置中斷標(biāo)志位為0

MOVTH0,#(65536-COUNT)/256; 重新符初值(因?yàn)橐绯龊笞兂?了)

MOVTL0,#255

CJNE R2,#5,RETURN;讓燈明暗相間50ms

MOVR2, #00H

CPLLED;讓燈明暗交替變化

RETURN:

RETI

END

;程序?qū)懲炅耍ú⒉皇呛茈y,不過就是配置一下定時(shí)器,在中斷中寫點(diǎn)處理程序罷了

;),



評(píng)論


技術(shù)專區(qū)

關(guān)閉