⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 训练项目十三:基于dds芯片ad9851的信号源.lis

📁 长沙理工自己的实验程序
💻 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 + -