📄 interinc.asm
字号:
;INTERINC.ASM-DEMONSTRATES THE USE OF INTERRUPT
.TITLE "INTERINC.ASM" ;INTERRUPT PROGRAM
.SECT "VECTORS" ;ASSEMBLE INTO VECTOR SECTION
RESET .WORD BEGIN ;RESET VECTOR
.SPACE 8 ;SKIP 8 WORDS
TIMER0 .WORD TIM_INT ;TINT0 VECTOR LOCATION @ 9h
.SPACE 54 ;REMAINDER OF VECTOR SECTION
.DATA ;ASSEMBLE INTO DATA SECTION
STACKS .WORD 809F00H ;INIT STACK POINTER DATA
PERIOD .WORD 30H ;INTERRUPT RATE=7.5MHz/(2*PERIOD)
IE_REG .WORD 100H ;ENABLE TIMER 0 (TINT0)INTERRUPT
PER_ADDR .WORD 808028H ;(TINT0) PERIOD REG LOCATION
TCNTL .WORD 2C1H ;CONTROL REGISTER VALUE
ST_REG .WORD 2000H ;SET STATUS REG
IO_ADDR .WORD 804000H ;I/O ADDRESS
OUTPUT .WORD 01000H ;INITIAL OUTPUT VALUE
.TEXT ;ASSEMBLE INTO TEXT SECTION
BEGIN LDP STACKS ;INIT DATA PAGE
LDI @STACKS,SP ;SP-> 809F00H
LDI @PER_ADDR,AR0 ;TINT0 PERIOD REG =>AR0
LDI @PERIOD,R0 ;PERIOD VALUE => R0
STI R0,*AR0--(8) ;SET TINT0 PERIOD @ 808028H
LDI @TCNTL,R0 ;CONTROL REGISTER VALUE =>R0
STI R0,*AR0 ;SET TINT0 GLOBAL CNTRL @ 808020H
LDI @OUTPUT,R0 ;R0 = OUTPUT VALUE
LDI @IE_REG,IE ;ENABLE TINT0 INTERRUPT(BIT 8)
OR @ST_REG,ST ;SET STATUS REG (ENABLE GIE BIT)
WAIT IDLE ;WAIT FOR INTERRUPT
BR WAIT ;BRANCH TO WAIT TIL INTERRUPT
; INTERRUPT VECTOR
TIM_INT LDI @IO_ADDR,AR0 ;1ST ADDRESS OF EXP BUS=>AR0
STI R0,*AR0 ;OUTPUT R0 @ 804000H
ADDI 1,R0 ;INCREMENT OUTPUT VALUE BY 1
RETI ;RETURN FROM INTERRUPT
.END ;END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -