📄 训练项目十三:基于dds芯片ad9851的信号源.lis
字号:
.module _训练项目十三:基于DDS芯片AD9851的信号源.c
.area text(rom, con, rel)
; i -> R20,R21
; uin -> R16,R17
.even
0000 _Delay::
0000 4A93 st -y,R20
0002 5A93 st -y,R21
0004 ; #include"iom128v.h"
0004 ; #include"macros.h"
0004 ;
0004 ; #define SetW_CLK PORTC|=BIT(PC1)
0004 ; #define ClrW_CLK PORTC&=~BIT(PC1)
0004 ; #define SetFQ_UD PORTC|=BIT(PC0)
0004 ; #define ClrFQ_UD PORTC&=~BIT(PC0)
0004 ;
0004 ; void Delay (unsigned int uin)
0004 ; {
0004 ; int i;
0004 ;
0004 ; for(i=0; i<uin; i++) {
0004 4427 clr R20
0006 5527 clr R21
0008 02C0 xjmp L5
000A L2:
000A ; ;
000A ; }
000A L3:
000A 4F5F subi R20,255 ; offset = 1
000C 5F4F sbci R21,255
000E L5:
000E 4017 cp R20,R16
0010 5107 cpc R21,R17
0012 D8F3 brlo L2
0014 X0:
0014 L1:
0014 .dbline 0 ; func end
0014 5991 ld R21,y+
0016 4991 ld R20,y+
0018 0895 ret
001A ; i -> R16,R17
.even
001A _Delay_1ms::
001A ; }
001A ;
001A ; void Delay_1ms (void)
001A ; {
001A ; unsigned int i;
001A ;
001A ; for (i=0; i<2260; i++);
001A 0027 clr R16
001C 1127 clr R17
001E 02C0 xjmp L10
0020 L7:
0020 L8:
0020 0F5F subi R16,255 ; offset = 1
0022 1F4F sbci R17,255
0024 L10:
0024 043D cpi R16,212
0026 E8E0 ldi R30,8
0028 1E07 cpc R17,R30
002A D0F3 brlo L7
002C X1:
002C L6:
002C .dbline 0 ; func end
002C 0895 ret
002E ; i -> R20,R21
002E ; uin -> R10,R11
.even
002E _Delay_nms::
002E 0E940000 xcall push_xgset300C
0032 5801 movw R10,R16
0034 ; }
0034 ;
0034 ; void Delay_nms (unsigned int uin)
0034 ; {
0034 ; unsigned int i=0;
0034 4427 clr R20
0036 5527 clr R21
0038 ;
0038 ; for (i=0;i<uin;i++){
0038 03C0 xjmp L15
003A L12:
003A ; Delay_1ms();
003A EFDF xcall _Delay_1ms
003C ; }
003C L13:
003C 4F5F subi R20,255 ; offset = 1
003E 5F4F sbci R21,255
0040 L15:
0040 4A15 cp R20,R10
0042 5B05 cpc R21,R11
0044 D0F3 brlo L12
0046 X2:
0046 L11:
0046 .dbline 0 ; func end
0046 0C940000 xjmp pop_xgset300C
004A ; i -> R20,R21
004A ; uin -> R10,R11
.even
004A _Delay_ms::
004A 0E940000 xcall push_xgset300C
004E 5801 movw R10,R16
0050 ; }
0050 ;
0050 ; void Delay_ms (unsigned int uin)
0050 ; {
0050 ; int i;
0050 ;
0050 ; for(i=0;i<uin;i++){
0050 4427 clr R20
0052 5527 clr R21
0054 05C0 xjmp L20
0056 L17:
0056 ; Delay_nms(1000);
0056 08EE ldi R16,1000
0058 13E0 ldi R17,3
005A E9DF xcall _Delay_nms
005C ; }
005C L18:
005C 4F5F subi R20,255 ; offset = 1
005E 5F4F sbci R21,255
0060 L20:
0060 4A15 cp R20,R10
0062 5B05 cpc R21,R11
0064 C0F3 brlo L17
0066 X3:
0066 L16:
0066 .dbline 0 ; func end
0066 0C940000 xjmp pop_xgset300C
.even
006A _Init9851::
006A ; }
006A ;
006A ; void Init9851()
006A ; {
006A ; DDRC|=0x03;
006A 84B3 in R24,0x14
006C 8360 ori R24,3
006E 84BB out 0x14,R24
0070 ; DDRB|=0x01;
0070 B89A sbi 0x17,0
0072 ; PORTB=0xff;
0072 8FEF ldi R24,255
0074 88BB out 0x18,R24
0076 ;
0076 ; ClrW_CLK ;
0076 A998 cbi 0x15,1
0078 ; ClrFQ_UD;
0078 A898 cbi 0x15,0
007A ; Delay(2);
007A 02E0 ldi R16,2
007C 10E0 ldi R17,0
007E C0DF xcall _Delay
0080 ;
0080 ; SetW_CLK ;
0080 A99A sbi 0x15,1
0082 ; Delay(2);
0082 02E0 ldi R16,2
0084 10E0 ldi R17,0
0086 BCDF xcall _Delay
0088 ;
0088 ; ClrW_CLK ;
0088 A998 cbi 0x15,1
008A ; Delay(5);
008A 05E0 ldi R16,5
008C 10E0 ldi R17,0
008E B8DF xcall _Delay
0090 ;
0090 ; SetFQ_UD ;
0090 A89A sbi 0x15,0
0092 ; Delay(2);
0092 02E0 ldi R16,2
0094 10E0 ldi R17,0
0096 B4DF xcall _Delay
0098 ;
0098 ; ClrFQ_UD;
0098 A898 cbi 0x15,0
009A L21:
009A .dbline 0 ; func end
009A 0895 ret
009C ; i -> R20
009C ; uldds -> y+1
.even
009C _WriteAD9851::
009C 0E940000 xcall push_arg4
00A0 4A93 st -y,R20
00A2 ; }
00A2 ;
00A2 ; void WriteAD9851 (unsigned long int uldds)
00A2 ; {
00A2 ; unsigned char i;
00A2 ;
00A2 ; ClrW_CLK ;
00A2 A998 cbi 0x15,1
00A4 ; ClrFQ_UD;
00A4 A898 cbi 0x15,0
00A6 ;
00A6 ; for(i=0;i<40;i++){
00A6 4427 clr R20
00A8 1CC0 xjmp L26
00AA L23:
00AA ; ClrW_CLK ;
00AA A998 cbi 0x15,1
00AC ; if(uldds&0x000000001||i==32)
00AC 2980 ldd R2,y+1
00AE 3A80 ldd R3,y+2
00B0 4B80 ldd R4,y+3
00B2 5C80 ldd R5,y+4
00B4 E22D mov R30,R2
00B6 E170 andi R30,1
00B8 11F4 brne L29
00BA X4:
00BA 4032 cpi R20,32
00BC 11F4 brne L27
00BE X5:
00BE L29:
00BE ; PORTB|=0x01;
00BE C09A sbi 0x18,0
00C0 02C0 xjmp L28
00C2 L27:
00C2 ; else
00C2 ; PORTB&=0x00;
00C2 2224 clr R2
00C4 28BA out 0x18,R2
00C6 L28:
00C6 ; SetW_CLK ;
00C6 A99A sbi 0x15,1
00C8 ; uldds=uldds>>1;
00C8 2980 ldd R2,y+1
00CA 3A80 ldd R3,y+2
00CC 4B80 ldd R4,y+3
00CE 5C80 ldd R5,y+4
00D0 5694 lsr R5
00D2 4794 ror R4
00D4 3794 ror R3
00D6 2794 ror R2
00D8 2982 std y+1,R2
00DA 3A82 std y+2,R3
00DC 4B82 std y+3,R4
00DE 5C82 std y+4,R5
00E0 ; }
00E0 L24:
00E0 4395 inc R20
00E2 L26:
00E2 4832 cpi R20,40
00E4 10F3 brlo L23
00E6 X6:
00E6 ; SetFQ_UD ;
00E6 A89A sbi 0x15,0
00E8 ; ClrW_CLK ;
00E8 A998 cbi 0x15,1
00EA ; Delay(5);
00EA 05E0 ldi R16,5
00EC 10E0 ldi R17,0
00EE 88DF xcall _Delay
00F0 ; ClrFQ_UD;
00F0 A898 cbi 0x15,0
00F2 L22:
00F2 .dbline 0 ; func end
00F2 4991 ld R20,y+
00F4 2496 adiw R28,4
00F6 0895 ret
00F8 ; uldds -> y+0
00F8 ; ulfreq -> y+4
.even
00F8 _Write_freq::
00F8 0E940000 xcall push_arg4
00FC 2497 sbiw R28,4
00FE ; }
00FE ;
00FE ; void Write_freq (unsigned long int ulfreq)
00FE ; {
00FE ; unsigned long uldds;
00FE ;
00FE ; uldds=ulfreq*29.82617;
00FE 00E0 ldi R16,<L31
0100 10E0 ldi R17,>L31
0102 0E940000 xcall elpm32
0106 1801 movw R2,R16
0108 2901 movw R4,R18
010A 0C81 ldd R16,y+4
010C 1D81 ldd R17,y+5
010E 2E81 ldd R18,y+6
0110 3F81 ldd R19,y+7
0112 0E940000 xcall ulong2fp
0116 3A93 st -y,R19
0118 2A93 st -y,R18
011A 1A93 st -y,R17
011C 0A93 st -y,R16
011E 8101 movw R16,R2
0120 9201 movw R18,R4
0122 0E940000 xcall fpmule2
0126 0E940000 xcall fpint
012A 0883 std y+0,R16
012C 1983 std y+1,R17
012E 2A83 std y+2,R18
0130 3B83 std y+3,R19
0132 ; WriteAD9851(uldds);
0132 0881 ldd R16,y+0
0134 1981 ldd R17,y+1
0136 2A81 ldd R18,y+2
0138 3B81 ldd R19,y+3
013A B0DF xcall _WriteAD9851
013C L30:
013C .dbline 0 ; func end
013C 2896 adiw R28,8
013E 0895 ret
0140 ; i -> y+0
.even
0140 _main::
0140 2497 sbiw R28,4
0142 ; }
0142 ;
0142 ; void main()
0142 ; {
0142 ; unsigned long i;
0142 ; i=100;
0142 84E6 ldi R24,100
0144 90E0 ldi R25,0
0146 A0E0 ldi R26,0
0148 B0E0 ldi R27,0
014A 8883 std y+0,R24
014C 9983 std y+1,R25
014E AA83 std y+2,R26
0150 BB83 std y+3,R27
0152 ;
0152 ; Init9851 ();
0152 8BDF xcall _Init9851
0154 ; Write_freq (20000000);
0154 00E0 ldi R16,0
0156 1DE2 ldi R17,45
0158 21E3 ldi R18,49
015A 31E0 ldi R19,1
015C CDDF xcall _Write_freq
015E L32:
015E .dbline 0 ; func end
015E 2496 adiw R28,4
0160 0895 ret
.area lit(rom, con, rel)
0000 L31:
0000 FF9BEE41 .word 0x9bff,0x41ee
0004 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -