新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 負跳變沿觸發(fā)中斷(匯編程序)

負跳變沿觸發(fā)中斷(匯編程序)

作者: 時間:2016-11-18 來源:網(wǎng)絡 收藏
;了解8051的timer0中斷的程序寫法,用中斷法產(chǎn)生定時,是燈明一下,暗一下,如果出現(xiàn)外部中斷的時候,在進入外部中斷服務程序

COUNTEQU9217 ;對于11.0592的晶振來說,延時10ms
LED1EQUP1.1
LED2 EQUP1.3 ;作為外部中斷0的顯示來用
;
ORG 0000H
LJMP RESET ;跳轉到初始化程序中
ORG 0003H ; INT0(外部中斷0)
LJMP INT_ET0;跳轉到外部中斷0服務程序中去(此程序中斷就是從這進入的)
ORG000BH;TIMER0(定時器/計數(shù)器T0)
LJMPINT_TIMER0;跳轉到定時器/計數(shù)器中斷服務程序中去
//ORG0013H;外部中斷1
//RETI;中斷的返回指令
//ORG001BH;TIMER1(定時器/計數(shù)器T1)
//RETI
//ORG0023H;串行口中斷
//RETI
;
ORG0030H
RESET: MOVR0,#00H
DJNZR0,$;剛開始,先進行少量的延時,是各種工作寄存器準備好

SETBLED1
SETBLED2

;設置定時器中斷
MOVTMOD,#00000001B
MOVTH0,#HIGH(65536-COUNT)
MOV TL0,#LOW(65536-COUNT)
//MOVTH0,#(65536-COUNT)/256;取高八位數(shù)據(jù)
//MOVTL0,#255;取底五位(為最大了)
CLRTF0;先把溢出標志位清零
SETBTR0;開始計時
SETBET0;ET0為定時器/計數(shù)器T0溢出中斷允許位
;設置外部中斷0
SETBIT0;設置外部中斷0為跳變言觸發(fā)方式
CLRIE0
SETBEX0
SETBEA
MOVIP,#00000001B;設置PX0為高優(yōu)先級中斷(外部中斷0)
MOVR1,#00H;作為定時器累加器使用

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

LOOP:SJMPLOOP ;在此等待
;
;IE0=1

INT_ET0://CLRLED2
CPLTR0
//CPLLED1
ACALLDELAY
CLRIE0
CPLLED2
RETI

;TF0=1
INT_TIMER0:
INCR2;使R1自增一
CLRTF0;CLEAR TF0 AGAIN
MOVTH0,#(65536-COUNT)/256;取高八位數(shù)據(jù)
MOVTL0,#255;取底五位(為最大了)

CJNER2,#10,L0;不相等則轉移指令,這個數(shù)可以進行調節(jié)
CPLLED1 ;取反指令
MOVR2,#00H
L0: RETI

;延時子程序,12M晶振延時約R4
DELAY: ;大約值:2us*256*256*2=260ms,也可以認為為250ms
PUSH PSW ;現(xiàn)場保護指令(有時可以不加)
MOV R4,#4
L3:MOV R2 ,#00H
L1: MOV R3 ,#00H
L2: DJNZ R3 ,L2 ;最內層循環(huán):(256次)2個周期指令(R3減一,如果比1大,則轉向L2)
DJNZ R2 ,L1 ; 中層循環(huán):256次
DJNZ R4 ,L3 ;外層循環(huán):2次

POP PSW
RET

END



評論


技術專區(qū)

關閉