?? times.asm
字號:
.mmregs
.def _c_int00
STACK .usect "STACK",100h
t0_cout .usect "vars",1 ;計數器
t0_flag .usect "vars",1 ;當前XF輸出電平標志。t0_flag=1,則XF=1;
;t0_flag=0,則XF=0
TVAL .set 1639 ;1640(10(61=1ms,又因中斷程序中計數器初值
;t0_cout=1000,所以定時時間:1ms(1000=1s
TIM0 .set 0024H ;定時器0寄存器地址
PRD0 .set 0025H
TCR0 .set 0026H
.data
TIMES .int TVAL ;定時器時間常數
.text
**********************************
; 中斷矢量表程序段
_c_int00
b start
nop
nop
NMI rete ;非屏蔽中斷
nop
nop
nop
SINT17 .space 4*16 ;各軟件中斷
SINT18 .space 4*16
SINT19 .space 4*16
SINT20 .space 4*16
SINT21 .space 4*16
SINT22 .space 4*16
SINT23 .space 4*16
SINT24 .space 4*16
SINT25 .space 4*16
SINT26 .space 4*16
SINT27 .space 4*16
SINT28 .space 4*16
SINT29 .space 4*16
SINT30 .space 4*16
INT0 rsbx intm ;外中斷0中斷
rete
nop
nop
INT1 rsbx intm ;外中斷1中斷
rete
nop
nop
INT2 rsbx intm ;外中斷2中斷
rete
nop
nop
TINT: bd timer ;定時器中斷向量
nop
nop
nop
RINT0: rete ;串口0接收中斷
nop
nop
nop
XINT0: rete ;串口0發送中斷
nop
nop
nop
SINT6 .space 4*16 ;軟件中斷
SINT7 .space 4*16 ;軟件中斷
INT3: rete ;外中斷3中斷
nop
nop
nop
HPINT: rete ;主機中斷
nop
nop
nop
RINT1: rete ;串口1接收中斷
nop
nop
nop
XINT1: rete ;串口1發送中斷
nop
nop
nop
******************************************
start:
LD #0,DP
STM #STACK+100h,SP
STM #07FFFh,SWWSR
STM #1020h,PMST
ST #1000,*(t0_cout) ;計數器設置為 1000(1s)
SSBX INTM ;關全部中斷
LD #TIMES,A
READA TIM0 ;初始化 TIM,PRD
READA PRD0
STM #669h,TCR0 ;初始化TCR0
STM #8,IMR ;初始化 IMR, 使能 timer0 中斷
RSBX INTM ;開放全部中斷
WAIT: B WAIT
*************************************************************
;定時器0中斷服務子程序
timer: ADDM #-1,*(t0_cout) ;計數器減1
CMPM *(t0_cout),#0 ;判斷是否為0
BC next,NTC ;不是0,退出循環
ST #1000,*(t0_cout) ;為0,設置計數器,并將XF取反
BITF t0_flag,#1
BC xf_out,NTC
SSBX XF
ST #0,t0_flag
B next
xf_out: RSBX XF
ST #1,t0_flag
next: RSBX INTM
RETE
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -