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

📄 max525.lst

📁 低功耗、四路、12位、电压输出DAC
💻 LST
字号:
__text_start:
__start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E00B1  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: D:\PROGRA~1\icc\include\delay.h
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void)                 //1us延时函数
(0006)   {
(0007)    asm("nop");
_delay_1us:
    004B 0000      NOP
    004C 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    004D 940E00CD  CALL	push_gset2
    004F 01B8      MOVW	R22,R16
(0008)   }
(0009) 
(0010) void delay_nus(unsigned int n)       //N us延时函数
(0011)   {
(0012)    unsigned int i=0;
    0050 2744      CLR	R20
    0051 2755      CLR	R21
(0013)    for (i=0;i<n;i++)
    0052 C003      RJMP	0x0056
(0014)    delay_1us();
    0053 DFF7      RCALL	_delay_1us
    0054 5F4F      SUBI	R20,0xFF
    0055 4F5F      SBCI	R21,0xFF
    0056 1746      CP	R20,R22
    0057 0757      CPC	R21,R23
    0058 F3D0      BCS	0x0053
    0059 940E00C1  CALL	pop_gset2
    005B 9508      RET
(0015)   }
(0016)   
(0017) void delay_1ms(void)                 //1ms延时函数
(0018)   {
(0019)    unsigned int i;
(0020)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    005C 2700      CLR	R16
    005D 2711      CLR	R17
    005E C002      RJMP	0x0061
    005F 5F0F      SUBI	R16,0xFF
    0060 4F1F      SBCI	R17,0xFF
    0061 3704      CPI	R16,0x74
    0062 E0E4      LDI	R30,4
    0063 071E      CPC	R17,R30
    0064 F3D0      BCS	0x005F
    0065 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0066 940E00CD  CALL	push_gset2
    0068 01B8      MOVW	R22,R16
(0021)   }
(0022)   
(0023) void delay_nms(unsigned int n)       //N ms延时函数
(0024)   {
(0025)    unsigned int i=0;
    0069 2744      CLR	R20
    006A 2755      CLR	R21
(0026)    for (i=0;i<n;i++)
    006B C003      RJMP	0x006F
(0027)    delay_1ms();
    006C DFEF      RCALL	_delay_1ms
    006D 5F4F      SUBI	R20,0xFF
    006E 4F5F      SBCI	R21,0xFF
    006F 1746      CP	R20,R22
    0070 0757      CPC	R21,R23
    0071 F3D0      BCS	0x006C
    0072 940E00C1  CALL	pop_gset2
    0074 9508      RET
_Sent_to_max525:
  j                    --> R20
  i                    --> R22
  Data                 --> R10
  Addr                 --> R12
    0075 940E00C9  CALL	push_gset4
    0077 0159      MOVW	R10,R18
    0078 2EC0      MOV	R12,R16
FILE: C:\DOCUME~1\luning\桌面\数控横流源\max525\max525.c
(0001) //ICC-AVR application builder : 2007-8-11 14:36:41
(0002) // Target : M16
(0003) // Crystal: 16.000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include <delay.h>
(0008) 
(0009) ///////////////////////硬件接口/////////////////
(0010) #define DDR         DDRA
(0011) #define PORT        PORTA
(0012) #define PIN         PINA
(0013) ///////////////////控制////////////////////////
(0014) #define CS_525      0
(0015) #define DIN_525     1
(0016) #define SCLK_525    2
(0017) #define	SETBIT(x,y) (x|=(1<<y))      //set bit y in byte x
(0018) #define	CLRBIT(x,y) (x&=(~(1<<y)))   //clear bit y in byte x
(0019) #define	CHKBIT(x,y) (x&(1<<y))       //check bit y in byte x
(0020) /////////////////////////////////////////////// 
(0021) #define Reg_Unchanged    0x0D
(0022) #define Reg_Updated      0X0f
(0023) #define Start_Up_Reg     0x04
(0024) #define Start_Up_Load    0x08
(0025) #define Shutdown         0x0c
(0026) //#define Mode_1           0x0e
(0027) //#define Mode_2           0x0a
(0028) //////////////////////////////////////////////
(0029) 
(0030) void Sent_to_max525(unsigned char Addr,int Data)
(0031) {
(0032)  unsigned char i,j;//temp;
(0033)  CLRBIT(PORT,CS_525);     //CS=0
    0079 98D8      CBI	0x1B,0
(0034)  
(0035)  //CLRBIT(PORT,SCLK_525);
(0036)  //SETBIT(PORT,SCLK_525);
(0037)  ////////////////////////////////////////////////
(0038)  for (i=0;i<4;i++)      //传地址4位
    007A 2766      CLR	R22
    007B C009      RJMP	0x0085
(0039)  {
(0040)    	
(0041)   CLRBIT(PORT,SCLK_525);
    007C 98DA      CBI	0x1B,2
(0042)   
(0043)   if(Addr&0x08)
    007D FEC3      SBRS	R12,3
    007E C002      RJMP	0x0081
(0044)     SETBIT(PORT,DIN_525);
    007F 9AD9      SBI	0x1B,1
    0080 C001      RJMP	0x0082
(0045)   else
(0046)     CLRBIT(PORT,DIN_525);
    0081 98D9      CBI	0x1B,1
(0047)   
(0048)   	
(0049)   SETBIT(PORT,SCLK_525);
    0082 9ADA      SBI	0x1B,2
(0050)   //CLRBIT(PORT,SCLK_525);
(0051)    Addr=Addr<<1;
    0083 0CCC      LSL	R12
    0084 9563      INC	R22
    0085 3064      CPI	R22,4
    0086 F3A8      BCS	0x007C
(0052)  }
(0053) /////////////////////////////////////////////////////
(0054)   for (j=0;j<12;j++)      //传数据12位
    0087 2744      CLR	R20
    0088 C00A      RJMP	0x0093
(0055)  {
(0056)   
(0057)   CLRBIT(PORT,SCLK_525);
    0089 98DA      CBI	0x1B,2
(0058)   
(0059)   if(Data&0x0800)
    008A FEB3      SBRS	R11,3
    008B C002      RJMP	0x008E
(0060)     SETBIT(PORT,DIN_525);
    008C 9AD9      SBI	0x1B,1
    008D C001      RJMP	0x008F
(0061)   else
(0062)     CLRBIT(PORT,DIN_525);
    008E 98D9      CBI	0x1B,1
(0063)    
(0064)   SETBIT(PORT,SCLK_525);
    008F 9ADA      SBI	0x1B,2
(0065)   Data=Data<<1;
    0090 0CAA      LSL	R10
    0091 1CBB      ROL	R11
    0092 9543      INC	R20
    0093 304C      CPI	R20,0xC
    0094 F3A0      BCS	0x0089
(0066)  }
(0067)   
(0068)   SETBIT(PORT,SCLK_525);
    0095 9ADA      SBI	0x1B,2
(0069)   delay_nus(50);
    0096 E302      LDI	R16,0x32
    0097 E010      LDI	R17,0
    0098 DFB4      RCALL	_delay_nus
(0070)   CLRBIT(PORT,SCLK_525);
    0099 98DA      CBI	0x1B,2
(0071)   SETBIT(PORT,CS_525);     //CS=1
    009A 9AD8      SBI	0x1B,0
    009B 940E00C4  CALL	pop_gset4
    009D 9508      RET
(0072) }
(0073) 
(0074) ///////////////////////////////////////////////////////
(0075) void port_init(void)
(0076) {
(0077)  PORTA = 0xff;
_port_init:
    009E EF8F      LDI	R24,0xFF
    009F BB8B      OUT	0x1B,R24
(0078)  DDRA  = 0xff;
    00A0 BB8A      OUT	0x1A,R24
(0079)  PORTB = 0xff;
    00A1 BB88      OUT	0x18,R24
(0080)  DDRB  = 0xff;
    00A2 BB87      OUT	0x17,R24
(0081)  PORTC = 0x00; //m103 output only
    00A3 2422      CLR	R2
    00A4 BA25      OUT	0x15,R2
(0082)  DDRC  = 0x00;
    00A5 BA24      OUT	0x14,R2
(0083)  PORTD = 0x00;
    00A6 BA22      OUT	0x12,R2
(0084)  DDRD  = 0x00;
    00A7 BA21      OUT	0x11,R2
    00A8 9508      RET
(0085) }
(0086) 
(0087) //call this routine to initialize all peripherals
(0088) void init_devices(void)
(0089) {
(0090)  //stop errant interrupts until set up
(0091)  CLI(); //disable all interrupts
_init_devices:
    00A9 94F8      BCLR	7
(0092)  port_init();
    00AA DFF3      RCALL	_port_init
(0093) 
(0094)  MCUCR = 0x00;
    00AB 2422      CLR	R2
    00AC BE25      OUT	0x35,R2
(0095)  GICR  = 0x00;
    00AD BE2B      OUT	0x3B,R2
(0096)  TIMSK = 0x00; //timer interrupt sources
    00AE BE29      OUT	0x39,R2
(0097)  SEI(); //re-enable interrupts
    00AF 9478      BSET	7
    00B0 9508      RET
(0098)  //all peripherals are now initialized
(0099) }
(0100) 
(0101) void main()
(0102) {
(0103) // unsigned char i,Addr=0xaA;
(0104)  init_devices();
_main:
    00B1 DFF7      RCALL	_init_devices
(0105)  //CLI();
(0106)    Sent_to_max525(0x04,0x000);
    00B2 2722      CLR	R18
    00B3 2733      CLR	R19
    00B4 E004      LDI	R16,4
    00B5 DFBF      RCALL	_Sent_to_max525
    00B6 C008      RJMP	0x00BF
(0107) while(1)
(0108)  {
(0109)   //Sent_to_max525(0x08,0x0);
(0110) 
(0111)   
(0112)   Sent_to_max525(0x0f,0xfff);
    00B7 EF2F      LDI	R18,0xFF
    00B8 E03F      LDI	R19,0xF
    00B9 E00F      LDI	R16,0xF
    00BA DFBA      RCALL	_Sent_to_max525
(0113)   Sent_to_max525(0x0f,0x000);
FILE: <library>
    00BB 2722      CLR	R18
    00BC 2733      CLR	R19
    00BD E00F      LDI	R16,0xF
    00BE DFB6      RCALL	_Sent_to_max525
    00BF CFF7      RJMP	0x00B7
    00C0 9508      RET
pop_gset2:
    00C1 E0E2      LDI	R30,2
    00C2 940C00D3  JMP	pop
pop_gset4:
    00C4 E0E8      LDI	R30,0x8
    00C5 940C00D3  JMP	pop
push_gset5:
    00C7 92FA      ST	R15,-Y
    00C8 92EA      ST	R14,-Y
push_gset4:
    00C9 92DA      ST	R13,-Y
    00CA 92CA      ST	R12,-Y
push_gset3:
    00CB 92BA      ST	R11,-Y
    00CC 92AA      ST	R10,-Y
push_gset2:
    00CD 937A      ST	R23,-Y
    00CE 936A      ST	R22,-Y
push_gset1:
    00CF 935A      ST	R21,-Y
    00D0 934A      ST	R20,-Y
    00D1 9508      RET
pop_gset1:
    00D2 E0E1      LDI	R30,1
pop:
    00D3 9149      LD	R20,Y+
    00D4 9159      LD	R21,Y+
    00D5 FDE0      SBRC	R30,0
    00D6 9508      RET
    00D7 9169      LD	R22,Y+
    00D8 9179      LD	R23,Y+
    00D9 FDE1      SBRC	R30,1
    00DA 9508      RET
    00DB 90A9      LD	R10,Y+
    00DC 90B9      LD	R11,Y+
    00DD FDE2      SBRC	R30,2
    00DE 9508      RET
    00DF 90C9      LD	R12,Y+
    00E0 90D9      LD	R13,Y+
    00E1 FDE3      SBRC	R30,3
    00E2 9508      RET
    00E3 90E9      LD	R14,Y+
    00E4 90F9      LD	R15,Y+
    00E5 9508      RET

⌨️ 快捷键说明

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