📄 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 + -