ad_line.lst
来自「凌阳科技单片机系统开发板测试程序,可以参考应用。」· LST 代码 · 共 176 行
LST
176 行
Sunplus u'nSP Assembler - Ver. 1.8.1
Listing File Has Been Relocated
//***********************************************************
// Note:通过模拟量输入口LINE_IN输入电压值,以8K的采样率经A/D
//转换后送给IOB口控制LED点亮,同时可以根据LED的点亮来了解转换
//的数据
//*************************************************************
// 时钟源为Fosc/2,采样率为8KHz
.define TIMER_DATA_FOR_8KHZ 0xFA23
.define P_IOB_DATA 0x7005
.define P_IOB_DIR 0x7007
.define P_IOB_ATTRI 0x7008
.define P_INT_Ctrl 0x7010
.define P_INT_CLEAR 0x7011
.define P_TimerA_Ctrl 0x700b
.define P_TimerA_Data 0x700a
.define P_ADC_Ctrl 0x7015
.define P_ADC 0x7014
.define P_ADC_MUX_Ctrl 0x702b
.define P_ADC_MUX_DATA 0x702C
.define P_DAC_Ctrl 0x702A
.define P_DAC1 0x7017
.define P_DAC2 0x7016
00000007 .ISRAM
00000007 00 00 .VAR RESULT
00000008 00 00 .VAR TIME //Line in select
00000009 00 00 .var value //vol 0 or ffc
00008DCC .CODE
.public _AD_Line;
_AD_Line: .proc
00008DCC 41 92 R1=0x0001
00008DCD C8 D3 [TIME]=R1//选择LINE0
00008DCE 09 93 F0 00 r1=0x00f0
00008DD0 C9 D3 [value]=r1 //端口送入的值
00008DD1 09 93 FF FF r1=0xffff
00008DD3 19 D3 08 70 [P_IOB_ATTRI]=r1
00008DD5 19 D3 07 70 [P_IOB_DIR]=r1
00008DD7 40 92 r1=0x0000
00008DD8 19 D3 05 70 [P_IOB_DATA]=r1;
00008DDA 41 92 R1 = 0x0001 //允许A/D
00008DDB 19 D3 15 70 [P_ADC_Ctrl] = R1
00008DDD 09 93 A0 00 r1 = 0x00A0;
00008DDF 19 D3 2A 70 [P_DAC_Ctrl] = r1;
00008DE1 40 F0 F6 8D call _InitAD1
00008DE3 41 C2 test r1,0x0001;
00008DE4 0F 5E jz fail;
00008DE5 09 93 FF FF r1=0xffff
00008DE7 19 D3 05 70 [P_IOB_DATA]=r1;
00008DE9 41 92 R1=0x0001
00008DEA C8 D3 [TIME]=R1
00008DEB 09 93 00 FF r1=0xff00
00008DED C9 D3 [value]=r1
00008DEE 40 F0 0F 8E call _InitAD2
00008DF0 41 C2 test r1,0x0001;
00008DF1 02 5E jz fail;
00008DF2 41 92 r1 = 0x0001 //success
00008DF3 90 9A retf;
00008DF4 40 92 fail: r1 = 0x0000 //fail
// fiq on
// irq on
00008DF5 90 9A retf;
.endp
.public _InitAD1
_InitAD1:
00008DF6 C8 95 R2=[TIME]
00008DF7 0A C5 80 00 test r2,0x0080
00008DF9 13 4E jNZ NEXT1
00008DFA 1A D5 2B 70 [P_ADC_MUX_Ctrl]=R2
00008DFC 42 95 R2=R2 LSL 1
00008DFD C8 D5 [TIME]=R2
00008DFE 00 EE NOP
00008DFF 00 EE NOP
00008E00 11 93 2C 70 r1=[P_ADC_MUX_DATA]
_AD1:
00008E02 11 93 2B 70 r1=[P_ADC_MUX_Ctrl]
00008E04 09 C3 00 80 test r1,0x8000
00008E06 45 5E jz _AD1
00008E07 11 93 2C 70 r1=[P_ADC_MUX_DATA]
00008E09 C9 43 CMP R1,[value]
00008E0A 55 8E jbe _InitAD1
00008E0B 40 92 r1 = 0;
00008E0C 90 9A retf;
// 调用ADC初始化程序
NEXT1:
//成功
00008E0D 41 92 r1 = 0x0001;
00008E0E 90 9A RETF
.public _InitAD2
_InitAD2:
00008E0F C8 95 R2 = [TIME]
00008E10 0A C5 80 00 test r2,0x0080
00008E12 13 4E jNZ NEXT2
00008E13 1A D5 2B 70 [P_ADC_MUX_Ctrl] = R2
00008E15 42 95 R2=R2 LSL 1
00008E16 C8 D5 [TIME]=R2
00008E17 00 EE NOP
00008E18 00 EE NOP
00008E19 11 93 2C 70 r1=[P_ADC_MUX_DATA]
_AD2:
00008E1B 11 93 2B 70 r1=[P_ADC_MUX_Ctrl]
00008E1D 09 C3 00 80 test r1,0x8000
00008E1F 45 5E jz _AD2
00008E20 11 93 2C 70 r1 = [P_ADC_MUX_DATA]
00008E22 C9 43 CMP R1,[value]
00008E23 55 1E jae _InitAD2
//shibai
00008E24 40 92 r1 = 0;
00008E25 90 9A retf;
// 调用ADC初始化程序
NEXT2:
//成功
00008E26 41 92 r1 = 0x0001;
00008E27 90 9A RETF
delay://1ms
00008E28 90 D4 push r1,r2 to [sp]
00008E29 41 92 r1 = 1
loop_out:
00008E2A 0A 95 FF 00 r2 = 0x00ff
loop_in:
00008E2C 41 24 r2 -=1
00008E2D 40 44 cmp r2,0x0000
00008E2E 43 4E jnz loop_in;
00008E2F 41 22 r1 -= 1;
00008E30 40 42 cmp r1,0x0000
00008E31 48 4E jnz loop_out;
00008E32 90 90 pop r1,r2 from [sp]
00008E33 90 9A retf
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?