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

📄 dac.lst

📁 AVR单片机DAC范例程序
💻 LST
字号:
__start:
__text_start:
    0000 CFFF      RJMP	__start
    0001 E0D2      LDI	R29,2
    0002 BFCD      OUT	P3D,R28
    0003 BFDE      OUT	P3E,R29
    0004 51C0      SUBI	R28,0x10
    0005 40D0      SBCI	R29,0
    0006 EA0A      LDI	R16,0xAA
    0007 8308      STD	R16,0+Y
    0008 2400      CLR	R0
    0009 E6E0      LDI	R30,0x60
    000A E0F0      LDI	R31,0
    000B E010      LDI	R17,0
    000C 36E0      CPI	R30,0x60
    000D 07F1      CPC	R31,R17
    000E F011      BEQ	0x0011
    000F 9201      ST	R0,Z+
    0010 CFFB      RJMP	0x000C
    0011 8300      STD	R16,0+Z
    0012 E0E0      LDI	R30,0
    0013 E0F0      LDI	R31,0
    0014 E6A0      LDI	R26,0x60
    0015 E0B0      LDI	R27,0
    0016 E010      LDI	R17,0
    0017 30E0      CPI	R30,0
    0018 07F1      CPC	R31,R17
    0019 F021      BEQ	0x001E
    001A 95C8      LPM
    001B 9631      ADIW	R30,1
    001C 920D      ST	R0,X+
    001D CFF9      RJMP	0x0017
    001E D084      RCALL	_main
_exit:
    001F CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0020 D0C4      RCALL	push_gset2
FILE: C:\icc\examples.avr\mypractice\DAC_prj\DAC.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) //#include "Skey.c"
(0006) 
(0007) void delay(uint ms)
(0008) {
(0009)         uint i,j;
(0010) 	for(i=0;i<ms;i++)
    0021 2744      CLR	R20
    0022 2755      CLR	R21
    0023 C00B      RJMP	0x002F
(0011) 	   {
(0012) 	   for(j=0;j<1141;j++);
    0024 2766      CLR	R22
    0025 2777      CLR	R23
    0026 C002      RJMP	0x0029
    0027 5F6F      SUBI	R22,0xFF
    0028 4F7F      SBCI	R23,0xFF
    0029 3765      CPI	R22,0x75
    002A E0E4      LDI	R30,4
    002B 077E      CPC	R23,R30
    002C F3D0      BCS	0x0027
    002D 5F4F      SUBI	R20,0xFF
    002E 4F5F      SBCI	R21,0xFF
    002F 1740      CP	R20,R16
    0030 0751      CPC	R21,R17
    0031 F390      BCS	0x0024
(0013)        }
(0014) }
    0032 D0B8      RCALL	pop_gset2
    0033 9508      RET
(0015) 
(0016) uchar key_press()
(0017) {
(0018)     uchar j;
(0019)     DDRD|=0X0F;
_key_press:
  j                    --> R16
    0034 B381      IN	R24,P11
    0035 608F      ORI	R24,0xF
    0036 BB81      OUT	P11,R24
(0020) 	PORTD|=0X0F;
    0037 B382      IN	R24,P12
    0038 608F      ORI	R24,0xF
    0039 BB82      OUT	P12,R24
(0021) 	
(0022) 	DDRD&=0XF0;
    003A B381      IN	R24,P11
    003B 7F80      ANDI	R24,0xF0
    003C BB81      OUT	P11,R24
(0023) 	
(0024) 	j=PIND;
    003D B300      IN	R16,P10
(0025) 	j=j&0X0F;//00001111
    003E 700F      ANDI	R16,0xF
(0026) 	if(j==0X0F)
    003F 300F      CPI	R16,0xF
    0040 F411      BNE	0x0043
(0027) 	{
(0028) 	  return 0;
    0041 2700      CLR	R16
    0042 C001      RJMP	0x0044
(0029) 	}
(0030) 	else
(0031) 	{
(0032) 	 return 1;
    0043 E001      LDI	R16,1
    0044 9508      RET
_key_scan:
  key                  --> R20
    0045 D09F      RCALL	push_gset2
(0033) 	}
(0034) 	
(0035) }
(0036) 
(0037) uchar key_scan()
(0038) {
(0039)     uchar key;
(0040)     delay(10);
    0046 E00A      LDI	R16,0xA
    0047 E010      LDI	R17,0
    0048 DFD7      RCALL	_delay
(0041) 	if(key_press())
    0049 DFEA      RCALL	_key_press
    004A 2300      TST	R16
    004B F111      BEQ	0x006E
(0042) 	{
(0043) 	key=PIND;
    004C B340      IN	R20,P10
(0044) 	key&=0X0F;
    004D 704F      ANDI	R20,0xF
(0045) 	switch(key)
    004E 2F64      MOV	R22,R20
    004F 2777      CLR	R23
    0050 3067      CPI	R22,7
    0051 E0E0      LDI	R30,0
    0052 077E      CPC	R23,R30
    0053 F099      BEQ	0x0067
    0054 306B      CPI	R22,0xB
    0055 E0E0      LDI	R30,0
    0056 077E      CPC	R23,R30
    0057 F069      BEQ	0x0065
    0058 306D      CPI	R22,0xD
    0059 E0E0      LDI	R30,0
    005A 077E      CPC	R23,R30
    005B F039      BEQ	0x0063
    005C 306E      CPI	R22,0xE
    005D E0E0      LDI	R30,0
    005E 077E      CPC	R23,R30
    005F F009      BEQ	0x0061
    0060 C008      RJMP	0x0069
(0046) 	{
(0047) 	   case 0X0E: 
(0048) 	       key=0;
    0061 2744      CLR	R20
(0049) 		   break;
    0062 C007      RJMP	0x006A
(0050) 	   case 0X0D:
(0051) 	       key=1;
    0063 E041      LDI	R20,1
(0052) 		   break;
    0064 C005      RJMP	0x006A
(0053) 	   	 case 0X0B: 
(0054) 	       key=2;
    0065 E042      LDI	R20,2
(0055) 		   break;
    0066 C003      RJMP	0x006A
(0056) 	   case 0X07:
(0057) 	       key=3;
    0067 E043      LDI	R20,3
(0058) 		   break; 
    0068 C001      RJMP	0x006A
(0059) 	   default:	
(0060) 	       key=0;     	   
    0069 2744      CLR	R20
(0061) 	}
(0062) 	  while(key_press());
    006A DFC9      RCALL	_key_press
    006B 2300      TST	R16
    006C F7E9      BNE	0x006A
(0063) 	}
    006D C001      RJMP	0x006F
(0064) 	else
(0065) 	{
(0066) 	  key=0;
    006E 2744      CLR	R20
(0067) 	}
(0068) 	return key;
    006F 2F04      MOV	R16,R20
    0070 D07A      RCALL	pop_gset2
    0071 9508      RET
(0069) }
(0070) 
(0071) void spi_init()
(0072) {
(0073)      DDRB|=0XA0;
_spi_init:
    0072 B387      IN	R24,P17
    0073 6A80      ORI	R24,0xA0
    0074 BB87      OUT	P17,R24
(0074) 	 DDRA|=BIT(PA1);
    0075 9AD1      SBI	P1A,1
(0075) 	 SPCR=0X57;
    0076 E587      LDI	R24,0x57
    0077 B98D      OUT	P0D,R24
(0076) }
    0078 9508      RET
_ad5300:
  temp2                --> R22
  temp1                --> R20
  status               --> R22
  daword               --> R10
    0079 D06E      RCALL	push_gset3
    007A 2EA0      MOV	R10,R16
(0077) void ad5300(uchar daword)
(0078) {
(0079)     uchar temp1=0,temp2=0,status;
    007B 2744      CLR	R20
    007C 2766      CLR	R22
(0080)     temp1|=daword<<4;//1101 1001
    007D 2D8A      MOV	R24,R10
    007E 708F      ANDI	R24,0xF
    007F 9582      SWAP	R24
    0080 2B48      OR	R20,R24
(0081)     temp2|=daword>>4;
    0081 2D8A      MOV	R24,R10
    0082 9582      SWAP	R24
    0083 708F      ANDI	R24,0xF
    0084 2B68      OR	R22,R24
(0082) 	
(0083) 	PORTA&=~BIT(PA1);
    0085 98D9      CBI	P1B,1
(0084) 	SPSR=0;
    0086 2422      CLR	R2
    0087 B82E      OUT	P0E,R2
(0085) 	SPDR=temp2;
    0088 B96F      OUT	P0F,R22
(0086)     do
(0087) 	{
(0088) 	  status=SPSR;
    0089 B16E      IN	R22,P0E
(0089) 	}while(!(status&=0X80));
    008A 2F86      MOV	R24,R22
    008B 7880      ANDI	R24,0x80
    008C 2F68      MOV	R22,R24
    008D 2388      TST	R24
    008E F3D1      BEQ	0x0089
(0090) 	
(0091) 	delay(10);
    008F E00A      LDI	R16,0xA
    0090 E010      LDI	R17,0
    0091 DF8E      RCALL	_delay
(0092) 	SPSR=0;
    0092 2422      CLR	R2
    0093 B82E      OUT	P0E,R2
(0093) 	SPDR=temp1;
    0094 B94F      OUT	P0F,R20
(0094) 	do
(0095) 	{
(0096) 	  status=SPSR;
    0095 B16E      IN	R22,P0E
(0097) 	}while(!(status&=0X80));
    0096 2F86      MOV	R24,R22
    0097 7880      ANDI	R24,0x80
    0098 2F68      MOV	R22,R24
    0099 2388      TST	R24
    009A F3D1      BEQ	0x0095
(0098) 	SPSR=0;
    009B 2422      CLR	R2
    009C B82E      OUT	P0E,R2
(0099) 	delay(10);
    009D E00A      LDI	R16,0xA
    009E E010      LDI	R17,0
    009F DF80      RCALL	_delay
(0100) 	PORTA|=BIT(PA1);
    00A0 9AD9      SBI	P1B,1
(0101) } 
    00A1 D04B      RCALL	pop_gset3
    00A2 9508      RET
(0102) void main()
(0103) {
(0104)     uchar i,data=128;
_main:
  data                 --> R20
  i                    --> R10
    00A3 E840      LDI	R20,0x80
(0105)     DDRB=0XFF;
    00A4 EF8F      LDI	R24,0xFF
    00A5 BB87      OUT	P17,R24
(0106) 	spi_init();
    00A6 DFCB      RCALL	_spi_init
(0107) 	ad5300(0);
    00A7 2700      CLR	R16
    00A8 DFD0      RCALL	_ad5300
(0108) 	ad5300(data);
    00A9 2F04      MOV	R16,R20
    00AA DFCE      RCALL	_ad5300
    00AB C020      RJMP	0x00CC
(0109) 	
(0110) 	while(1)
(0111) 	{
(0112) 	   if(key_press())
    00AC DF87      RCALL	_key_press
    00AD 2300      TST	R16
    00AE F0E9      BEQ	0x00CC
(0113) 	   {
(0114) 	      i=key_scan();
    00AF DF95      RCALL	_key_scan
    00B0 2EA0      MOV	R10,R16
(0115) 		  switch(i)
    00B1 2D6A      MOV	R22,R10
    00B2 2777      CLR	R23
    00B3 3060      CPI	R22,0
    00B4 0767      CPC	R22,R23
    00B5 F069      BEQ	0x00C3
    00B6 3061      CPI	R22,1
    00B7 E0E0      LDI	R30,0
    00B8 077E      CPC	R23,R30
    00B9 F059      BEQ	0x00C5
    00BA 3062      CPI	R22,2
    00BB E0E0      LDI	R30,0
    00BC 077E      CPC	R23,R30
    00BD F049      BEQ	0x00C7
    00BE 3063      CPI	R22,3
    00BF E0E0      LDI	R30,0
    00C0 077E      CPC	R23,R30
    00C1 F039      BEQ	0x00C9
    00C2 C007      RJMP	0x00CA
(0116) 		  {
(0117) 		    case 0:
(0118) 			  data=data+16;
    00C3 5F40      SUBI	R20,0xF0
(0119) 			  break;
    00C4 C005      RJMP	0x00CA
(0120) 			case 1:
(0121) 			  data=data-16;
    00C5 5140      SUBI	R20,0x10
(0122) 			  break;
    00C6 C003      RJMP	0x00CA
(0123) 			case 2:
(0124) 			  data=0;
    00C7 2744      CLR	R20
(0125) 			  break;
    00C8 C001      RJMP	0x00CA
(0126) 			 case 3:
(0127) 			  data=255;
    00C9 EF4F      LDI	R20,0xFF
(0128) 			  break;      
(0129) 		  }
(0130) 		  ad5300(data);
    00CA 2F04      MOV	R16,R20
    00CB DFAD      RCALL	_ad5300
    00CC CFDF      RJMP	0x00AC
(0131) 	   }
(0132) 	}
(0133) }FILE: <library>
    00CD 9508      RET
push_gset1:
    00CE 935A      ST	R21,-Y
    00CF 934A      ST	R20,-Y
    00D0 9508      RET
pop_gset1:
    00D1 E0E1      LDI	R30,1
pop:
    00D2 9149      LD	R20,Y+
    00D3 9159      LD	R21,Y+
    00D4 FDE0      SBRC	R30,0
    00D5 9508      RET
    00D6 9169      LD	R22,Y+
    00D7 9179      LD	R23,Y+
    00D8 FDE1      SBRC	R30,1
    00D9 9508      RET
    00DA 90A9      LD	R10,Y+
    00DB 90B9      LD	R11,Y+
    00DC FDE2      SBRC	R30,2
    00DD 9508      RET
    00DE 90C9      LD	R12,Y+
    00DF 90D9      LD	R13,Y+
    00E0 FDE3      SBRC	R30,3
    00E1 9508      RET
    00E2 90E9      LD	R14,Y+
    00E3 90F9      LD	R15,Y+
    00E4 9508      RET
push_gset2:
    00E5 937A      ST	R23,-Y
    00E6 936A      ST	R22,-Y
    00E7 CFE6      RJMP	push_gset1
push_gset3:
    00E8 92BA      ST	R11,-Y
    00E9 92AA      ST	R10,-Y
    00EA CFFA      RJMP	push_gset2
pop_gset2:
    00EB E0E2      LDI	R30,2
    00EC CFE5      RJMP	pop
pop_gset3:
    00ED E0E4      LDI	R30,4
    00EE CFE3      RJMP	pop

⌨️ 快捷键说明

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