📄 adda7226.asm
字号:
;此程序为通过从DACO脚输出三角波 地址为0300H
;通过ADINO脚输入
;通过da转换输出DAC3脚 地址为0303H
;比较两个输出波形。通过EVA模块,定时器1
.include "F2407REGS.H" ;引用头部文件
.def _c_int0
;(1)建立中断向量表
.sect ".vectors" ;定义主向量段
RSVECT B _c_int0 ;PM 0 复位向量 1
INT1 B GISR1 ;PM 2 中断优先级1 4
INT2 B PHANTOM ;PM 4 中断优先级2 5
INT3 B PHANTOM ;PM 6 中断优先级3 6
INT4 B PHANTOM ;PM 8 中断优先级4 7
INT5 B PHANTOM ;PM A 中断优先级5 8
INT6 B GISR6 ;PM C 中断优先级6 9
RESERVED B PHANTOM ;PM E 模拟量输入中断(保留) 10
SW_INT8 B PHANTOM ;PM 10 用户定义软件中断 -
SW_INT31 B PHANTOM ;PM 3E 用户定义软件中断 -
;中断子向量入口定义pvecs
.sect ".pvecs" ;定义子向量段
PVECTORS B PHANTOM ;保留向量地址偏移量 0000h
B PHANTOM ;保留向量地址偏移量 0001h
B PHANTOM ;保留向量地址偏移量 0002h
B PHANTOM ;保留向量地址偏移量 0003h
B ADCINT_ISR ;保留向量地址偏移量 0004h ADC中断
B PHANTOM ;保留向量地址偏移量 0005h
.bss DAC0_VAL,1
.bss DAC1_VAL,1
.bss DAC2_VAL,1
.bss DAC3_VAL,1
;(2)主程序:
.text
_c_int0
SETC INTM
CLRC SXM
CLRC OVM
CLRC CNF
LDP #0E0H
SPLK #81FEH,SCSR1 ;时钟4倍频,CLKIN=6 M,CLKOUT=24 M
SPLK #0E8h,WDCR ;关看门狗
LDP #0
SPLK #0022h,IMR ;允许INT1和INT2中断
SPLK #0FFFFh,IFR ;清所有中断标志
CALL ADINIT ;初始化ADC程序
clrc INTM ;开总中断
CALL AD ;启动模数转换程序
LDP #0000h ;Set date page pointer to 0
LAR AR0,#7FH
MAR *,AR0
SPLK #1FH,60H
SPLK #3FH,61H
SPLK #5FH,62H
SPLK #7FH,63H
OUT 60H,0300H
OUT 61H,0301H
OUT 62H,0302H
OUT 63H,0303H
P0: LACC #0
P1: LDP #0
ADD #01h
SACL DAC0_VAL
OUT DAC0_VAL,0300h
BANZ P1
MAR *,AR0
LAR AR0,#7eH
LACC #07Fh
P3: SUB #01h
SACL DAC0_VAL
OUT DAC0_VAL,0300h
BANZ P3
LAR AR0,#7FH
B P0
;(4)ADC初始化程序
ADINIT:
LDP #T1CNT>>7 ;设置通用定时器4
SPLK #0000H,T1CNT
SPLK #170CH,T1CON
SPLK #005H,T1PR
SPLK #2100H,GPTCONA
SPLK #0FFFFH,EVAIFRA
SPLK #0000H,EVAIMRA
LDP #ADCCTRL1>>7
SPLK #4000H,ADCCTRL1
NOP
NOP
SPLK #0030H,ADCCTRL1 ;设置ADC控制寄存器
SPLK #0504H,ADCCTRL2
SPLK #0000H,MAXCONV ;1通道
SPLK #0000H,CHSELSEQ1
RET
;(7)启动模数转换程序
AD:
LDP #T1CON>>7
LACL T1CON
OR #40H ;启动定时器4
SACL T1CON
RET
;(8)中断程序6
GISR6: NOP
GISR1: SETC INTM
LDP #0
SACL 68H ;保护ACC累加器的值
;优先级INT1中断子程序入口;保护现场
LDP #PIVR>>7
LACC PIVR,1 ;读取外设中断向量寄存器(PIVR),并左移一位
ADD #PVECTORS ;加上外设中断入口地址
BACC ;跳到相应的中断服务子程序
ADCINT_ISR:
;Set date page pointer to 0
;LAR AR0,#0
LAR AR2,#RESULT0
MAR *,AR2
ADC1: LACC *,8 ;DA是8位的
LDP #0000h ;Set date page pointer to 0
SACH DAC1_VAL
OUT DAC1_VAL,0303h
LDP #ADCCTRL2>>7
LACL ADCCTRL2
OR #4000H ;复位 SEQ1
AND #0FFDFH ;清 INT FLAG SEQ1
SACL ADCCTRL2
GISR1_RET: ;中断返回出口 ;恢复现场
LDP #T1CNT>>7 ;设置通用定时器4
;SPLK #0000H,T4CNT
LACL EVAIFRA
SACL EVAIFRA
LDP #0
LACC 68H
CLRC INTM ;开总中断,因为一进中断就自动关闭了总中断
MAR *,AR0
RET
;(9)假中断程序
PHANTOM
KICK_DOG ;复位看门狗
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -