📄 da.asm
字号:
ADD #PVECTORS ;加上外设中断入口地址
BACC ;跳到相应的中断服务子程序
XINT1_ISR: ; read data to (210), and back it up in (211)
SETC INTM ;关总中断
LDP #200h>>7
MAR *,AR6 ; used to refer to save address
LAR AR6,#0210H
IN *,0100H ;GET KEY VALUE , read in word from port address 0100h -> (210)
LACC * ;(210)->ACC
AND #00FH ;HIGH BYTE IS CLEARED
;OR #8800H ; DISPLAY POSITION CHOICE !!!
;SACL *+ ; save key value in (210H)
SACL * ; backup input in (211)
RPT #100 ; priority
NOP
RPT #100
NOP
LACC * ;装载累加器
SUB #00H
BCND KEY0,EQ
LACC *
SUB #01H
BCND KEY1,EQ
LACC *
SUB #02H
BCND KEY2,EQ
LACC *
SUB #03H
BCND KEY3,EQ
GISR1_RET: ;中断返回
;开总中断,因为一进中断就自动关闭总中断
LDP #XINT1CR>>7
SPLK #8001H,XINT1CR
CLRC INTM
RET
;LDP #0
;SPLK #01H,IFR
;LDP #XINT1CR>>7 ; Book P45
;SPLK #8001H,XINT1CR ; enable XINT1
;CLRC INTM
;RET
;---------------------------------------------------------------------------------------------------------------------
KEY0:
CALL SQUAREWAVE
B GISR1_RET
KEY1:
CALL TRIANGLEWAVE
B GISR1_RET
KEY2:
CALL SINEWAVE
B GISR1_RET
KEY3:
CALL SAWTOOTHWAVE
B GISR1_RET
;---------------------------------------------------------------------------------------------------------------------
SQUAREWAVE:
LDP #0
SPLK #01H,IFR
LDP #XINT1CR>>7 ; Book P45
SPLK #8001H,XINT1CR ; enable XINT1
CLRC INTM
LDP #0
SPLK #00H,60H
SPLK #00H,61H
SPLK #00H,62H
LOOP:
LDP #0
SPLK #0AH,62H
OUT 62H,0300H
RPT #100
CALL DELAY1
CALL DELAY
RPT #200
NOP
RPT #200
NOP
LDP #0
SPLK #0A8H,62H
OUT 62H,0300H
RPT #100
CALL DELAY1
CALL DELAY
RPT #200
NOP
RPT #200
NOP
B LOOP
RET
;---------------------------------------------------------------------------------------------------------------------
TRIANGLEWAVE:
LDP #0
SPLK #01H,IFR
LDP #XINT1CR>>7 ; Book P45
SPLK #8001H,XINT1CR ; enable XINT1
CLRC INTM
LDP #0
SPLK #00H,60H
SPLK #00H,61H
SPLK #00H,62H
; LDP #0
; SPLK #0FFH,60H
LOOP1:
LACL 60H
ADD #1
SACL 60H
CALL DELAY1
BIT 60H,8
BCND LOOP2,TC
OUT 60H,0300H
RPT #200
NOP
B LOOP1
LOOP2:
LACL 60H
SUB #1
BCND LOOP1, LEQ
SACL 60H
CALL DELAY1
OUT 60H,0300H
RPT #200
NOP
B LOOP2
RET
;---------------------------------------------------------------------------------------------------------------------
SINEWAVE:
LDP #0
SPLK #01H,IFR
LDP #XINT1CR>>7 ; Book P45
SPLK #8001H,XINT1CR ; enable XINT1
CLRC INTM
lar ar0,#0100h
lar ar1,#0300h
lar ar2,#0060h
lar ar3,#8000h
ldp #0h
splk #0000h,k
splk #111h,I ;Q10
splk #0000h,sine
splk #0000h,ia
splk #0000h,ib
splk #8000h,count
splk #0800h,dax
;kick_dog
ldp #0
splk #1023,k
mar *,ar3
lacc #table
RPT #200
NOP
rpt k
tblr *+
lar ar3,#8000h
LAR AR3,#200H
;CLRC INTM
;RETURN nop
;kick_dog
b RETURN
RETURN: ldp #0
CLRC SXM
lacc count
sub #83ffh
bcnd AGAIN,GEQ
b OUTPORT1
AGAIN ldp #0
splk #8000h,count
OUTPORT1
ldp #0
mar *,ar3
lar ar3,count
setc sxm
LACC *
SACL sine
LACC sine
; LACC #8001H
RPTK #7
SFR
sacl sine
LACC sine
ADD #80H
SACL sine
;splk #0ffffh,sine;
out sine,0300h
P1:
ldp #0
clrc sxm
lacc count
add #1h
sacl count
B RETURN
RET
;---------------------------------------------------------------------------------------------------------------------
SAWTOOTHWAVE:
LDP #0
SPLK #01H,IFR
LDP #XINT1CR>>7 ; Book P45
SPLK #8001H,XINT1CR ; enable XINT1
CLRC INTM
LDP #0
SPLK #00H,60H
SPLK #00H,61H
SPLK #00H,62H
;LDP #0
;SPLK #0FFH,60H
;SPLK #07FH,61H
;SPLK #3FH,62H
LOOP3:
LDP #0
LOOP4: SPLK #00H , 61H
LOOP5: OUT 61H, 0300H
RPT #200
NOP
LACC 61H
ADD #1
SACL 61H
CALL DELAY1
SUB #07FH
BCND LOOP4, GEQ
B LOOP5
RET
;------------------------
DELAY1:
LACL #10
DELAY2: SUB #1
RPT #15
NOP
BCND DELAY2,NEQ
RET
;---------------------------------------------------------------------------------------------------------------------
GISR5: CLRC INTM ;开总中断,因为一进中断就自动关闭总中断
RET
;---------------------------------------------------------------------------------------------------------------------
;(6)假中断程序
PHANTOM:
KICK_DOG ;复位看门狗
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -