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

📄 ad9852.lst

📁 基于AVR单片机的AD9852的驱动程序
💻 LST
字号:
__start:
__text_start:
    002D E5CF      LDI	R28,0x5F
    002E E0D4      LDI	R29,4
    002F BFCD      OUT	0x3D,R28
    0030 BFDE      OUT	0x3E,R29
    0031 51C0      SUBI	R28,0x10
    0032 40D0      SBCI	R29,0
    0033 EA0A      LDI	R16,0xAA
    0034 8308      STD	Y+0,R16
    0035 2400      CLR	R0
    0036 E6E6      LDI	R30,0x66
    0037 E0F0      LDI	R31,0
    0038 E010      LDI	R17,0
    0039 36E6      CPI	R30,0x66
    003A 07F1      CPC	R31,R17
    003B F011      BEQ	0x003E
    003C 9201      ST	R0,Z+
    003D CFFB      RJMP	0x0039
    003E 8300      STD	Z+0,R16
    003F E5E4      LDI	R30,0x54
    0040 E0F0      LDI	R31,0
    0041 E6A0      LDI	R26,0x60
    0042 E0B0      LDI	R27,0
    0043 E010      LDI	R17,0
    0044 35EA      CPI	R30,0x5A
    0045 07F1      CPC	R31,R17
    0046 F021      BEQ	0x004B
    0047 95C8      LPM
    0048 9631      ADIW	R30,1
    0049 920D      ST	R0,X+
    004A CFF9      RJMP	0x0044
    004B 940E00B5  CALL	_main
_exit:
    004D CFFF      RJMP	_exit
_AD9852_ByteSend:
  i                    --> R20
  dat                  --> R16
    004E 940E00FF  CALL	push_gset1
