📄 ad_line.lst
字号:
Sunplus u'nSP Assembler - Ver. 1.14.3.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_Watchdog_Clear 0x7012;
.define P_DAC1 0x7017
.define P_DAC2 0x7016
.DEFINE P_SystemClock 0x7013;
00000000 .ISRAM
00000000 00 00 .VAR RESULT
00000001 00 00 .VAR TIME //Line in select
00000002 00 00 .var value //vol 0 or ffc
00008E9F .CODE
.public _AD_Line;
_AD_Line: .proc
00008E9F 41 92 R1=0x0001
00008EA0 C1 D3 [TIME]=R1//选择LINE0
00008EA1 09 93 F0 00 r1=0x00f0
00008EA3 C2 D3 [value]=r1 //端口送入的值
00008EA4 09 93 FF FF r1=0xffff
00008EA6 19 D3 08 70 [P_IOB_ATTRI]=r1
00008EA8 19 D3 07 70 [P_IOB_DIR]=r1
00008EAA 40 92 r1=0x0000
00008EAB 19 D3 05 70 [P_IOB_DATA]=r1;
00008EAD 41 92 R1 = 0x0001 //允许A/D
00008EAE 19 D3 15 70 [P_ADC_Ctrl] = R1
00008EB0 09 93 A0 00 r1 = 0x00A0;
00008EB2 19 D3 2A 70 [P_DAC_Ctrl] = r1;
00008EB4 40 F0 C9 8E call _InitAD1
00008EB6 41 C2 test r1,0x0001;
00008EB7 0F 5E jz fail;
00008EB8 09 93 FF FF r1=0xffff
00008EBA 19 D3 05 70 [P_IOB_DATA]=r1;
00008EBC 41 92 R1=0x0001
00008EBD C1 D3 [TIME]=R1
00008EBE 09 93 00 FF r1=0xff00
00008EC0 C2 D3 [value]=r1
00008EC1 40 F0 E0 8E call _InitAD2
00008EC3 41 C2 test r1,0x0001;
00008EC4 02 5E jz fail;
00008EC5 41 92 r1 = 0x0001 //success
00008EC6 90 9A retf;
00008EC7 40 92 fail: r1 = 0x0000 //fail
// fiq on
// irq on
00008EC8 90 9A retf;
.endp
.public _InitAD1
_InitAD1:
00008EC9 C1 95 R2=[TIME]
00008ECA 0A C5 80 00 test r2,0x0080
00008ECC 11 4E jNZ NEXT1
00008ECD 1A D5 2B 70 [P_ADC_MUX_Ctrl]=R2
00008ECF 42 95 R2=R2 LSL 1
00008ED0 C1 D5 [TIME]=R2
00008ED1 11 93 2C 70 r1=[P_ADC_MUX_DATA]
_AD1:
00008ED3 11 93 2B 70 r1=[P_ADC_MUX_Ctrl]
00008ED5 09 C3 00 80 test r1,0x8000
00008ED7 45 5E jz _AD1
00008ED8 11 93 2C 70 r1=[P_ADC_MUX_DATA]
00008EDA C2 43 CMP R1,[value]
00008EDB 53 8E jbe _InitAD1
00008EDC 40 92 r1 = 0;
00008EDD 90 9A retf;
// 调用ADC初始化程序
NEXT1:
//成功
00008EDE 41 92 r1 = 0x0001;
00008EDF 90 9A RETF
.public _InitAD2
_InitAD2:
00008EE0 C1 95 R2 = [TIME]
00008EE1 0A C5 80 00 test r2,0x0080
00008EE3 11 4E jNZ NEXT2
00008EE4 1A D5 2B 70 [P_ADC_MUX_Ctrl] = R2
00008EE6 42 95 R2=R2 LSL 1
00008EE7 C1 D5 [TIME]=R2
00008EE8 11 93 2C 70 r1=[P_ADC_MUX_DATA]
_AD2:
00008EEA 11 93 2B 70 r1=[P_ADC_MUX_Ctrl]
00008EEC 09 C3 00 80 test r1,0x8000
00008EEE 45 5E jz _AD2
00008EEF 11 93 2C 70 r1 = [P_ADC_MUX_DATA]
00008EF1 C2 43 CMP R1,[value]
00008EF2 53 1E jae _InitAD2
//shibai
00008EF3 40 92 r1 = 0;
00008EF4 90 9A retf;
// 调用ADC初始化程序
NEXT2:
//成功
00008EF5 41 92 r1 = 0x0001;
00008EF6 90 9A RETF
delay://1ms
00008EF7 90 D4 push r1,r2 to [sp]
00008EF8 41 92 r1 = 1
loop_out:
00008EF9 0A 95 FF 00 r2 = 0x00ff
loop_in:
00008EFB 41 24 r2 -=1
00008EFC 40 44 cmp r2,0x0000
00008EFD 43 4E jnz loop_in;
00008EFE 41 22 r1 -= 1;
00008EFF 40 42 cmp r1,0x0000
00008F00 48 4E jnz loop_out;
00008F01 90 90 pop r1,r2 from [sp]
00008F02 90 9A retf
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -