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

📄 compare.lst

📁 AVRkaifashili.rar
💻 LST
字号:
__start:
__text_start:
    0018 E5CF      LDI	R28,0x5F
    0019 E0D2      LDI	R29,2
    001A BFCD      OUT	0x3D,R28
    001B BFDE      OUT	0x3E,R29
    001C 51C0      SUBI	R28,0x10
    001D 40D0      SBCI	R29,0
    001E EA0A      LDI	R16,0xAA
    001F 8308      STD	Y+0,R16
    0020 2400      CLR	R0
    0021 E6EE      LDI	R30,0x6E
    0022 E0F0      LDI	R31,0
    0023 E010      LDI	R17,0
    0024 37E1      CPI	R30,0x71
    0025 07F1      CPC	R31,R17
    0026 F011      BEQ	0x0029
    0027 9201      ST	R0,Z+
    0028 CFFB      RJMP	0x0024
    0029 8300      STD	Z+0,R16
    002A E2E2      LDI	R30,0x22
    002B E0F0      LDI	R31,0
    002C E6A0      LDI	R26,0x60
    002D E0B0      LDI	R27,0
    002E E010      LDI	R17,0
    002F 33E0      CPI	R30,0x30
    0030 07F1      CPC	R31,R17
    0031 F021      BEQ	0x0036
    0032 95C8      LPM
    0033 9631      ADIW	R30,1
    0034 920D      ST	R0,X+
    0035 CFF9      RJMP	0x002F
    0036 D0E3      RCALL	_main
_exit:
    0037 CFFF      RJMP	_exit
_DelayMs:
  j                    --> R20
  i                    --> R16
    0038 D11E      RCALL	push_gset1
FILE: I:\AVRpractice\BOOK\定时器1\输出比较\Compare.c
(0001) //***************FileName:Capature.C***************//
(0002) //***************ICCAVR V6.30编译*****************//
(0003) 
(0004) #include <io8535v.h>                 
(0005) #define uchar unsigned char
(0006) #define uint  unsigned int
(0007) 
(0008) //数码管字型表,对应0,1,2,3,4,5,6,7,8,9//
(0009) uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0010) uchar Data[4]={0,0,0,1};       //定义初始方波频率:1KHz
(0011) uchar Key1_Flag,Key2_Flag,Key3_Flag;
(0012) 
(0013) void DelayMs(uint i)           //Ms级延时,参数i为延时时间
(0014) {uint j;
(0015)  for(;i!=0;i--)
    0039 C00A      RJMP	0x0044
(0016)   {for(j=8000;j!=0;j--) {;}}
    003A E440      LDI	R20,0x40
    003B E15F      LDI	R21,0x1F
    003C C002      RJMP	0x003F
    003D 5041      SUBI	R20,1
    003E 4050      SBCI	R21,0
    003F 3040      CPI	R20,0
    0040 0745      CPC	R20,R21
    0041 F7D9      BNE	0x003D
    0042 5001      SUBI	R16,1
    0043 4010      SBCI	R17,0
    0044 3000      CPI	R16,0
    0045 0701      CPC	R16,R17
    0046 F799      BNE	0x003A
(0017) }
    0047 D112      RCALL	pop_gset1
    0048 9508      RET
_Display:
  sel                  --> R20
  i                    --> R22
  p                    --> R10
    0049 D127      RCALL	push_gset3
    004A 2EA0      MOV	R10,R16
    004B 2EB1      MOV	R11,R17
(0018) 
(0019) void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
(0020) {uchar i,sel=0x01;           
    004C E041      LDI	R20,1
(0021)  for(i=0;i<4;i++)
    004D 2766      CLR	R22
    004E C017      RJMP	0x0066
(0022)   {PORTA=sel;                  //选通最右边的数码管
    004F BB4B      OUT	0x1B,R20
(0023)    PORTC=0xff-Table[p[i]];          //送字型码
    0050 2FE6      MOV	R30,R22
    0051 27FF      CLR	R31
    0052 0DEA      ADD	R30,R10
    0053 1DFB      ADC	R31,R11
    0054 81E0      LDD	R30,Z+0
    0055 27FF      CLR	R31
    0056 E680      LDI	R24,0x60
    0057 E090      LDI	R25,0
    0058 0FE8      ADD	R30,R24
    0059 1FF9      ADC	R31,R25
    005A 8020      LDD	R2,Z+0
    005B 2433      CLR	R3
    005C EF8F      LDI	R24,0xFF
    005D E090      LDI	R25,0
    005E 1982      SUB	R24,R2
    005F 0993      SBC	R25,R3
    0060 BB85      OUT	0x15,R24
(0024)    DelayMs(1);                 //显示延时    
    0061 E001      LDI	R16,1
    0062 E010      LDI	R17,0
    0063 DFD4      RCALL	_DelayMs
(0025)    sel=sel<<1;                 //移位以显示前一位
    0064 0F44      LSL	R20
    0065 9563      INC	R22
    0066 3064      CPI	R22,4
    0067 F338      BCS	0x004F
(0026)   }
(0027) }
    0068 D0EC      RCALL	pop_gset3
    0069 9508      RET
_Key_Process:
  k                    --> Y+1
  j                    --> Y+1
  i                    --> Y+1
  p                    --> R20
    006A D0EC      RCALL	push_gset1
    006B 2F40      MOV	R20,R16
    006C 2F51      MOV	R21,R17
(0028) 
(0029) void Key_Process(uchar *p)
(0030) {uchar i,j,k;
    006D C006      RJMP	0x0074
(0031)  while((PINB&0x01)==0) {Display(Data);Key1_Flag=1;}                //处理频率百位,最高5
    006E E60A      LDI	R16,0x6A
    006F E010      LDI	R17,0
    0070 DFD8      RCALL	_Display
    0071 E081      LDI	R24,1
    0072 93800070  STS	_Key1_Flag,R24
    0074 9BB0      SBIS	0x16,0
    0075 CFF8      RJMP	0x006E
    0076 C006      RJMP	0x007D
(0032)  while((PINB&0x02)==0) {Display(Data);Key2_Flag=1;}
    0077 E60A      LDI	R16,0x6A
    0078 E010      LDI	R17,0
    0079 DFCF      RCALL	_Display
    007A E081      LDI	R24,1
    007B 9380006F  STS	_Key2_Flag,R24
    007D 9BB1      SBIS	0x16,1
    007E CFF8      RJMP	0x0077
    007F C006      RJMP	0x0086
(0033)  while((PINB&0x04)==0) {Display(Data);Key3_Flag=1;}
    0080 E60A      LDI	R16,0x6A
    0081 E010      LDI	R17,0
    0082 DFC6      RCALL	_Display
    0083 E081      LDI	R24,1
    0084 9380006E  STS	_Key3_Flag,R24
    0086 9BB2      SBIS	0x16,2
    0087 CFF8      RJMP	0x0080
(0034)  if(Key1_Flag==1)
    0088 91800070  LDS	R24,_Key1_Flag
    008A 3081      CPI	R24,1
    008B F4A1      BNE	0x00A0
(0035)    {p[3]++;
    008C 2F84      MOV	R24,R20
    008D 2F95      MOV	R25,R21
    008E 9603      ADIW	R24,3
    008F 2FE8      MOV	R30,R24
    0090 2FF9      MOV	R31,R25
    0091 8180      LDD	R24,Z+0
    0092 5F8F      SUBI	R24,0xFF
    0093 8380      STD	Z+0,R24
(0036) 	if(p[3]==10) p[3]=0;
    0094 2FE4      MOV	R30,R20
    0095 2FF5      MOV	R31,R21
    0096 8183      LDD	R24,Z+3
    0097 308A      CPI	R24,0xA
    0098 F421      BNE	0x009D
    0099 2422      CLR	R2
    009A 2FE4      MOV	R30,R20
    009B 2FF5      MOV	R31,R21
    009C 8223      STD	Z+3,R2
(0037) 	Key1_Flag=0;}   
    009D 2422      CLR	R2
    009E 92200070  STS	_Key1_Flag,R2
(0038)  if(Key2_Flag==1)                 //处理频率十位,最高9
    00A0 9180006F  LDS	R24,_Key2_Flag
    00A2 3081      CPI	R24,1
    00A3 F4A1      BNE	0x00B8
(0039)     {p[2]++;
    00A4 2F84      MOV	R24,R20
    00A5 2F95      MOV	R25,R21
    00A6 9602      ADIW	R24,2
    00A7 2FE8      MOV	R30,R24
    00A8 2FF9      MOV	R31,R25
    00A9 8180      LDD	R24,Z+0
    00AA 5F8F      SUBI	R24,0xFF
    00AB 8380      STD	Z+0,R24
(0040) 	 if(p[2]==10) p[2]=0;
    00AC 2FE4      MOV	R30,R20
    00AD 2FF5      MOV	R31,R21
    00AE 8182      LDD	R24,Z+2
    00AF 308A      CPI	R24,0xA
    00B0 F421      BNE	0x00B5
    00B1 2422      CLR	R2
    00B2 2FE4      MOV	R30,R20
    00B3 2FF5      MOV	R31,R21
    00B4 8222      STD	Z+2,R2
(0041) 	 Key2_Flag=0;}
    00B5 2422      CLR	R2
    00B6 9220006F  STS	_Key2_Flag,R2
(0042)  if(Key3_Flag==1)                 //处理频率各位,最高9
    00B8 9180006E  LDS	R24,_Key3_Flag
    00BA 3081      CPI	R24,1
    00BB F4A1      BNE	0x00D0
(0043)     {p[1]++;
    00BC 2F84      MOV	R24,R20
    00BD 2F95      MOV	R25,R21
    00BE 9601      ADIW	R24,1
    00BF 2FE8      MOV	R30,R24
    00C0 2FF9      MOV	R31,R25
    00C1 8180      LDD	R24,Z+0
    00C2 5F8F      SUBI	R24,0xFF
    00C3 8380      STD	Z+0,R24
(0044) 	 if(p[1]==10) p[1]=0;
    00C4 2FE4      MOV	R30,R20
    00C5 2FF5      MOV	R31,R21
    00C6 8181      LDD	R24,Z+1
    00C7 308A      CPI	R24,0xA
    00C8 F421      BNE	0x00CD
    00C9 2422      CLR	R2
    00CA 2FE4      MOV	R30,R20
    00CB 2FF5      MOV	R31,R21
    00CC 8221      STD	Z+1,R2
(0045) 	 Key3_Flag=0;}
    00CD 2422      CLR	R2
    00CE 9220006E  STS	_Key3_Flag,R2
(0046) }
    00D0 D089      RCALL	pop_gset1
    00D1 9508      RET
_Set_Process:
  i                    --> R20
  j                    --> R20
    00D2 D084      RCALL	push_gset1
(0047) 
(0048) void Set_Process(void)
(0049) {uint i,j;
(0050)  i=Data[0]*1000+Data[1]*100+Data[2]*10+Data[3];
    00D3 9120006B  LDS	R18,0x6B
    00D5 2733      CLR	R19
    00D6 E604      LDI	R16,0x64
    00D7 E010      LDI	R17,0
    00D8 D09B      RCALL	mpy16s
    00D9 2E20      MOV	R2,R16
    00DA 2E31      MOV	R3,R17
    00DB 9120006A  LDS	R18,0x6A
    00DD 2733      CLR	R19
    00DE EE08      LDI	R16,0xE8
    00DF E013      LDI	R17,3
    00E0 D093      RCALL	mpy16s
    00E1 2F40      MOV	R20,R16
    00E2 2F51      MOV	R21,R17
    00E3 0D42      ADD	R20,R2
    00E4 1D53      ADC	R21,R3
    00E5 9120006C  LDS	R18,0x6C
    00E7 2733      CLR	R19
    00E8 E00A      LDI	R16,0xA
    00E9 E010      LDI	R17,0
    00EA D089      RCALL	mpy16s
    00EB 0F40      ADD	R20,R16
    00EC 1F51      ADC	R21,R17
    00ED 9020006D  LDS	R2,0x6D
    00EF 2433      CLR	R3
    00F0 0D42      ADD	R20,R2
    00F1 1D53      ADC	R21,R3
(0051)  j=500/i;
    00F2 EF04      LDI	R16,0xF4
    00F3 E011      LDI	R17,1
    00F4 2F24      MOV	R18,R20
    00F5 2F35      MOV	R19,R21
    00F6 D044      RCALL	div16u
    00F7 2F40      MOV	R20,R16
    00F8 2F51      MOV	R21,R17
(0052)  OCR1AH=j>>8;
    00F9 2E24      MOV	R2,R20
    00FA 2E35      MOV	R3,R21
    00FB 2C23      MOV	R2,R3
    00FC 2433      CLR	R3
    00FD BC2B      OUT	0x2B,R2
(0053)  OCR1AL=j&0x00ff;
    00FE 2F84      MOV	R24,R20
    00FF 2F95      MOV	R25,R21
    0100 7090      ANDI	R25,0
    0101 BD8A      OUT	0x2A,R24
(0054) }
    0102 D057      RCALL	pop_gset1
    0103 9508      RET
(0055) 
(0056) void Init_IO(void)             //初始化I/O口
(0057) {DDRA=0xff;                    //设置A口为推挽1输出
_Init_IO:
    0104 EF8F      LDI	R24,0xFF
    0105 BB8A      OUT	0x1A,R24
(0058)  PORTA=0xff;
    0106 BB8B      OUT	0x1B,R24
(0059)  DDRC=0xff;                    //设置C口为推挽1输出             
    0107 BB84      OUT	0x14,R24
(0060)  PORTC=0xff;
    0108 BB85      OUT	0x15,R24
(0061)  DDRB=0x00;                    //设置B口为三态输入
    0109 2422      CLR	R2
    010A BA27      OUT	0x17,R2
(0062)  PORTB=0x00;
    010B BA28      OUT	0x18,R2
(0063)  DDRD=0xff;                    //设置D口为推挽1输出
    010C BB81      OUT	0x11,R24
(0064)  PORTD=0xff;    
    010D BB82      OUT	0x12,R24
(0065) }
    010E 9508      RET
(0066) 
(0067) void Init_Timer1(void)         //初始化T/C1的输入捕获中断
(0068) {TIMSK=TIMSK|0x10;             //输出比较使能
_Init_Timer1:
    010F B789      IN	R24,0x39
    0110 6180      ORI	R24,0x10
    0111 BF89      OUT	0x39,R24
(0069)  TCCR1B=0x0a;                  //时钟1                                                               频,输出比较匹配清除定时器值
    0112 E08A      LDI	R24,0xA
    0113 BD8E      OUT	0x2E,R24
(0070)  TCNT1H=0x00;                  //清除定时器值
    0114 2422      CLR	R2
    0115 BC2D      OUT	0x2D,R2
(0071)  TCNT1L=0x00;
    0116 BC2C      OUT	0x2C,R2
(0072)  Set_Process();                //OCR1A,OCR1B置初值
    0117 DFBA      RCALL	_Set_Process
(0073)  SREG=SREG|0x80;               //全局中断开
    0118 9478      BSET	7
(0074) } 
    0119 9508      RET
(0075) 
(0076) void main(void)
(0077) {Init_IO();                    //初始化I/O口
_main:
    011A DFE9      RCALL	_Init_IO
(0078)  PORTA=0xff;                   //点亮以测试所有的数码管
    011B EF8F      LDI	R24,0xFF
    011C BB8B      OUT	0x1B,R24
(0079)  PORTC=0x00;   
    011D 2422      CLR	R2
    011E BA25      OUT	0x15,R2
(0080)  Init_Timer1();                
    011F DFEF      RCALL	_Init_Timer1
(0081)  DelayMs(300);                //延时
    0120 E20C      LDI	R16,0x2C
    0121 E011      LDI	R17,1
    0122 DF15      RCALL	_DelayMs
(0082)  PORTC=0xff;                   //熄灭所有的数码管
    0123 EF8F      LDI	R24,0xFF
    0124 BB85      OUT	0x15,R24
    0125 C007      RJMP	0x012D
(0083)  while(1)
(0084)  {Key_Process(Data);
    0126 E60A      LDI	R16,0x6A
    0127 E010      LDI	R17,0
    0128 DF41      RCALL	_Key_Process
(0085)   Set_Process();
    0129 DFA8      RCALL	_Set_Process
(0086)   Display(Data);               //动态扫描显示
    012A E60A      LDI	R16,0x6A
    012B E010      LDI	R17,0
    012C DF1C      RCALL	_Display
    012D CFF8      RJMP	0x0126
(0087)  }
(0088) }
    012E 9508      RET
_Compare:
    012F 922A      ST	R2,-Y
    0130 B62F      IN	R2,0x3F
    0131 922A      ST	R2,-Y
(0089) 
(0090) #pragma interrupt_handler Compare:7
(0091) void Compare(void)
(0092) {PORTD=~PORTD;}
FILE: <library>
    0132 B222      IN	R2,0x12
    0133 9420      COM	R2
    0134 BA22      OUT	0x12,R2
    0135 9029      LD	R2,Y+
    0136 BE2F      OUT	0x3F,R2
    0137 9029      LD	R2,Y+
    0138 9518      RETI
mod16u:
    0139 9468      BSET	6
    013A C001      RJMP	xdiv16u
div16u:
    013B 94E8      BCLR	6
xdiv16u:
    013C 92EA      ST	R14,-Y
    013D 92FA      ST	R15,-Y
    013E 938A      ST	R24,-Y
    013F 24EE      CLR	R14
    0140 24FF      CLR	R15
    0141 E180      LDI	R24,0x10
    0142 0F00      LSL	R16
    0143 1F11      ROL	R17
    0144 1CEE      ROL	R14
    0145 1CFF      ROL	R15
    0146 16E2      CP	R14,R18
    0147 06F3      CPC	R15,R19
    0148 F018      BCS	0x014C
    0149 1AE2      SUB	R14,R18
    014A 0AF3      SBC	R15,R19
    014B 9503      INC	R16
    014C 958A      DEC	R24
    014D F7A1      BNE	0x0142
    014E F416      BRTC	0x0151
    014F 2D0E      MOV	R16,R14
    0150 2D1F      MOV	R17,R15
    0151 9189      LD	R24,Y+
    0152 90F9      LD	R15,Y+
    0153 90E9      LD	R14,Y+
    0154 9508      RET
pop_gset3:
    0155 E0E4      LDI	R30,4
    0156 C004      RJMP	pop
push_gset1:
    0157 935A      ST	R21,-Y
    0158 934A      ST	R20,-Y
    0159 9508      RET
pop_gset1:
    015A E0E1      LDI	R30,1
pop:
    015B 9149      LD	R20,Y+
    015C 9159      LD	R21,Y+
    015D FDE0      SBRC	R30,0
    015E 9508      RET
    015F 9169      LD	R22,Y+
    0160 9179      LD	R23,Y+
    0161 FDE1      SBRC	R30,1
    0162 9508      RET
    0163 90A9      LD	R10,Y+
    0164 90B9      LD	R11,Y+
    0165 FDE2      SBRC	R30,2
    0166 9508      RET
    0167 90C9      LD	R12,Y+
    0168 90D9      LD	R13,Y+
    0169 FDE3      SBRC	R30,3
    016A 9508      RET
    016B 90E9      LD	R14,Y+
    016C 90F9      LD	R15,Y+
    016D 9508      RET
push_gset2:
    016E 937A      ST	R23,-Y
    016F 936A      ST	R22,-Y
    0170 CFE6      RJMP	push_gset1
push_gset3:
    0171 92BA      ST	R11,-Y
    0172 92AA      ST	R10,-Y
    0173 CFFA      RJMP	push_gset2
mpy16s:
    0174 920A      ST	R0,-Y
    0175 921A      ST	R1,-Y
    0176 2400      CLR	R0
    0177 2411      CLR	R1
    0178 3000      CPI	R16,0
    0179 0701      CPC	R16,R17
    017A F041      BEQ	0x0183
    017B 9516      LSR	R17
    017C 9507      ROR	R16
    017D F410      BCC	0x0180
    017E 0E02      ADD	R0,R18
    017F 1E13      ADC	R1,R19
    0180 0F22      LSL	R18
    0181 1F33      ROL	R19
    0182 CFF5      RJMP	0x0178
    0183 2D00      MOV	R16,R0
    0184 2D11      MOV	R17,R1
    0185 9019      LD	R1,Y+
    0186 9009      LD	R0,Y+
    0187 9508      RET

⌨️ 快捷键说明

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