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

📄 demo.lst

📁 一个关于AVR单片机的例程
💻 LST
字号:
__start:
__text_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 940E00DE  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: C:\DOCUME~1\administrator\桌面\教程\DEMO\delay.c
(0001) /**********************************
(0002) ** file_name delay.c             **
(0003) ** describe  软件延时函数        **
(0004) ** auther    古欣 www.avrvi.com  **
(0005) ** Time      2007-1-31           **
(0006) ***********************************/
(0007) #include "config.h"
(0008) /***********************
(0009) ** 8M晶振下 1us
(0010) ** 也可以宏定义 8个asm("nop");
(0011) ** #define delay_1us asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
(0012) ***********************/
(0013) void delay_1us(void)
(0014) {
(0015)  asm("nop");
_delay_1us:
    004B 0000      NOP
    004C 9508      RET
(0016) }
(0017) 
(0018) /***********************
(0019) **8M时为 1000.25us
(0020) **4M时为 999.5us
(0021) **xtal 为晶振频率,单位为Mhz
(0022) ************************/
(0023) void delay_1ms(void)
(0024) {
(0025)  unsigned int i;
(0026)  for(i=(xtal*143-2);i>0;i--)
_delay_1ms:
  i                    --> R16
    004D E706      LDI	R16,0x76
    004E E014      LDI	R17,4
    004F C002      RJMP	0x0052
    0050 5001      SUBI	R16,1
    0051 4010      SBCI	R17,0
    0052 3000      CPI	R16,0
    0053 0701      CPC	R16,R17
    0054 F7D9      BNE	0x0050
    0055 9508      RET
_delay_1s:
  i                    --> R20
    0056 940E00EB  CALL	push_gset1
(0027)   ;
(0028) }
(0029) 
(0030) /***********************
(0031) ** 1S延时,误差可能稍大
(0032) ** 250ms*4=1000ms
(0033) ************************/
(0034) void delay_1s(void)
(0035) {
(0036)  unsigned int i;
(0037)    for(i=250;i>0;i--)   //250ms*4=1000ms
    0058 EF4A      LDI	R20,0xFA
    0059 E050      LDI	R21,0
    005A C003      RJMP	0x005E
(0038)    delay_1ms();
    005B DFF1      RCALL	_delay_1ms
    005C 5041      SUBI	R20,1
    005D 4050      SBCI	R21,0
    005E 3040      CPI	R20,0
    005F 0745      CPC	R20,R21
    0060 F7D1      BNE	0x005B
(0039)    for(i=250;i>0;i--)
    0061 EF4A      LDI	R20,0xFA
    0062 E050      LDI	R21,0
    0063 C003      RJMP	0x0067
(0040)    delay_1ms();
    0064 DFE8      RCALL	_delay_1ms
    0065 5041      SUBI	R20,1
    0066 4050      SBCI	R21,0
    0067 3040      CPI	R20,0
    0068 0745      CPC	R20,R21
    0069 F7D1      BNE	0x0064
(0041)    for(i=250;i>0;i--)
    006A EF4A      LDI	R20,0xFA
    006B E050      LDI	R21,0
    006C C003      RJMP	0x0070
(0042)    delay_1ms();
    006D DFDF      RCALL	_delay_1ms
    006E 5041      SUBI	R20,1
    006F 4050      SBCI	R21,0
    0070 3040      CPI	R20,0
    0071 0745      CPC	R20,R21
    0072 F7D1      BNE	0x006D
(0043)    for(i=250;i>0;i--)
    0073 EF4A      LDI	R20,0xFA
    0074 E050      LDI	R21,0
    0075 C003      RJMP	0x0079
(0044)    delay_1ms();
    0076 DFD6      RCALL	_delay_1ms
    0077 5041      SUBI	R20,1
    0078 4050      SBCI	R21,0
    0079 3040      CPI	R20,0
    007A 0745      CPC	R20,R21
    007B F7D1      BNE	0x0076
    007C 940E00EE  CALL	pop_gset1
    007E 9508      RET
_delay_us:
  i                    --> R20
  n                    --> R22
    007F 940E00E9  CALL	push_gset2
    0081 01B8      MOVW	R22,R16
(0045) }
(0046) 
(0047) /***********************
(0048) **微秒级延时
(0049) ************************/
(0050) void delay_us(unsigned int n)
(0051) {
(0052)  unsigned int i;
(0053)  for(i=n;i>0;i--)
    0082 01AB      MOVW	R20,R22
    0083 C003      RJMP	0x0087
(0054)  delay_1us();
    0084 DFC6      RCALL	_delay_1us
    0085 5041      SUBI	R20,1
    0086 4050      SBCI	R21,0
    0087 3040      CPI	R20,0
    0088 0745      CPC	R20,R21
    0089 F7D1      BNE	0x0084
    008A 940E00E0  CALL	pop_gset2
    008C 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    008D 940E00E9  CALL	push_gset2
    008F 01B8      MOVW	R22,R16
(0055) }
(0056) 
(0057) /***********************
(0058) **毫秒级延时
(0059) ************************/
(0060) void delay_ms(unsigned int n)
(0061) {
(0062)  unsigned int i;
(0063)  for(i=n;i>0;i--)
    0090 01AB      MOVW	R20,R22
    0091 C003      RJMP	0x0095
(0064)  delay_1ms();
    0092 DFBA      RCALL	_delay_1ms
    0093 5041      SUBI	R20,1
    0094 4050      SBCI	R21,0
    0095 3040      CPI	R20,0
    0096 0745      CPC	R20,R21
    0097 F7D1      BNE	0x0092
    0098 940E00E0  CALL	pop_gset2
    009A 9508      RET
_delay_s:
  j                    --> R20
  i                    --> R22
  n                    --> R22
    009B 940E00E9  CALL	push_gset2
    009D 01B8      MOVW	R22,R16
(0065) }
(0066) 
(0067) /***********************
(0068) **秒级延时,太浪费资源,不建议使用
(0069) ************************/
(0070) void delay_s(unsigned int n)
(0071) {
(0072)  unsigned int i,j;
(0073)  for(j=n;j>0;j--)
    009E 01AB      MOVW	R20,R22
    009F C026      RJMP	0x00C6
(0074)   {
(0075)    for(i=250;i>0;i--)   //250ms*4=1000ms
    00A0 EF6A      LDI	R22,0xFA
    00A1 E070      LDI	R23,0
    00A2 C003      RJMP	0x00A6
(0076)    delay_1ms();
    00A3 DFA9      RCALL	_delay_1ms
    00A4 5061      SUBI	R22,1
    00A5 4070      SBCI	R23,0
    00A6 3060      CPI	R22,0
    00A7 0767      CPC	R22,R23
    00A8 F7D1      BNE	0x00A3
(0077)    for(i=250;i>0;i--)
    00A9 EF6A      LDI	R22,0xFA
    00AA E070      LDI	R23,0
    00AB C003      RJMP	0x00AF
(0078)    delay_1ms();
    00AC DFA0      RCALL	_delay_1ms
    00AD 5061      SUBI	R22,1
    00AE 4070      SBCI	R23,0
    00AF 3060      CPI	R22,0
    00B0 0767      CPC	R22,R23
    00B1 F7D1      BNE	0x00AC
(0079)    for(i=250;i>0;i--)
    00B2 EF6A      LDI	R22,0xFA
    00B3 E070      LDI	R23,0
    00B4 C003      RJMP	0x00B8
(0080)    delay_1ms();
    00B5 DF97      RCALL	_delay_1ms
    00B6 5061      SUBI	R22,1
    00B7 4070      SBCI	R23,0
    00B8 3060      CPI	R22,0
    00B9 0767      CPC	R22,R23
    00BA F7D1      BNE	0x00B5
(0081)    for(i=250;i>0;i--)
    00BB EF6A      LDI	R22,0xFA
    00BC E070      LDI	R23,0
    00BD C003      RJMP	0x00C1
(0082)    delay_1ms();
    00BE DF8E      RCALL	_delay_1ms
    00BF 5061      SUBI	R22,1
    00C0 4070      SBCI	R23,0
    00C1 3060      CPI	R22,0
    00C2 0767      CPC	R22,R23
    00C3 F7D1      BNE	0x00BE
    00C4 5041      SUBI	R20,1
    00C5 4050      SBCI	R21,0
    00C6 3040      CPI	R20,0
    00C7 0745      CPC	R20,R21
    00C8 F6B9      BNE	0x00A0
    00C9 940E00E0  CALL	pop_gset2
    00CB 9508      RET
FILE: C:\DOCUME~1\administrator\桌面\教程\DEMO\main.c
(0001) // ICC-AVR application builder : 2007-2-14 21:34:00
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004) // 工程DEMO
(0005) 
(0006) #include "config.h"
(0007) 
(0008) void port_init(void)
(0009) {
(0010)  PORTA = 0x00;
_port_init:
    00CC 2422      CLR	R2
    00CD BA2B      OUT	0x1B,R2
(0011)  DDRA  = 0x00;
    00CE BA2A      OUT	0x1A,R2
(0012)  PORTB = 0x00;
    00CF BA28      OUT	0x18,R2
(0013)  DDRB  = 0x00;
    00D0 BA27      OUT	0x17,R2
(0014)  PORTC = 0x00; //m103 output only
    00D1 BA25      OUT	0x15,R2
(0015)  DDRC  = 0x00;
    00D2 BA24      OUT	0x14,R2
(0016)  PORTD = 0x00;
    00D3 BA22      OUT	0x12,R2
(0017)  DDRD  = 0x00;
    00D4 BA21      OUT	0x11,R2
    00D5 9508      RET
(0018) }
(0019) 
(0020) //call this routine to initialize all peripherals
(0021) void init_devices(void)
(0022) {
(0023)  //stop errant interrupts until set up
(0024)  CLI(); //disable all interrupts
_init_devices:
    00D6 94F8      BCLR	7
(0025)  port_init();
    00D7 DFF4      RCALL	_port_init
(0026) 
(0027)  MCUCR = 0x00;
    00D8 2422      CLR	R2
    00D9 BE25      OUT	0x35,R2
(0028)  GICR  = 0x00;
    00DA BE2B      OUT	0x3B,R2
(0029)  TIMSK = 0x00; //timer interrupt sources
    00DB BE29      OUT	0x39,R2
(0030)  SEI(); //re-enable interrupts
    00DC 9478      BSET	7
    00DD 9508      RET
(0031)  //all peripherals are now initialized
(0032) }
(0033) 
(0034) void main(void)
(0035) {
(0036)  unsigned int temp1;
(0037)  while(1)
FILE: <library>
_main:
  temp1                --> Y+1
    00DE CFFF      RJMP	_main
    00DF 9508      RET
pop_gset2:
    00E0 E0E2      LDI	R30,2
    00E1 940C00EF  JMP	pop
push_gset5:
    00E3 92FA      ST	R15,-Y
    00E4 92EA      ST	R14,-Y
push_gset4:
    00E5 92DA      ST	R13,-Y
    00E6 92CA      ST	R12,-Y
push_gset3:
    00E7 92BA      ST	R11,-Y
    00E8 92AA      ST	R10,-Y
push_gset2:
    00E9 937A      ST	R23,-Y
    00EA 936A      ST	R22,-Y
push_gset1:
    00EB 935A      ST	R21,-Y
    00EC 934A      ST	R20,-Y
    00ED 9508      RET
pop_gset1:
    00EE E0E1      LDI	R30,1
pop:
    00EF 9149      LD	R20,Y+
    00F0 9159      LD	R21,Y+
    00F1 FDE0      SBRC	R30,0
    00F2 9508      RET
    00F3 9169      LD	R22,Y+
    00F4 9179      LD	R23,Y+
    00F5 FDE1      SBRC	R30,1
    00F6 9508      RET
    00F7 90A9      LD	R10,Y+
    00F8 90B9      LD	R11,Y+
    00F9 FDE2      SBRC	R30,2
    00FA 9508      RET
    00FB 90C9      LD	R12,Y+
    00FC 90D9      LD	R13,Y+
    00FD FDE3      SBRC	R30,3
    00FE 9508      RET
    00FF 90E9      LD	R14,Y+
    0100 90F9      LD	R15,Y+
    0101 9508      RET

⌨️ 快捷键说明

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