📄 ex.asm
字号:
;ex.asm,定时器控制LED
.title "ex.asm"
.include "F2407REGS.H"
.sect ".data"
numled .set 0d01h
;建立中断向量表
.sect ".vectors"
RSVECT B start
INT1 B PHANTOM
INT2 B GISR2
INT3 B PHANTOM
INT4 B PHANTOM
INT5 B PHANTOM
INT6 B PHANTOM
;中断子向量入口定义
.sect ".pvecs" ;定义子向量段
PVECTORS B PHANTOM ;保留向量偏移量0000H
B PHANTOM ;偏移量0001H
B PHANTOM ;偏移量0002H
B PHANTOM ;偏移量0003H
B PHANTOM ;偏移量0004H
B PHANTOM ;偏移量0005H
B PHANTOM ;偏移量0006H
B PHANTOM ;偏移量0007H
B PHANTOM ;偏移量0008H
B PHANTOM ;偏移量0009H
B PHANTOM ;偏移量000AH
B PHANTOM ;偏移量000BH
B PHANTOM ;偏移量000CH
B PHANTOM ;偏移量000DH
B PHANTOM ;偏移量000EH
B PHANTOM ;偏移量000FH
B PHANTOM ;偏移量0010H
B PHANTOM ;偏移量0011H
B PHANTOM ;偏移量0012H
B PHANTOM ;偏移量0013H
B PHANTOM ;偏移量0014H
B PHANTOM ;偏移量0015H
B PHANTOM ;偏移量0016H
B PHANTOM ;偏移量0017H
B PHANTOM ;偏移量0018H
B PHANTOM ;偏移量0019H
B PHANTOM ;偏移量001AH
B PHANTOM ;偏移量001BH
B PHANTOM ;偏移量001CH
B PHANTOM ;偏移量001DH
B PHANTOM ;偏移量001EH
B PHANTOM ;偏移量001FH
B PHANTOM ;偏移量0020H
B PHANTOM ;偏移量0021H
B PHANTOM ;偏移量0022H
B PHANTOM ;偏移量0023H
B PHANTOM ;偏移量0024H
B PHANTOM ;偏移量0025H
B PHANTOM ;偏移量0026H
B T1PINT_ISR ;偏移量0027H
B PHANTOM ;偏移量0028H
B PHANTOM ;偏移量0029H
B PHANTOM ;偏移量002AH
B PHANTOM ;偏移量002BH
B PHANTOM ;偏移量002CH
B PHANTOM ;偏移量002DH
B PHANTOM ;偏移量002EH
B PHANTOM ;T3PINT_ISR ;偏移量002FH,T3PINT周期中断
B PHANTOM ;偏移量0030H
B PHANTOM ;偏移量0031H
B PHANTOM ;偏移量0032H
B PHANTOM ;偏移量0033H
B PHANTOM ;偏移量0034H
B PHANTOM ;偏移量0035H
B PHANTOM ;偏移量0036H
B PHANTOM ;偏移量0037H
B PHANTOM ;偏移量0038H
B PHANTOM ;偏移量0039H
B PHANTOM ;偏移量003AH
B PHANTOM ;偏移量003BH
B PHANTOM ;偏移量003CH
B PHANTOM ;偏移量003DH
B PHANTOM ;偏移量003EH
B PHANTOM ;偏移量003FH
B PHANTOM;CANMBX_ISR ;偏移量0040H
B PHANTOM ;偏移量0041H
B PHANTOM ;偏移量0042H
.text
start:
CALL SYSINIT ;系统初始化程序
LDP #DP_PF2
SPLK #0FEFFH,MCRA ;IOPB0置为IO
SPLK #0FFFEH,PBDATDIR ;IOPB0=0,置低,LED指示灯灭
LDP #DP_SARAM2
SPLK #200,numled ;控制LED闪烁频率的参数
CALL T1_INIT ;定时器1初始化
CLRC INTM ;打开中断
WAIT:
NOP
NOP
B WAIT
SYSINIT:
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK #83FEH,SCSR1 ;CLKIN=20M,CLKOUT=40M
SPLK #006FH,WDCR ;关看门狗
KICK_DOG
LDP #0
SPLK #0FFFFH,IFR ;清所有中断标志
SPLK #0002H,IMR ;允许INT2中断
RET
T1_INIT:
LDP #DP_EVA
SPLK #0080H,EVAIMRA ;定时器1周期中断使能
SPLK #0FFFFH,EVAIFRA ;清除中断标志
SPLK #0000H,GPTCONA
SPLK #2500,T1PR ;
SPLK #0,T1CNT
SPLK #144EH,T1CON ; 增模式, TPS系数40M/16=2.5M,T1使能
;定时周期2500*0.4=1ms
RET
GISR2:
LDP #224
LACC PIVR,1
ADD #PVECTORS
BACC
T1PINT_ISR:
LDP #DP_EVA
SPLK #0,T1CNT
SPLK #0FFFFH,EVAIFRA
LDP #DP_SARAM2
LACC numled
SUB #1 ;每次减1
SACL numled
BCND P1,NEQ ;若不为0则跳转
SPLK #200,numled ;为0则执行此处,每进200次中断后执行LED操作
LDP #DP_PF2
BIT PBDATDIR,15
BCND LEDL,TC ;若该位为1,则跳转到LEDL
SPLK #0101H,PBDATDIR ;IOPB0=1
B P1
LEDL:
LDP #DP_PF2
SPLK #0100H,PBDATDIR ;IOPB0=0
P1:
CLRC INTM
RET ;中断返回
PHANTOM:
KICK_DOG
RET
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -