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

📄 lesson8.lst

📁 基于AVR的模数转换程序。是开发单片机必备的基本技巧。 本程序出自高手之手
💻 LST
字号:
__start:
__text_start:
    0030 E5CF      LDI	R28,0x5F
    0031 E0D4      LDI	R29,4
    0032 BFCD      OUT	P3D,R28
    0033 BFDE      OUT	P3E,R29
    0034 51C0      SUBI	R28,0x10
    0035 40D0      SBCI	R29,0
    0036 EA0A      LDI	R16,0xAA
    0037 8308      STD	R16,0+Y
    0038 2400      CLR	R0
    0039 E6E0      LDI	R30,0x60
    003A E0F0      LDI	R31,0
    003B E010      LDI	R17,0
    003C 36E0      CPI	R30,0x60
    003D 07F1      CPC	R31,R17
    003E F011      BEQ	0x0041
    003F 9201      ST	R0,Z+
    0040 CFFB      RJMP	0x003C
    0041 8300      STD	R16,0+Z
    0042 E6E0      LDI	R30,0x60
    0043 E0F0      LDI	R31,0
    0044 E6A0      LDI	R26,0x60
    0045 E0B0      LDI	R27,0
    0046 E010      LDI	R17,0
    0047 36E0      CPI	R30,0x60
    0048 07F1      CPC	R31,R17
    0049 F021      BEQ	0x004E
    004A 95C8      LPM
    004B 9631      ADIW	R30,1
    004C 920D      ST	R0,X+
    004D CFF9      RJMP	0x0047
    004E 940E00D4  CALL	_main
_exit:
    0050 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0051 D0C4      RCALL	push_gset2
FILE: I:\AVR视频教程\视频教程\lesson8\lesson8\Skey.c
(0001) void delay(uint ms)
(0002) {
(0003)         uint i,j;
(0004) 	for(i=0;i<ms;i++)
    0052 2744      CLR	R20
    0053 2755      CLR	R21
    0054 C00B      RJMP	0x0060
(0005) 	   {
(0006) 	   for(j=0;j<1141;j++);
    0055 2766      CLR	R22
    0056 2777      CLR	R23
    0057 C002      RJMP	0x005A
    0058 5F6F      SUBI	R22,0xFF
    0059 4F7F      SBCI	R23,0xFF
    005A 3765      CPI	R22,0x75
    005B E0E4      LDI	R30,4
    005C 077E      CPC	R23,R30
    005D F3D0      BCS	0x0058
    005E 5F4F      SUBI	R20,0xFF
    005F 4F5F      SBCI	R21,0xFF
    0060 1740      CP	R20,R16
    0061 0751      CPC	R21,R17
    0062 F390      BCS	0x0055
(0007)        }
(0008) }
    0063 D0BA      RCALL	pop_gset2
    0064 9508      RET
(0009) 
(0010) uchar key_press()
(0011) {
(0012)     uchar j;
(0013)     DDRD|=0X0F;
_key_press:
  j                    --> R16
    0065 B381      IN	R24,P11
    0066 608F      ORI	R24,0xF
    0067 BB81      OUT	P11,R24
(0014) 	PORTD|=0X0F;
    0068 B382      IN	R24,P12
    0069 608F      ORI	R24,0xF
    006A BB82      OUT	P12,R24
(0015) 	
(0016) 	DDRD&=0XF0;
    006B B381      IN	R24,P11
    006C 7F80      ANDI	R24,0xF0
    006D BB81      OUT	P11,R24
(0017) 	
(0018) 	j=PIND;
    006E B300      IN	R16,P10
(0019) 	j=j&0X0F;//00001111
    006F 700F      ANDI	R16,0xF
(0020) 	if(j==0X0F)
    0070 300F      CPI	R16,0xF
    0071 F411      BNE	0x0074
(0021) 	{
(0022) 	  return 0;
    0072 2700      CLR	R16
    0073 C001      RJMP	0x0075
(0023) 	}
(0024) 	else
(0025) 	{
(0026) 	 return 1;
    0074 E001      LDI	R16,1
    0075 9508      RET
_key_scan:
  key                  --> R20
    0076 D09F      RCALL	push_gset2
(0027) 	}
(0028) 	
(0029) }
(0030) 
(0031) uchar key_scan()
(0032) {
(0033)     uchar key;
(0034)     delay(10);
    0077 E00A      LDI	R16,0xA
    0078 E010      LDI	R17,0
    0079 DFD7      RCALL	_delay
(0035) 	if(key_press())
    007A DFEA      RCALL	_key_press
    007B 2300      TST	R16
    007C F111      BEQ	0x009F
(0036) 	{
(0037) 	key=PIND;
    007D B340      IN	R20,P10
(0038) 	key&=0X0F;
    007E 704F      ANDI	R20,0xF
(0039) 	switch(key)
    007F 2F64      MOV	R22,R20
    0080 2777      CLR	R23
    0081 3067      CPI	R22,7
    0082 E0E0      LDI	R30,0
    0083 077E      CPC	R23,R30
    0084 F099      BEQ	0x0098
    0085 306B      CPI	R22,0xB
    0086 E0E0      LDI	R30,0
    0087 077E      CPC	R23,R30
    0088 F069      BEQ	0x0096
    0089 306D      CPI	R22,0xD
    008A E0E0      LDI	R30,0
    008B 077E      CPC	R23,R30
    008C F039      BEQ	0x0094
    008D 306E      CPI	R22,0xE
    008E E0E0      LDI	R30,0
    008F 077E      CPC	R23,R30
    0090 F009      BEQ	0x0092
    0091 C008      RJMP	0x009A
(0040) 	{
(0041) 	   case 0X0E: 
(0042) 	       key=0;
    0092 2744      CLR	R20
(0043) 		   break;
    0093 C007      RJMP	0x009B
(0044) 	   case 0X0D:
(0045) 	       key=1;
    0094 E041      LDI	R20,1
(0046) 		   break;
    0095 C005      RJMP	0x009B
(0047) 	   	 case 0X0B: 
(0048) 	       key=2;
    0096 E042      LDI	R20,2
(0049) 		   break;
    0097 C003      RJMP	0x009B
(0050) 	   case 0X07:
(0051) 	       key=3;
    0098 E043      LDI	R20,3
(0052) 		   break; 
    0099 C001      RJMP	0x009B
(0053) 	   default:	
(0054) 	       key=0;     	   
    009A 2744      CLR	R20
(0055) 	}
(0056) 	  while(key_press());
    009B DFC9      RCALL	_key_press
    009C 2300      TST	R16
    009D F7E9      BNE	0x009B
(0057) 	}
    009E C001      RJMP	0x00A0
(0058) 	else
(0059) 	{
(0060) 	  key=0;
    009F 2744      CLR	R20
(0061) 	}
(0062) 	return key;
    00A0 2F04      MOV	R16,R20
    00A1 D07C      RCALL	pop_gset2
    00A2 9508      RET
FILE: I:\AVR视频教程\视频教程\lesson8\lesson8\lesson8.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) #include "Skey.c"
(0006) void spi_init()
(0007) {
(0008)      DDRB|=0XA0;
_spi_init:
    00A3 B387      IN	R24,P17
    00A4 6A80      ORI	R24,0xA0
    00A5 BB87      OUT	P17,R24
(0009) 	 DDRA|=BIT(PA1);
    00A6 9AD1      SBI	P1A,1
(0010) 	 SPCR=0X57;
    00A7 E587      LDI	R24,0x57
    00A8 B98D      OUT	P0D,R24
(0011) }
    00A9 9508      RET
_ad5300:
  temp2                --> R22
  temp1                --> R20
  status               --> R22
  daword               --> R10
    00AA D06F      RCALL	push_gset3
    00AB 2EA0      MOV	R10,R16
(0012) void ad5300(uchar daword)
(0013) {
(0014)     uchar temp1=0,temp2=0,status;
    00AC 2744      CLR	R20
    00AD 2766      CLR	R22
(0015)     temp1|=daword<<4;//1101 1001
    00AE 2D8A      MOV	R24,R10
    00AF 708F      ANDI	R24,0xF
    00B0 9582      SWAP	R24
    00B1 2B48      OR	R20,R24
(0016)     temp2|=daword>>4;
    00B2 2D8A      MOV	R24,R10
    00B3 9582      SWAP	R24
    00B4 708F      ANDI	R24,0xF
    00B5 2B68      OR	R22,R24
(0017) 	
(0018) 	PORTA&=~BIT(PA1);
    00B6 98D9      CBI	P1B,1
(0019) 	SPSR=0;
    00B7 2422      CLR	R2
    00B8 B82E      OUT	P0E,R2
(0020) 	SPDR=temp2;
    00B9 B96F      OUT	P0F,R22
(0021)     do
(0022) 	{
(0023) 	  status=SPSR;
    00BA B16E      IN	R22,P0E
(0024) 	}while(!(status&=0X80));
    00BB 2F86      MOV	R24,R22
    00BC 7880      ANDI	R24,0x80
    00BD 2F68      MOV	R22,R24
    00BE 2388      TST	R24
    00BF F3D1      BEQ	0x00BA
(0025) 	
(0026) 	delay(10);
    00C0 E00A      LDI	R16,0xA
    00C1 E010      LDI	R17,0
    00C2 DF8E      RCALL	_delay
(0027) 	SPSR=0;
    00C3 2422      CLR	R2
    00C4 B82E      OUT	P0E,R2
(0028) 	SPDR=temp1;
    00C5 B94F      OUT	P0F,R20
(0029) 	do
(0030) 	{
(0031) 	  status=SPSR;
    00C6 B16E      IN	R22,P0E
(0032) 	}while(!(status&=0X80));
    00C7 2F86      MOV	R24,R22
    00C8 7880      ANDI	R24,0x80
    00C9 2F68      MOV	R22,R24
    00CA 2388      TST	R24
    00CB F3D1      BEQ	0x00C6
(0033) 	SPSR=0;
    00CC 2422      CLR	R2
    00CD B82E      OUT	P0E,R2
(0034) 	delay(10);
    00CE E00A      LDI	R16,0xA
    00CF E010      LDI	R17,0
    00D0 DF80      RCALL	_delay
(0035) 	PORTA|=BIT(PA1);
    00D1 9AD9      SBI	P1B,1
(0036) } 
    00D2 D04E      RCALL	pop_gset3
    00D3 9508      RET
(0037) void main()
(0038) {
(0039)     uchar i,data=128;
_main:
  data                 --> R20
  i                    --> R10
    00D4 E840      LDI	R20,0x80
(0040)     DDRB=0XFF;
    00D5 EF8F      LDI	R24,0xFF
    00D6 BB87      OUT	P17,R24
(0041) 	spi_init();
    00D7 DFCB      RCALL	_spi_init
(0042) 	ad5300(0);
    00D8 2700      CLR	R16
    00D9 DFD0      RCALL	_ad5300
(0043) 	ad5300(data);
    00DA 2F04      MOV	R16,R20
    00DB DFCE      RCALL	_ad5300
    00DC C020      RJMP	0x00FD
(0044) 	
(0045) 	while(1)
(0046) 	{
(0047) 	   if(key_press())
    00DD DF87      RCALL	_key_press
    00DE 2300      TST	R16
    00DF F0E9      BEQ	0x00FD
(0048) 	   {
(0049) 	      i=key_scan();
    00E0 DF95      RCALL	_key_scan
    00E1 2EA0      MOV	R10,R16
(0050) 		  switch(i)
    00E2 2D6A      MOV	R22,R10
    00E3 2777      CLR	R23
    00E4 3060      CPI	R22,0
    00E5 0767      CPC	R22,R23
    00E6 F069      BEQ	0x00F4
    00E7 3061      CPI	R22,1
    00E8 E0E0      LDI	R30,0
    00E9 077E      CPC	R23,R30
    00EA F059      BEQ	0x00F6
    00EB 3062      CPI	R22,2
    00EC E0E0      LDI	R30,0
    00ED 077E      CPC	R23,R30
    00EE F049      BEQ	0x00F8
    00EF 3063      CPI	R22,3
    00F0 E0E0      LDI	R30,0
    00F1 077E      CPC	R23,R30
    00F2 F039      BEQ	0x00FA
    00F3 C007      RJMP	0x00FB
(0051) 		  {
(0052) 		    case 0:
(0053) 			  data=data+16;
    00F4 5F40      SUBI	R20,0xF0
(0054) 			  break;
    00F5 C005      RJMP	0x00FB
(0055) 			case 1:
(0056) 			  data=data-16;
    00F6 5140      SUBI	R20,0x10
(0057) 			  break;
    00F7 C003      RJMP	0x00FB
(0058) 			case 2:
(0059) 			  data=0;
    00F8 2744      CLR	R20
(0060) 			  break;
    00F9 C001      RJMP	0x00FB
(0061) 			 case 3:
(0062) 			  data=255;
    00FA EF4F      LDI	R20,0xFF
(0063) 			  break;      
(0064) 		  }
(0065) 		  ad5300(data);
    00FB 2F04      MOV	R16,R20
    00FC DFAD      RCALL	_ad5300
    00FD CFDF      RJMP	0x00DD
(0066) 	   }
(0067) 	}
(0068) }FILE: <library>
    00FE 9508      RET
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
push_gset2:
    0116 937A      ST	R23,-Y
    0117 936A      ST	R22,-Y
    0118 940C00FF  JMP	push_gset1
push_gset3:
    011A 92BA      ST	R11,-Y
    011B 92AA      ST	R10,-Y
    011C 940C0116  JMP	push_gset2
pop_gset2:
    011E E0E2      LDI	R30,2
    011F 940C0103  JMP	pop
pop_gset3:
    0121 E0E4      LDI	R30,4
    0122 940C0103  JMP	pop

⌨️ 快捷键说明

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