作者soccermiyo (miyo)
看板ASM
标题[问题] timer的问题~
时间Wed Jan 5 04:40:58 2011
最近拿到了一个timer的code~
如下:
.org 0x0000
ljmp _MAIN
.org 0x0100
_MAIN:
mov A, #10
acall _DELAY
mov DPTR, #0xA003
mov A, #0x82
movx @DPTR, A ;init 82C55 (port A output,port B input)
mov TH0,#0xC3 ;set timer higher byte
mov TL0,#0x50 ;set timer lower byte(0xC350 = 50000)
mov TMOD, #0x01 ;set timer at mode 1(16bits)
mov IE, #0x82 ;enable interrupt
setb TR0 ;start timer
_EXIT:
ajmp _EXIT
_DELAY:
mov R0, A
_DELAY_I:
mov R1, #100 ;R1 = 100
_DELAY_J:
mov R2, #100 ;R2 = 100
_DELAY_K:
djnz R2, _DELAY_K ;if(--R2 != 0) goto DELAY_K
djnz R1, _DELAY_J ;if(--R1 != 0) goto DELAY_J
djnz R0, _DELAY_I ;if(--R0 != 0) goto DELAY_I
ret
.org 0x000B ;timer0 interrupt vector
_TIMER0_ISR:
push ACC
push DPH
push DPL
mov DPTR,#0xA000 ;82C55 port A (LED)
movx A,@DPTR ;read port A into acc.
inc A ;acc++
movx @DPTR,A ;write to port A
mov TH0,#0xC3 ;reload timer higher byte
mov TL0,#0x50 ;reload timer lower byte(0xC350 = 50000)
pop DPL
pop DPH
pop ACC
reti
.end
我想请教的是_TIMER0_ISR:这个部分是怎麽运行的?
因为是初学者~
所以有许多地方不是很理解~
请大家多多见谅~
也请大家多多指教~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.237.250
1F:推 ruemann:你是要问ISR的动作还是为何会跑去ISR那边执行? 01/05 13:39
2F:推 easypro:时间到执行中断 ISR是中断副程式 timer是时间计数器 01/05 13:42
3F:→ eentut:interrupt... 01/05 18:34
4F:→ kdjf:timer overflow的时候,晶片会把IP指到0xB(原本的IP放到stack) 01/05 22:47
5F:→ kdjf:这类的机制就叫interrupt(发生一件事,'call'到一个vector) 01/05 22:50
6F:推 hayden0828:= =....... 01/08 00:10
7F:→ hayden0828:这程式码感觉挺熟悉的呢..... 01/08 00:13