FILE: D:\RJ\Project\AVR\AD9852\AD9852.h
(0001) #ifndef _AD9852_H_
(0002) #define _AD9852_H_
(0003) #include <iom16v.h>
(0004) 
(0005) #define AD9852_CTRL_DDR		DDRB
(0006) #define AD9852_CTRL_PORT	PORTB
(0007) #define AD9852_CTRL_PIN		PINB
(0008) 
(0009) #define AD9852_MasterReset	0
(0010) #define AD9852_CLKPOWER		2
(0011) #define AD9852_IORESET		5
(0012) #define AD9852_SCLK			3
(0013) #define AD9852_SDIO			6
(0014) #define AD9852_IOUD			7
(0015) 
(0016) #define AD9852_Set_MasterReset() 	AD9852_CTRL_DDR |= (0x01<<AD9852_MasterReset);	AD9852_CTRL_PORT |= (0x01<<AD9852_MasterReset)
(0017) #define AD9852_Clr_MasterReset()  	AD9852_CTRL_DDR |= (0x01<<AD9852_MasterReset);	AD9852_CTRL_PORT &= (~(0x01<<AD9852_MasterReset))
(0018) 
(0019) #define AD9852_Set_CLKPOWER() 	AD9852_CTRL_DDR |= (0x01<<AD9852_CLKPOWER);		AD9852_CTRL_PORT |= (0x01<<AD9852_CLKPOWER)
(0020) #define AD9852_Clr_CLKPOWER()  	AD9852_CTRL_DDR |= (0x01<<AD9852_CLKPOWER);		AD9852_CTRL_PORT &= (~(0x01<<AD9852_CLKPOWER))
(0021) 
(0022) #define AD9852_Set_IORESET() 	AD9852_CTRL_DDR |= (0x01<<AD9852_IORESET);		AD9852_CTRL_PORT |= (0x01<<AD9852_IORESET)
(0023) #define AD9852_Clr_IORESET()  	AD9852_CTRL_DDR |= (0x01<<AD9852_IORESET);		AD9852_CTRL_PORT &= (~(0x01<<AD9852_IORESET))
(0024) 
(0025) #define AD9852_Set_SCLK() 	AD9852_CTRL_DDR |= (0x01<<AD9852_SCLK);		AD9852_CTRL_PORT |= (0x01<<AD9852_SCLK)
(0026) #define AD9852_Clr_SCLK()  	AD9852_CTRL_DDR |= (0x01<<AD9852_SCLK);		AD9852_CTRL_PORT &= (~(0x01<<AD9852_SCLK))
(0027) 
(0028) #define AD9852_Set_SDIO() 	AD9852_CTRL_DDR |= (0x01<<AD9852_SDIO);		AD9852_CTRL_PORT |= (0x01<<AD9852_SDIO)
(0029) #define AD9852_Clr_SDIO()  	AD9852_CTRL_DDR |= (0x01<<AD9852_SDIO);		AD9852_CTRL_PORT &= (~(0x01<<AD9852_SDIO))
(0030) 
(0031) #define AD9852_Set_IOUD() 	AD9852_CTRL_DDR |= (0x01<<AD9852_IOUD);		AD9852_CTRL_PORT |= (0x01<<AD9852_IOUD)
(0032) #define AD9852_Clr_IOUD()  	AD9852_CTRL_DDR |= (0x01<<AD9852_IOUD);		AD9852_CTRL_PORT &= (~(0x01<<AD9852_IOUD))
(0033) 
(0034) void AD9852_DataPost(unsigned char Addr, unsigned char *pDat, unsigned char Len);
(0035) 
(0036) void AD9852_ByteSend(unsigned char dat)
(0037) {
(0038) 	unsigned char i;
(0039) 	for (i=0;i<8;i++)
    0050 2744      CLR	R20
    0051 C00F      RJMP	0x0061
(0040) 	{
(0041) 		AD9852_Clr_SCLK();
    0052 9ABB      SBI	0x17,3
    0053 98C3      CBI	0x18,3
(0042) 		asm("nop");
    0054 0000      NOP
(0043) 		if ( dat & 0x80 )
    0055 FF07      SBRS	R16,7
    0056 C003      RJMP	0x005A
(0044) 		{
(0045) 			AD9852_Set_SDIO();
    0057 9ABE      SBI	0x17,6
    0058 9AC6      SBI	0x18,6
(0046) 		}
    0059 C002      RJMP	0x005C
(0047) 		else
(0048) 		{
(0049) 			AD9852_Clr_SDIO();
    005A 9ABE      SBI	0x17,6
    005B 98C6      CBI	0x18,6
(0050) 		}
(0051) 		asm("nop");
    005C 0000      NOP
(0052) 		AD9852_Set_SCLK();
    005D 9ABB      SBI	0x17,3
    005E 9AC3      SBI	0x18,3
(0053) 		dat <<= 1;
    005F 0F00      LSL	R16
    0060 9543      INC	R20
    0061 3048      CPI	R20,0x8
    0062 F378      BCS	0x0052
    0063 940E0102  CALL	pop_gset1
    0065 9508      RET
FILE: D:\RJ\Project\AVR\AD9852\main.c
(0001) #include <iom16v.h>
(0002) #include "AD9852.h"
(0003) 
(0004) //送入9852的数据缓冲区,初始化为控制寄存器值,使能PLL,5倍频,外部刷新
(0005) unsigned char AD9852_Data[]={0x10,0x45,0x00,0x60,0x00,0x00};	
(0006) 
(0007) void delay_us(unsigned int us)
(0008) {
(0009) 	while (--us);
_delay_us:
  us                   --> R16
    0066 01C8      MOVW	R24,R16
    0067 9701      SBIW	R24,1
    0068 018C      MOVW	R16,R24
    0069 3000      CPI	R16,0
    006A 0701      CPC	R16,R17
    006B F7D1      BNE	0x0066
(0010) 	{
(0011) 		us++;
    006C 5F0F      SUBI	R16,0xFF
    006D 4F1F      SBCI	R17,0xFF
(0012) 		us--;
    006E 5001      SUBI	R16,1
    006F 4010      SBCI	R17,0
(0013) 	}
    0070 9508      RET
_AD9852_DataPost:
  i                    --> R20
  DataLen              --> R22
  pDat                 --> R10
  Addr                 --> R12
    0071 940E00F9  CALL	push_gset4
    0073 0159      MOVW	R10,R18
    0074 2EC0      MOV	R12,R16
    0075 8568      LDD	R22,Y+8
(0014) }
(0015) 
(0016) void AD9852_DataPost(unsigned char Addr, unsigned char *pDat, unsigned char DataLen)
(0017) {
(0018) 	unsigned char i=0;
    0076 2744      CLR	R20
(0019) 	
(0020) 	AD9852_Set_IORESET();
    0077 9ABD      SBI	0x17,5
    0078 9AC5      SBI	0x18,5
(0021) 	asm("nop");
    0079 0000      NOP
(0022) 	AD9852_Clr_IORESET();
    007A 9ABD      SBI	0x17,5
    007B 98C5      CBI	0x18,5
(0023) 	
(0024) 	i=Addr;
    007C 2D4C      MOV	R20,R12
(0025) 	AD9852_ByteSend(i);
    007D 2F04      MOV	R16,R20
    007E DFCF      RCALL	_AD9852_ByteSend
(0026) 
(0027) 	for (i=0;i<DataLen;i++)
    007F 2744      CLR	R20
    0080 C007      RJMP	0x0088
(0028) 	{
(0029) 		AD9852_ByteSend(pDat[i]);
    0081 2FE4      MOV	R30,R20
    0082 27FF      CLR	R31
    0083 0DEA      ADD	R30,R10
    0084 1DFB      ADC	R31,R11
    0085 8100      LDD	R16,Z+0
    0086 DFC7      RCALL	_AD9852_ByteSend
    0087 9543      INC	R20
    0088 1746      CP	R20,R22
    0089 F3B8      BCS	0x0081
(0030) 	}
(0031) 	
(0032) 	AD9852_Set_IOUD();
    008A 9ABF      SBI	0x17,7
    008B 9AC7      SBI	0x18,7
(0033) 	asm("nop");
    008C 0000      NOP
(0034) 	AD9852_Clr_IOUD();
    008D 9ABF      SBI	0x17,7
    008E 98C7      CBI	0x18,7
    008F 940E00F4  CALL	pop_gset4
    0091 9508      RET
_AD9852_Init:
    0092 9721      SBIW	R28,1
(0035) }
(0036) 
(0037) void AD9852_Init()
(0038) {
(0039) 	
(0040) 	AD9852_CTRL_DDR |= ((0x01<<AD9852_IORESET)|(0x01<<AD9852_SCLK)|(0x01<<AD9852_MasterReset)|(0x01<<AD9852_CLKPOWER)|(0x01<<AD9852_IOUD)|(0x01<<AD9852_SDIO));
    0093 B387      IN	R24,0x17
    0094 6E8D      ORI	R24,0xED
    0095 BB87      OUT	0x17,R24
(0041) 	
(0042) 	AD9852_CTRL_PORT &= (~((0x01<<AD9852_CLKPOWER)|(0x01<<AD9852_IOUD)));
    0096 B388      IN	R24,0x18
    0097 778B      ANDI	R24,0x7B
    0098 BB88      OUT	0x18,R24
(0043) 	AD9852_CTRL_PORT |= ((0x01<<AD9852_IORESET)|(0x01<<AD9852_SCLK)|(0x01<<AD9852_MasterReset));
    0099 B388      IN	R24,0x18
    009A 6289      ORI	R24,0x29
    009B BB88      OUT	0x18,R24
(0044) 	
(0045) 	delay_us(500);
    009C EF04      LDI	R16,0xF4
    009D E011      LDI	R17,1
    009E DFC7      RCALL	_delay_us
(0046) 	
(0047) 	AD9852_Clr_MasterReset();		//AD9852复位
    009F 9AB8      SBI	0x17,0
    00A0 98C0      CBI	0x18,0
(0048) 	asm("nop");
    00A1 0000      NOP
(0049) 	AD9852_Set_MasterReset();
    00A2 9AB8      SBI	0x17,0
    00A3 9AC0      SBI	0x18,0
(0050) 	asm("nop");
    00A4 0000      NOP
(0051) 	AD9852_Clr_MasterReset();
    00A5 9AB8      SBI	0x17,0
    00A6 98C0      CBI	0x18,0
(0052) 	asm("nop");	
    00A7 0000      NOP
(0053) 	
(0054) 	AD9852_DataPost(0x07,AD9852_Data,4);		//送入初始控制字
    00A8 E084      LDI	R24,4
    00A9 8388      STD	Y+0,R24
    00AA E620      LDI	R18,0x60
    00AB E030      LDI	R19,0
    00AC E007      LDI	R16,7
    00AD DFC3      RCALL	_AD9852_DataPost
(0055) 	delay_us(1000);
    00AE EE08      LDI	R16,0xE8
    00AF E013      LDI	R17,3
    00B0 DFB5      RCALL	_delay_us
(0056) 	AD9852_Set_CLKPOWER();		//启动晶振
    00B1 9ABA      SBI	0x17,2
    00B2 9AC2      SBI	0x18,2
    00B3 9621      ADIW	R28,1
    00B4 9508      RET
_main:
    00B5 9721      SBIW	R28,1
(0057) }
(0058) 
(0059) int main ()
(0060) {
(0061) 	DDRC = 0xff;
    00B6 EF8F      LDI	R24,0xFF
    00B7 BB84      OUT	0x14,R24
(0062) 	PORTC = 0xff;
    00B8 BB85      OUT	0x15,R24
(0063) 
(0064) 
(0065) 	delay_us(2000);
    00B9 ED00      LDI	R16,0xD0
    00BA E017      LDI	R17,7
    00BB DFAA      RCALL	_delay_us
(0066) 	delay_us(2000);
    00BC ED00      LDI	R16,0xD0
    00BD E017      LDI	R17,7
    00BE DFA7      RCALL	_delay_us
(0067) 	
(0068) 	AD9852_Init();			//AD9852初始化
    00BF DFD2      RCALL	_AD9852_Init
(0069) 	AD9852_DataPost(0x07,AD9852_Data,4);		//送入初始控制字
    00C0 E084      LDI	R24,4
    00C1 8388      STD	Y+0,R24
    00C2 E620      LDI	R18,0x60
    00C3 E030      LDI	R19,0
    00C4 E007      LDI	R16,7
    00C5 DFAB      RCALL	_AD9852_DataPost
(0070) 	delay_us(200);
    00C6 EC08      LDI	R16,0xC8
    00C7 E010      LDI	R17,0
    00C8 DF9D      RCALL	_delay_us
(0071) 	
(0072) 	AD9852_Data[0]=0x0f;	//满幅
    00C9 E08F      LDI	R24,0xF
    00CA 93800060  STS	AD9852_Data,R24
(0073) 	AD9852_Data[1]=0xff;	
    00CC EF8F      LDI	R24,0xFF
    00CD 93800061  STS	AD9852_Data+1,R24
(0074) 	AD9852_DataPost(0x08,AD9852_Data,2);
    00CF E082      LDI	R24,2
    00D0 8388      STD	Y+0,R24
    00D1 E620      LDI	R18,0x60
    00D2 E030      LDI	R19,0
    00D3 E008      LDI	R16,0x8
    00D4 DF9C      RCALL	_AD9852_DataPost
(0075) 	delay_us(200);
    00D5 EC08      LDI	R16,0xC8
    00D6 E010      LDI	R17,0
    00D7 DF8E      RCALL	_delay_us
(0076) 	
(0077) 	AD9852_Data[0]=0x19;		//10M
    00D8 E189      LDI	R24,0x19
    00D9 93800060  STS	AD9852_Data,R24
(0078) 	AD9852_Data[1]=0x99;
    00DB E989      LDI	R24,0x99
    00DC 93800061  STS	AD9852_Data+1,R24
(0079) 	AD9852_Data[2]=0x99;
    00DE 93800062  STS	AD9852_Data+2,R24
(0080) 	AD9852_Data[3]=0x99;
    00E0 93800063  STS	AD9852_Data+3,R24
(0081) 	AD9852_Data[4]=0x99;
    00E2 93800064  STS	0x64,R24
(0082) 	AD9852_Data[5]=0x99;
    00E4 93800065  STS	0x65,R24
(0083) 	AD9852_DataPost(0x02,AD9852_Data,6);
    00E6 E086      LDI	R24,6
    00E7 8388      STD	Y+0,R24
    00E8 E620      LDI	R18,0x60
    00E9 E030      LDI	R19,0
    00EA E002      LDI	R16,2
    00EB DF85      RCALL	_AD9852_DataPost
(0084) 	delay_us(200);
    00EC EC08      LDI	R16,0xC8
    00ED E010      LDI	R17,0
    00EE DF77      RCALL	_delay_us
(0085) 	while (1);
    00EF CFFF      RJMP	0x00EF
(0086) 	return 0;
FILE: <library>
    00F0 2700      CLR	R16
    00F1 2711      CLR	R17
    00F2 9621      ADIW	R28,1
    00F3 9508      RET
pop_gset4:
    00F4 E0E8      LDI	R30,0x8
    00F5 940C0103  JMP	pop
push_gset5:
    00F7 92FA      ST	R15,-Y
    00F8 92EA      ST	R14,-Y
push_gset4:
    00F9 92DA      ST	R13,-Y
    00FA 92CA      ST	R12,-Y
push_gset3:
    00FB 92BA      ST	R11,-Y
    00FC 92AA      ST	R10,-Y
push_gset2:
    00FD 937A      ST	R23,-Y
    00FE 936A      ST	R22,-Y
push_gset1:
    00FF 935A      ST	R21,-Y
    0100 934A      ST	R20,-Y
    0101 9508      RET
pop_gset1:
    0102 E0E1      LDI	R30,1
pop:
    0103 9149      LD	R20,Y+
    0104 9159      LD	R21,Y+
    0105 FDE0      SBRC	R30,0
    0106 9508      RET
    0107 9169      LD	R22,Y+
    0108 9179      LD	R23,Y+
    0109 FDE1      SBRC	R30,1
    010A 9508      RET
    010B 90A9      LD	R10,Y+
    010C 90B9      LD	R11,Y+
    010D FDE2      SBRC	R30,2
    010E 9508      RET
    010F 90C9      LD	R12,Y+
    0110 90D9      LD	R13,Y+
    0111 FDE3      SBRC	R30,3
    0112 9508      RET
    0113 90E9      LD	R14,Y+
    0114 90F9      LD	R15,Y+
    0115 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -