📄 ad.asm
字号:
.if .BIGMODEL
PUSH DP
LDP max1251
.endif
AND 0,IE
PUSH AR1
PUSH R1
PUSHF R1
LDI @adstate,AR1
LDI *+AR1(8),R0
; BNZ adfin
; b $
LDI 0,R1
STI R1,*+AR1(8)
POPF R1
POP R1
POP AR1
OR (EINT0_CPU+EINT1_CPU),IE
.if .BIGMODEL
POP DP
.endif
.if .REGPARM = 0 ;standard runtime model
POP FP ;restore FP
.endif
RETS
*********************************************************************************
* *
* 函数定义:Max125_end *
* 功 能:结束在定时状下的连续采样 *
* *
* 出口参数:AD的工作状态 *
* *
* 资源使用:AR0,R1 *
* *
*********************************************************************************
_Max125_end:
.if .REGPARM = 0 ;standard runtime model
PUSH FP ;save the old FP
LDI SP,FP ;point to top of stack
.endif ;both runtime models
.if .BIGMODEL
PUSH DP
LDP max1251
.endif
PUSH ST
PUSH AR1
PUSH R1
PUSHF R1
;停止定时器
LDI @vc33mmr,AR1
LDI 0,R1
STI R1,*+AR1(TIM0_CTRL)
POPF R1
POP R1
POP AR1
POP ST
.if .BIGMODEL
POP DP
.endif
.if .REGPARM = 0 ;standard runtime model
POP FP ;restore FP
.endif
RETS
*********************************************************************************
* *
* 函数定义:c_init01 *
* 功 能:AD中断服务程序 *
* *
* *
*********************************************************************************
_c_int01:
PUSH ST
PUSH FP ;save old FP
LDI SP,FP ;set up new Fp
PUSH DP
PUSH AR1
PUSH AR2
PUSH AR0
PUSH R0
PUSHF R0
PUSH R1
PUSHF R1
PUSH R2
PUSHF R2
PUSH R3
PUSHF R3
PUSH AR7
LDP @MAX125
LDI @vc33mmr,AR0
;保存系统等待
LDI *+AR0(STRB0),R3
PUSH R3
;为系统加入1个等待
LDI (INT_RDY+WAIT_1+BANK_8M),R1
STI R1,*+AR0(STRB0)
LDI @adstate,AR1
LDI *+AR1(5),AR2 ;读ADdata_Buffer的首地址
LDI *+AR1(6),R0 ;中断一次,标识一次采样
ADDI 01,R0
STI R0,*+AR1(6)
LDI *AR1,R0 ;读第一个AD的通路数
LDI *+AR1(1),R1
PUSH R1 ;读第二个AD的通路数
LDI *+AR1(2),R2 ;读第三个AD的通路数
LDI *+AR1(3),R3 ;读第四个AD的通路数
LDI @MAX125,AR1
LDI @dac11,AR7 ;第一片DA的第一通道
read_ad: LDI @vc33mmr,AR0
LDI (INT_RDY+WAIT_4+BANK_8M),R1
STI R1,*+AR0(STRB0) ;为系统加入4个等待
SUBI 0,R0
BZ ad1
LDI R0,RC ;读第一个AD的通路数
SUBI 1,RC
RPTB ad1
LDI *AR1,R0 ;读第一个AD设定的各个通路
AND @mask14l,R0
STI R0,*AR2++
ad1: NOP
POP R1
SUBI 0,R1
BZ ad2
LDI R1,RC ;读第二个AD的通路数
SUBI 1,RC
RPTB ad2
LDI *+AR1(1),R0 ;读第二个AD设定的各个通路
AND @mask14l,R0
STI R0,*AR2++
ad2: NOP
SUBI 0,R2
BZ ad3
LDI R2,RC ;读第三个AD的通路数
SUBI 1,RC
RPTB ad3
LDI *+AR1(2),R0 ;读第三个AD设定的各个通路
AND @mask14l,R0
STI R0,*AR2++
ad3: NOP
SUBI 0,R3
BZ ad4
LDI R3,RC ;读第四个AD的通路数
SUBI 1,RC
RPTB ad4
LDI *+AR1(3),R0 ;读第四个AD设定的各个通路
AND @mask14l,R0
STI R0,*AR2++
ad4: NOP
LDI @vc33mmr,AR0
LDI (INT_RDY+WAIT_1+BANK_8M),R1
STI R1,*+AR0(STRB0) ;为系统加入1个等待
LDI @adstate,AR1
LDI AR2,R1
LDI *+AR1(15),R2 ;取半満作为判断地址
SUBI R1,R2
BNC store
LDI AR2,R1
LDI *+AR1(7),R2 ;取未地址
SUBI R1,R2
BC adall
LDI 01,R0
STI R0,*+AR1(13) ;设定ADdata_Buffer半満标志
LDI AR2,R1
LDI *+AR1(7),R2 ;取未地址
STI R2,*+AR1(15) ;取満作为判断地址
BU store
adall: LDI 01,R0
STI R0,*+AR1(8) ;设定ADdata_Buffer満
LDI *+AR1(14),R2 ;取半満地址
STI R2,*+AR1(15) ;取半満作为判断地址
LDI @addata,AR2 ;重新设定ADdata_Buffer的首地址
store: LDI AR2,R1
STI R1,*+AR1(5) ;保存当前的ADDATABUFFER的地址
LDI *+AR1(6),R1
LDI *+AR1(4),R2
BZ exit
SUBI R1,R2
BNZ exit ;设定采样次数完成
LDI @vc33mmr,AR0 ;停止定时器
LDI 0,R1
STI R1,*+AR0(TIM0_CTRL)
LDI 01H,R1
STI R1,*+AR1(8) ;采样结束
LDI 0,R1
STI R1,*+AR1(6)
LDI @addata,R1 ;重新设定ADdata_Buffer的首地址
STI R1,*+AR1(5)
b ad_end
exit: LDI @adstate,AR1
LDI *+AR1(0ah),R1
SUBI 02H,R1
BNZ ad_end
LDI @vc33mmr,AR0
LDI (INT_RDY+WAIT_3+BANK_8M),R1
STI R1,*+AR0(STRB0) ;为系统加入3个等待
LDI @adstart,AR1 ;软件单次启动AD
STI R1,*AR1
nop
nop
;恢复系统等待
ad_end: LDI @vc33mmr,AR0
POP R3
STI R3,*+AR0(STRB0)
POP AR7
POPF R3
POP R3
POPF R2
POP R2
POPF R1
POP R1
POPF R0
POP R0
POP AR0
POP AR2
POP AR1
POP DP
POP FP
POP ST
RETI
*********************************************************************************
* *
* 函数定义:c_init01 *
* 功 能:HOST中断服务程序 *
* *
* *
*********************************************************************************
_c_int02: PUSH ST
PUSH FP ;save old FP
LDI SP,FP ;set up new Fp
PUSH DP
PUSH AR1
PUSH AR2
PUSH AR0
PUSH R0
PUSHF R0
PUSH R1
PUSHF R1
PUSH R2
PUSHF R2
LDI @vc33mmr,AR0
LDI *+AR0(STRB0),R0
;保存系统等待
PUSH R0
;为系统加入7个等待
LDI (INT_RDY+WAIT_7+BANK_8M),R1
STI R1,*+AR0(STRB0)
;获取loacal bus中断寄存器
LDI @lint,AR0
LDI *AR0,R1
LDI *AR0,R1
AND 08H,R1
BZ host_end
;读取Mailbox中的命令。
LDI @htolmailbox,AR0
LDI *AR0,R1
LDI *AR0,R1
LDI @commandb,AR0
STI R1,*AR0
;恢复系统等待
LDI @vc33mmr,AR0
POP R0
STI R0,*+AR0(STRB0)
host_end: POPF R2
POP R2
POPF R1
POP R1
POPF R0
POP R0
POP AR0
POP AR2
POP AR1
POP DP
POP FP
POP ST
RETI
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -