📄 dds.asm
字号:
.include hardware.inc
.DEFINE P_ADC_MUX_Ctrl 0x702b
.DEFINE P_ADC_MUX_DATA 0x702C
.define FQ_UD_Pin 0000000000100000b; //IO AOP RS IOA5
.define Din_Pin 0000000000000001b; //IO EP E IOA7
.define CLK_Pin 0000000001000000b; //IO as RWP RW IOA6
.define RST_Pin 0000000000010000b; //IO as RWP RW IOA6
.define DDS_Data 0x7005; //P_IOB_Data
.define DDS_Buffer 0x7006; //P_IOB_Buffer
.define DDS_Dir 0x7007; //P_IOB_Dir
.define DDS_Attrib 0x7008; //P_IOB_Attrib
.external _DDS_data1,_DDS_data2,_DDS_data3,_DDS_1,_DDS_2,_DDS_3,_DDS_4,_DDS_5,_DDS_6,_i,_v,_ctrlVx,_ctrlVy
.external _j,_tempv
.external _n,_val,_flow,_mo,_modify
.code
//=========================================================================================
//
//=========================================================================================
.PUBLIC _initDDS1;
_initDDS1: .proc
r1=[DDS_Dir]
r1|=Din_Pin
r1|=CLK_Pin
r1|=FQ_UD_Pin
// r1|=RST_Pin
[DDS_Dir]=r1
r1=[DDS_Attrib]
r1|=FQ_UD_Pin
r1|=Din_Pin
r1|=CLK_Pin
//r1|=RST_Pin
[DDS_Attrib]=r1
R1 = 0x0001 //允许A/D
[P_ADC_Ctrl] = R1
retf
.endp
//=========================================================================================
//
//=========================================================================================
.PUBLIC _initDDS2;
_initDDS2: .proc
r1=0xffff
[DDS_Dir]=r1
[DDS_Attrib]=r1
R1 = 0x0001 //允许A/D
[P_ADC_Ctrl] = R1
retf
.endp
//=========================================================================================
//
//=========================================================================================
.PUBLIC _DDS1
_DDS1: .proc
dds:
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0040
[DDS_Data]=r3 //up "10"
nop
nop
nop
nop
nop
nop
nop
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0000
[DDS_Data]=r3 //down "00" 15
r3=[DDS_Data]
r3|=FQ_UD_Pin
[DDS_Data]=r3 //使能
nop
nop
nop
nop
nop
nop
r3=[DDS_Data]
r1=FQ_UD_Pin
r1^=0xffff
r3&=r1
[DDS_Data]=r3 //结束使能 [DDS_Data]=r3 //结束使能
r3=[DDS_Data]
r3&=0xfffe
[DDS_Data]=r3 //down "00" 15
r1=0
loop0:
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0040
[DDS_Data]=r3 //up "10"
nop
nop
nop
nop
nop
nop
nop
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0000
[DDS_Data]=r3 //down "00" 15
r1+=1
cmp r1,3
jnz loop0
r3=[DDS_Data]
r3|=FQ_UD_Pin
[DDS_Data]=r3 //使能
nop
nop
nop
nop
nop
nop
r3=[DDS_Data]
r1=FQ_UD_Pin
r1^=0xffff
r3&=r1
[DDS_Data]=r3 //结束使能 [DDS_Data]=r3 //结束使能
r2=[_DDS_data1]
r1=0
loop1:
r3=[DDS_Data]
r3&=0xfffe
r4=r2
r4&=0x0001
r3|=r4
[DDS_Data]=r3 //down "00" 15
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0040
[DDS_Data]=r3 //up "10"
nop
nop
nop
nop
nop
nop
nop
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0000
[DDS_Data]=r3 //down "00" 15
// nop
// nop
r2 = r2 lsr 1
r1+=1
cmp r1,16
jnz loop1
r2=[_DDS_data2]
loop2:
r3=[DDS_Data]
r3&=0xfffe
r4=r2
r4&=0x0001
r3|=r4
[DDS_Data]=r3 //down "00" 15
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0040
[DDS_Data]=r3 //up "10"
nop
nop
nop
nop
nop
nop
nop
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0000
[DDS_Data]=r3 //down "00" 15
r2 = r2 lsr 1
r1+=1
cmp r1,32
jnz loop2
r2=[_DDS_data3]
loop3:
r3=[DDS_Data]
r3&=0xfffe
r4=r2
r4&=0x0001
r3|=r4
[DDS_Data]=r3 //down "00" 15
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0040
[DDS_Data]=r3 //up "10"
nop
nop
nop
nop
nop
nop
nop
r3=[DDS_Data]
r3&=0xffbf
r3|=0x0000
[DDS_Data]=r3 //down "00" 15
r2 = r2 lsr 1
r1+=1
cmp r1,40
jnz loop3
r3=[DDS_Data]
r3|=FQ_UD_Pin
[DDS_Data]=r3 //使能
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
// r3=[DDS_Data]
// r1=FQ_UD_Pin
// r1^=0xffff
// r3&=r1
// [DDS_Data]=r3 //结束使能
//goto dds
retf
//goto wrctrl
.endp
//=========================================================================================
//
//=========================================================================================
.PUBLIC _DDS2
_DDS2: .proc
dds2:
//call _delay10ms
r3=[DDS_Data]
r3&=0x7fff
r3|=0x8000
[DDS_Data]=r3 //up "10"
// call _delay10ms
r3=[DDS_Data]
r3&=0x7fff
r3|=0x0000
[DDS_Data]=r3 //down "00" 15
r3=[DDS_Data]
r1=FQ_UD_Pin
r1^=0xffff
r3&=r1
[DDS_Data]=r3 //结束使能
r1=0
r3=[DDS_Data]
r3&=0xbfff
r3|=0x0000
[DDS_Data]=r3 //down "00" 15
r2=_DDS_1
loop:
r3=[DDS_Data]
r3&=0xff00
r4=[r2]
r4&=0x00ff
r3|=r4
[DDS_Data]=r3 //down "00" 15
r3=[DDS_Data]
r3&=0xbfff
r3|=0x4000
[DDS_Data]=r3 //up "10"
nop
nop
nop
nop
nop
nop
nop
r3=[DDS_Data]
r3&=0xbfff
r3|=0x0000
[DDS_Data]=r3 //down "00" 15
// nop
// nop
r2+=1
r1+=1
cmp r1,5
jnz loop
r3=[DDS_Data]
r3|=FQ_UD_Pin
[DDS_Data]=r3 //使能
nop
nop
nop
nop
retf
.endp
//=========================================================================================
//
//=========================================================================================
.public F_clearwd
.public _clearwd
_clearwd:
F_clearwd: .proc
r1=0x0001;
[P_Watchdog_Clear]=r1
retf
.endp
//=========================================================================================
//
//=========================================================================================
.public _delay10ms
_delay10ms:
r1=0x0000
delay3:
r2=0x0000
loop4:
r2+=1
cmp r2,21
jb loop4
r1+=1
cmp r1,5000
jb delay3
retf
//=========================================================================================
//
//=========================================================================================
.PUBLIC _Sample
_Sample:
R1 = 0x0001 //选择通道LINE_IN为IOA0
[P_ADC_MUX_Ctrl] = R1
R1 = 0x0003 //允许A/D转换
[P_ADC_Ctrl] = R1
R1 = [P_ADC_MUX_DATA] //是,则读出[P_ADC_MUX_DATA]转换结果
r3=16
r2=0
sample:
L_AD:
R1 = [P_ADC_MUX_Ctrl] //读寄存器[P_ADC_MUX_Ctrl]的B15位
TEST R1,0x8000 //判断是否转换完毕
JZ L_AD //否,继续转换
R1 = [P_ADC_MUX_DATA] //是,则读出[P_ADC_MUX_DATA]转换结果
r1 =r1 lsr 4
r1 =r1 lsr 2
r2+=r1
r3-=1
jnz sample
r2 =r2 lsr 4
cmp r2,0x0050
ja bigger
r2=0
jmp wr
bigger:
[_mo]=r2
call _modify
r2=[_mo]
wr:
r1=0xaaaa
r3=0x7555
[r3]=r1
r1=0x5533
[r3]=r1
r1=[_i]
r1+=0xf000
[r1]=r2
R1 = 0x0001
[P_Watchdog_Clear]=r1
// JMP L_AD;
retf
//=========================================================================================
//
//=========================================================================================
.public _sendctrlv
_sendctrlv:
r1=PreW_Table
r1+=_i
r1=[r1]
r1=r1 LSL 4 //将AD值移到低10位
r1=r1 LSL 2
[P_DAC1]=R1;
retf;
//=========================================================================================
//
//=========================================================================================
.public _initdisp
_initdisp:
r1=0x0060
[P_SystemClock]=r1 //系统时钟
retf
//=========================================================================================
//
//=========================================================================================
.public _getvalue
_getvalue:
r1=0xf000
r1+=[_j]
r1=[r1]
r2=_tempv
[r2]=r1
retf
//=========================================================================================
//
//=========================================================================================
.public _getvalue1
_getvalue1:
r1=0xf000
r1+=[_n]
r1=[r1]
r2=_val
[r2]=r1
retf
//=========================================================================================
//
//=========================================================================================
.public _sendxy
_sendxy:
r1=[_ctrlVx]
r1=r1 LSL 4 //将AD值移到低10位
r1=r1 LSL 2
r2=[_ctrlVy]
r2=r2 LSL 4 //将AD值移到低10位
r2=r2 LSL 2
[P_DAC1]=R1;
[P_DAC2]=R2;
retf;
//=========================================================================================
//
//=========================================================================================
.public _clearflash
_clearflash:
r3=0xf000
loopflash:
r1=0xaaaa
r2=0x7555
[r2]=r1
r1=0x5511
[r2]=r1
r1=0xb980
[r3] = r1
r3+=0x0100
cmp r3,0xfc00
jnz loopflash
retf;
PreW_Table:
.DW 0x0011,0x0012,0x0014,0x0018
.DW 0x0021,0x0022,0x0024,0x0028
.DW 0x0041,0x0042,0x0044,0x0048
.DW 0x0081,0x0082,0x0084,0x0088
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -