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

📄 ad.lst

📁 基于AVR的模数转换程序。是开发单片机必备的基本技巧。 本程序出自高手之手
💻 LST
字号:
__start:
__text_start:
    0040 E5CF      LDI	R28,0x5F
    0041 E0D4      LDI	R29,4
    0042 BFCD      OUT	P3D,R28
    0043 BFDE      OUT	P3E,R29
    0044 51C0      SUBI	R28,0x10
    0045 40D0      SBCI	R29,0
    0046 EA0A      LDI	R16,0xAA
    0047 8308      STD	R16,0+Y
    0048 2400      CLR	R0
    0049 E6E0      LDI	R30,0x60
    004A E0F0      LDI	R31,0
    004B E010      LDI	R17,0
    004C 36E0      CPI	R30,0x60
    004D 07F1      CPC	R31,R17
    004E F011      BEQ	0x0051
    004F 9201      ST	R0,Z+
    0050 CFFB      RJMP	0x004C
    0051 8300      STD	R16,0+Z
    0052 E8E0      LDI	R30,0x80
    0053 E0F0      LDI	R31,0
    0054 E6A0      LDI	R26,0x60
    0055 E0B0      LDI	R27,0
    0056 E010      LDI	R17,0
    0057 38E0      CPI	R30,0x80
    0058 07F1      CPC	R31,R17
    0059 F021      BEQ	0x005E
    005A 95C8      LPM
    005B 9631      ADIW	R30,1
    005C 920D      ST	R0,X+
    005D CFF9      RJMP	0x0057
    005E 940E00AB  CALL	_main
_exit:
    0060 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
    0061 D0C0      RCALL	push_gset2
FILE: I:\AVR视频教程\视频教程\lesson8\ad\xianshi.c
(0001)  
(0002) #pragma data:code 
(0003) const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0004) 		           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0005) void delay(uint ms)
(0006) {
(0007)         uint i,j;
(0008) 	for(i=0;i<ms;i++)
    0062 2744      CLR	R20
    0063 2755      CLR	R21
    0064 C00B      RJMP	0x0070
(0009) 	   {
(0010) 	   for(j=0;j<1141;j++);
    0065 2766      CLR	R22
    0066 2777      CLR	R23
    0067 C002      RJMP	0x006A
    0068 5F6F      SUBI	R22,0xFF
    0069 4F7F      SBCI	R23,0xFF
    006A 3765      CPI	R22,0x75
    006B E0E4      LDI	R30,4
    006C 077E      CPC	R23,R30
    006D F3D0      BCS	0x0068
    006E 5F4F      SUBI	R20,0xFF
    006F 4F5F      SBCI	R21,0xFF
    0070 1740      CP	R20,R16
    0071 0751      CPC	R21,R17
    0072 F390      BCS	0x0065
(0011)        }
(0012) }
    0073 D0B2      RCALL	pop_gset2
    0074 9508      RET
_show:
  k                    --> R20
  j                    --> R22
    0075 D0AC      RCALL	push_gset2
    0076 2F42      MOV	R20,R18
    0077 2F60      MOV	R22,R16
(0013) void show(uchar j,uchar k)
(0014) {
(0015)     DDRA|=BIT(3);
    0078 9AD3      SBI	P1A,3
(0016) 	DDRA|=BIT(4);
    0079 9AD4      SBI	P1A,4
(0017) 	DDRB=0XFF;     
    007A EF8F      LDI	R24,0xFF
    007B BB87      OUT	P17,R24
(0018)     PORTA|=BIT(3);
    007C 9ADB      SBI	P1B,3
(0019) 	PORTB=table[j];
    007D E680      LDI	R24,0x60
    007E E090      LDI	R25,0
    007F 2F06      MOV	R16,R22
    0080 2711      CLR	R17
    0081 0F00      LSL	R16
    0082 1F11      ROL	R17
    0083 0F08      ADD	R16,R24
    0084 1F19      ADC	R17,R25
    0085 D0A3      RCALL	lpm16
    0086 BB08      OUT	P18,R16
(0020) 	PORTA&=~BIT(3);
    0087 98DB      CBI	P1B,3
(0021) 	
(0022) 	PORTB=0XFF;
    0088 EF8F      LDI	R24,0xFF
    0089 BB88      OUT	P18,R24
(0023) 	PORTB&=~BIT(k);
    008A E001      LDI	R16,1
    008B 2F14      MOV	R17,R20
    008C D0AA      RCALL	lsl8
    008D 2E20      MOV	R2,R16
    008E 9420      COM	R2
    008F B238      IN	R3,P18
    0090 2032      AND	R3,R2
    0091 BA38      OUT	P18,R3
(0024) 	PORTA|=BIT(4);
    0092 9ADC      SBI	P1B,4
(0025) 	PORTA&=~BIT(4);
    0093 98DC      CBI	P1B,4
(0026) 	delay(1);
    0094 E001      LDI	R16,1
    0095 E010      LDI	R17,0
    0096 DFCA      RCALL	_delay
(0027) }
    0097 D08E      RCALL	pop_gset2
    0098 9508      RET
FILE: I:\AVR视频教程\视频教程\lesson8\ad\ad.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) #include "xianshi.c"
(0006) uint mega16_ad()
(0007) {
(0008)      uint addata;
(0009) 	 DDRA&=~BIT(PA0);
_mega16_ad:
  addata               --> R16
    0099 98D0      CBI	P1A,0
(0010) 	 PORTA&=~BIT(PA0);
    009A 98D8      CBI	P1B,0
(0011) 	 ADMUX=0;
    009B 2422      CLR	R2
    009C B827      OUT	P07,R2
(0012) 	 ADCSR=0X80;
    009D E880      LDI	R24,0x80
    009E B986      OUT	P06,R24
(0013) 	 ADCSR|=BIT(ADSC);
    009F 9A36      SBI	P06,6
(0014) 	 while(!(ADCSR&(BIT(ADIF))));
    00A0 9B34      SBIS	P06,4
    00A1 CFFE      RJMP	0x00A0
(0015)      addata=ADCL;
    00A2 B104      IN	R16,P04
    00A3 2711      CLR	R17
(0016) 	 addata=addata+ADCH*256;
    00A4 B025      IN	R2,P05
    00A5 2433      CLR	R3
    00A6 2C32      MOV	R3,R2
    00A7 2422      CLR	R2
    00A8 0D02      ADD	R16,R2
    00A9 1D13      ADC	R17,R3
(0017) 	 return addata;
    00AA 9508      RET
_main:
  ad                   --> Y+0
  ada                  --> R20
  i                    --> R22
    00AB 9728      SBIW	R28,0x8
(0018) }   
(0019) 
(0020) void main()
(0021) {
    00AC C03F      RJMP	0x00EC
(0022)    uint ada,i,ad[4];
(0023)    while(1)
(0024)    {
(0025)       ada=mega16_ad();//999  0999
    00AD DFEB      RCALL	_mega16_ad
    00AE 2F40      MOV	R20,R16
    00AF 2F51      MOV	R21,R17
(0026) 	  for(i=0;i<4;i++)
    00B0 2766      CLR	R22
    00B1 2777      CLR	R23
    00B2 C01A      RJMP	0x00CD
(0027) 	  {
(0028) 	    ad[3-i]=ada%10;
    00B3 E0E3      LDI	R30,3
    00B4 E0F0      LDI	R31,0
    00B5 1BE6      SUB	R30,R22
    00B6 0BF7      SBC	R31,R23
    00B7 0FEE      LSL	R30
    00B8 1FFF      ROL	R31
    00B9 2F8C      MOV	R24,R28
    00BA 2F9D      MOV	R25,R29
    00BB 0FE8      ADD	R30,R24
    00BC 1FF9      ADC	R31,R25
    00BD E02A      LDI	R18,0xA
    00BE E030      LDI	R19,0
    00BF 2F04      MOV	R16,R20
    00C0 2F15      MOV	R17,R21
    00C1 D02D      RCALL	mod16u
    00C2 8300      STD	R16,0+Z
    00C3 8311      STD	R17,1+Z
(0029) 		ada=ada/10;
    00C4 E02A      LDI	R18,0xA
    00C5 E030      LDI	R19,0
    00C6 2F04      MOV	R16,R20
    00C7 2F15      MOV	R17,R21
    00C8 D028      RCALL	div16u
    00C9 2F40      MOV	R20,R16
    00CA 2F51      MOV	R21,R17
    00CB 5F6F      SUBI	R22,0xFF
    00CC 4F7F      SBCI	R23,0xFF
    00CD 3064      CPI	R22,4
    00CE E0E0      LDI	R30,0
    00CF 077E      CPC	R23,R30
    00D0 F310      BCS	0x00B3
(0030) 	  }
(0031) 	  
(0032) 	  for(i=0;i<4;i++)
    00D1 2766      CLR	R22
    00D2 2777      CLR	R23
    00D3 C014      RJMP	0x00E8
(0033) 	  {
(0034) 	     show(ad[i],i);
    00D4 2F26      MOV	R18,R22
    00D5 2F8C      MOV	R24,R28
    00D6 2F9D      MOV	R25,R29
    00D7 2FE6      MOV	R30,R22
    00D8 2FF7      MOV	R31,R23
    00D9 0FEE      LSL	R30
    00DA 1FFF      ROL	R31
    00DB 0FE8      ADD	R30,R24
    00DC 1FF9      ADC	R31,R25
    00DD 8100      LDD	R16,0+Z
    00DE DF96      RCALL	_show
(0035) 		 delay(2);       DDRA|=BIT(3);
    00DF E002      LDI	R16,2
    00E0 E010      LDI	R17,0
    00E1 DF7F      RCALL	_delay
    00E2 9AD3      SBI	P1A,3
(0036) 	DDRA|=BIT(4);
    00E3 9AD4      SBI	P1A,4
(0037) 	DDRB=0XFF;
    00E4 EF8F      LDI	R24,0xFF
    00E5 BB87      OUT	P17,R24
    00E6 5F6F      SUBI	R22,0xFF
    00E7 4F7F      SBCI	R23,0xFF
    00E8 3064      CPI	R22,4
    00E9 E0E0      LDI	R30,0
    00EA 077E      CPC	R23,R30
    00EB F340      BCS	0x00D4
    00EC CFC0      RJMP	0x00AD
(0038) 	  }
(0039)    }
(0040) }FILE: <library>
    00ED 9628      ADIW	R28,0x8
    00EE 9508      RET
mod16u:
    00EF 9468      BSET	6
    00F0 C001      RJMP	xdiv16u
div16u:
    00F1 94E8      BCLR	6
xdiv16u:
    00F2 92EA      ST	R14,-Y
    00F3 92FA      ST	R15,-Y
    00F4 938A      ST	R24,-Y
    00F5 24EE      CLR	R14
    00F6 24FF      CLR	R15
    00F7 E180      LDI	R24,0x10
    00F8 0F00      LSL	R16
    00F9 1F11      ROL	R17
    00FA 1CEE      ROL	R14
    00FB 1CFF      ROL	R15
    00FC 16E2      CP	R14,R18
    00FD 06F3      CPC	R15,R19
    00FE F018      BCS	0x0102
    00FF 1AE2      SUB	R14,R18
    0100 0AF3      SBC	R15,R19
    0101 9503      INC	R16
    0102 958A      DEC	R24
    0103 F7A1      BNE	0x00F8
    0104 F416      BRTC	0x0107
    0105 2D0E      MOV	R16,R14
    0106 2D1F      MOV	R17,R15
    0107 9189      LD	R24,Y+
    0108 90F9      LD	R15,Y+
    0109 90E9      LD	R14,Y+
    010A 9508      RET
push_gset1:
    010B 935A      ST	R21,-Y
    010C 934A      ST	R20,-Y
    010D 9508      RET
pop_gset1:
    010E E0E1      LDI	R30,1
pop:
    010F 9149      LD	R20,Y+
    0110 9159      LD	R21,Y+
    0111 FDE0      SBRC	R30,0
    0112 9508      RET
    0113 9169      LD	R22,Y+
    0114 9179      LD	R23,Y+
    0115 FDE1      SBRC	R30,1
    0116 9508      RET
    0117 90A9      LD	R10,Y+
    0118 90B9      LD	R11,Y+
    0119 FDE2      SBRC	R30,2
    011A 9508      RET
    011B 90C9      LD	R12,Y+
    011C 90D9      LD	R13,Y+
    011D FDE3      SBRC	R30,3
    011E 9508      RET
    011F 90E9      LD	R14,Y+
    0120 90F9      LD	R15,Y+
    0121 9508      RET
push_gset2:
    0122 937A      ST	R23,-Y
    0123 936A      ST	R22,-Y
    0124 940C010B  JMP	push_gset1
pop_gset2:
    0126 E0E2      LDI	R30,2
    0127 940C010F  JMP	pop
lpm16:
    0129 93EA      ST	R30,-Y
    012A 93FA      ST	R31,-Y
    012B 920A      ST	R0,-Y
    012C 2FE0      MOV	R30,R16
    012D 2FF1      MOV	R31,R17
    012E 95C8      LPM
    012F 2D00      MOV	R16,R0
    0130 9631      ADIW	R30,1
    0131 95C8      LPM
    0132 2D10      MOV	R17,R0
    0133 9009      LD	R0,Y+
    0134 91F9      LD	R31,Y+
    0135 91E9      LD	R30,Y+
    0136 9508      RET
lsl8:
    0137 2311      TST	R17
    0138 F019      BEQ	0x013C
    0139 0F00      LSL	R16
    013A 951A      DEC	R17
    013B CFFB      RJMP	lsl8
    013C 9508      RET

⌨️ 快捷键说明

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