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

📄 num_led.lst

📁 这是关于AVR单片机学习的初步开发
💻 LST
字号:
__text_start:
__start:
    001B E5CF      LDI	R28,0x5F
    001C E0D4      LDI	R29,4
    001D BFCD      OUT	0x3D,R28
    001E BFDE      OUT	0x3E,R29
    001F 51C0      SUBI	R28,0x10
    0020 40D0      SBCI	R29,0
    0021 EA0A      LDI	R16,0xAA
    0022 8308      STD	Y+0,R16
    0023 2400      CLR	R0
    0024 E6EF      LDI	R30,0x6F
    0025 E0F0      LDI	R31,0
    0026 E010      LDI	R17,0
    0027 36EF      CPI	R30,0x6F
    0028 07F1      CPC	R31,R17
    0029 F011      BEQ	0x002C
    002A 9201      ST	R0,Z+
    002B CFFB      RJMP	0x0027
    002C 8300      STD	Z+0,R16
    002D E2E6      LDI	R30,0x26
    002E E0F0      LDI	R31,0
    002F E6A0      LDI	R26,0x60
    0030 E0B0      LDI	R27,0
    0031 E010      LDI	R17,0
    0032 33E5      CPI	R30,0x35
    0033 07F1      CPC	R31,R17
    0034 F021      BEQ	0x0039
    0035 95C8      LPM
    0036 9631      ADIW	R30,1
    0037 920D      ST	R0,X+
    0038 CFF9      RJMP	0x0032
    0039 D07E      RCALL	_main
_exit:
    003A CFFF      RJMP	_exit
FILE: C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\num_led\num-tiner0.c
(0001) //ICC-AVR application builder : 2005-3-8 下午 04:53:49
(0002) // Target : M8
(0003) // Crystal: 11.059Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) 
(0008) //lednum全局变量
(0009) char lednum = 0;
(0010) char lednum1 = 0;
(0011) char lednum2 = 0;
(0012) char lednum3 = 0;
(0013) char lednum4 = 0;
(0014) //码表
(0015) char num[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0016) 
(0017) 
(0018) void port_init(void)
(0019) {
(0020)  PORTB = 0xFF;
_port_init:
    003B EF8F      LDI	R24,0xFF
    003C BB88      OUT	0x18,R24
(0021)  DDRB  = 0xFF;
    003D BB87      OUT	0x17,R24
(0022)  PORTC = 0x7F; //m103 output only
    003E E78F      LDI	R24,0x7F
    003F BB85      OUT	0x15,R24
(0023)  DDRC  = 0x7F;
    0040 BB84      OUT	0x14,R24
(0024)  PORTD = 0x00;
    0041 2422      CLR	R2
    0042 BA22      OUT	0x12,R2
(0025)  DDRD  = 0xFF;
    0043 EF8F      LDI	R24,0xFF
    0044 BB81      OUT	0x11,R24
(0026) }
    0045 9508      RET
(0027) 
(0028) //TIMER0 initialisation - prescale:1024
(0029) // WGM: Normal
(0030) // desired value: 20mSec
(0031) // actual value: 19.908mSec (0.5%)
(0032) void timer0_init(void)
(0033) {
(0034)   TCCR0 = 0x00; //stop
_timer0_init:
    0046 2422      CLR	R2
    0047 BE23      OUT	0x33,R2
(0035)  TCNT0 = 0x29; //set count
    0048 E289      LDI	R24,0x29
    0049 BF82      OUT	0x32,R24
(0036)  TCCR0 = 0x04; //start timer
    004A E084      LDI	R24,4
    004B BF83      OUT	0x33,R24
(0037) }
    004C 9508      RET
_timer0_ovf_isr:
    004D 922A      ST	R2,-Y
    004E 938A      ST	R24,-Y
    004F 939A      ST	R25,-Y
    0050 B62F      IN	R2,0x3F
    0051 922A      ST	R2,-Y
(0038) 
(0039) #pragma interrupt_handler timer0_ovf_isr:10
(0040) void timer0_ovf_isr(void)
(0041) {
(0042)  TCNT0 = 0x29; //reload counter value
    0052 E289      LDI	R24,0x29
    0053 BF82      OUT	0x32,R24
(0043)  TCCR0 = 0x04; //start timer
    0054 E084      LDI	R24,4
    0055 BF83      OUT	0x33,R24
(0044)  
(0045)  PORTB |= 0x30;
    0056 B388      IN	R24,0x18
    0057 6380      ORI	R24,0x30
    0058 BB88      OUT	0x18,R24
(0046)  PORTC |= 0x30;
    0059 B385      IN	R24,0x15
    005A 6380      ORI	R24,0x30
    005B BB85      OUT	0x15,R24
(0047)  if(lednum == 0)	//更新PB4数码管;
    005C 90200060  LDS	R2,0x60
    005E 2022      TST	R2
    005F F429      BNE	0x0065
(0048)  {	PORTB &= ~0x10;
    0060 98C4      CBI	0x18,4
(0049) 	PORTD = lednum4;
    0061 90200064  LDS	R2,0x64
    0063 BA22      OUT	0x12,R2
(0050)  }
    0064 C016      RJMP	0x007B
(0051)  else if(lednum ==1)	//更新PB5数码管;
    0065 91800060  LDS	R24,0x60
    0067 3081      CPI	R24,1
    0068 F429      BNE	0x006E
(0052)  {	PORTB &= ~0x20;
    0069 98C5      CBI	0x18,5
(0053) 	PORTD = lednum3;
    006A 90200063  LDS	R2,0x63
    006C BA22      OUT	0x12,R2
(0054)  }
    006D C00D      RJMP	0x007B
(0055)  else if(lednum ==2)	//更新PC4数码管;
    006E 91800060  LDS	R24,0x60
    0070 3082      CPI	R24,2
    0071 F429      BNE	0x0077
(0056)  {	PORTC &= ~0x10;
    0072 98AC      CBI	0x15,4
(0057) 	PORTD = lednum2;
    0073 90200062  LDS	R2,0x62
    0075 BA22      OUT	0x12,R2
(0058)  }
    0076 C004      RJMP	0x007B
(0059)  else 	//更新PC5数码管;
(0060)  { 	PORTC &= ~0x20;
    0077 98AD      CBI	0x15,5
(0061) 	PORTD = lednum1;
    0078 90200061  LDS	R2,0x61
    007A BA22      OUT	0x12,R2
(0062)  }
(0063) 
(0064) lednum++;
    007B 91800060  LDS	R24,0x60
    007D 5F8F      SUBI	R24,0xFF
    007E 93800060  STS	0x60,R24
    0080 C005      RJMP	0x0086
(0065) while(lednum >= 4) lednum = lednum - 4;
    0081 91800060  LDS	R24,0x60
    0083 5084      SUBI	R24,4
    0084 93800060  STS	0x60,R24
    0086 91800060  LDS	R24,0x60
    0088 3084      CPI	R24,4
    0089 F7B8      BCC	0x0081
(0066)  
(0067) }
    008A 9029      LD	R2,Y+
    008B BE2F      OUT	0x3F,R2
    008C 9199      LD	R25,Y+
    008D 9189      LD	R24,Y+
    008E 9029      LD	R2,Y+
    008F 9518      RETI
(0068) 
(0069) //call this routine to initialise all peripherals
(0070) void init_devices(void)
(0071) {
(0072)  //stop errant interrupts until set up
(0073)  CLI(); //disable all interrupts
_init_devices:
    0090 94F8      BCLR	7
(0074)  port_init();
    0091 DFA9      RCALL	_port_init
(0075)  timer0_init();
    0092 DFB3      RCALL	_timer0_init
(0076) 
(0077)  MCUCR = 0x00;
    0093 2422      CLR	R2
    0094 BE25      OUT	0x35,R2
(0078)  GICR  = 0x00;
    0095 BE2B      OUT	0x3B,R2
(0079)  TIMSK = 0x01; //timer interrupt sources
    0096 E081      LDI	R24,1
    0097 BF89      OUT	0x39,R24
(0080)  SEI(); //re-enable interrupts
    0098 9478      BSET	7
(0081)  //all peripherals are now initialised
(0082) }
    0099 9508      RET
_delay:
  j                    --> R16
  i                    --> R18
  z                    --> R20
    009A D063      RCALL	push_gset1
(0083) 
(0084) 
(0085) 
(0086) 
(0087) //自定义函数
(0088) void delay(void)
(0089) {
(0090)  unsigned int i,j,z;
(0091)  for(i=0;i<10000;i++);
    009B 2722      CLR	R18
    009C 2733      CLR	R19
    009D C002      RJMP	0x00A0
    009E 5F2F      SUBI	R18,0xFF
    009F 4F3F      SBCI	R19,0xFF
    00A0 3120      CPI	R18,0x10
    00A1 E2E7      LDI	R30,0x27
    00A2 073E      CPC	R19,R30
    00A3 F3D0      BCS	0x009E
(0092)  {	for(j=0;j<10000;j++)
    00A4 2700      CLR	R16
    00A5 2711      CLR	R17
    00A6 C00B      RJMP	0x00B2
(0093)  	{	for(z=0;z<100;z++);}
    00A7 2744      CLR	R20
    00A8 2755      CLR	R21
    00A9 C002      RJMP	0x00AC
    00AA 5F4F      SUBI	R20,0xFF
    00AB 4F5F      SBCI	R21,0xFF
    00AC 3644      CPI	R20,0x64
    00AD E0E0      LDI	R30,0
    00AE 075E      CPC	R21,R30
    00AF F3D0      BCS	0x00AA
    00B0 5F0F      SUBI	R16,0xFF
    00B1 4F1F      SBCI	R17,0xFF
    00B2 3100      CPI	R16,0x10
    00B3 E2E7      LDI	R30,0x27
    00B4 071E      CPC	R17,R30
    00B5 F388      BCS	0x00A7
(0094)  }
(0095) }
    00B6 D04A      RCALL	pop_gset1
    00B7 9508      RET
(0096) 
(0097) void main(void)
(0098) {
(0099)   char i;
(0100)  init_devices();
_main:
  i                    --> R20
    00B8 DFD7      RCALL	_init_devices
    00B9 C042      RJMP	0x00FC
(0101)  
(0102)  while(1)
(0103)  {
(0104) 
(0105)  for(i=0;i<=9;i++)
    00BA 2744      CLR	R20
    00BB C00B      RJMP	0x00C7
(0106)  {	lednum1 = num[i];
    00BC E685      LDI	R24,0x65
    00BD E090      LDI	R25,0
    00BE 2FE4      MOV	R30,R20
    00BF 27FF      CLR	R31
    00C0 0FE8      ADD	R30,R24
    00C1 1FF9      ADC	R31,R25
    00C2 8020      LDD	R2,Z+0
    00C3 92200061  STS	0x61,R2
(0107)  	delay();
    00C5 DFD4      RCALL	_delay
    00C6 9543      INC	R20
    00C7 E089      LDI	R24,0x9
    00C8 1784      CP	R24,R20
    00C9 F790      BCC	0x00BC
(0108)  } 
(0109)  
(0110)   
(0111)  PORTB |= 0x20;//位选2
    00CA 9AC5      SBI	0x18,5
(0112)  for(i=0;i<=9;i++)
    00CB 2744      CLR	R20
    00CC C00B      RJMP	0x00D8
(0113)  {	lednum2 = num[i];
    00CD E685      LDI	R24,0x65
    00CE E090      LDI	R25,0
    00CF 2FE4      MOV	R30,R20
    00D0 27FF      CLR	R31
    00D1 0FE8      ADD	R30,R24
    00D2 1FF9      ADC	R31,R25
    00D3 8020      LDD	R2,Z+0
    00D4 92200062  STS	0x62,R2
(0114)  	delay();
    00D6 DFC3      RCALL	_delay
    00D7 9543      INC	R20
    00D8 E089      LDI	R24,0x9
    00D9 1784      CP	R24,R20
    00DA F790      BCC	0x00CD
(0115)  }
(0116)  
(0117)   
(0118)  PORTC |= 0x10;//位选3
    00DB 9AAC      SBI	0x15,4
(0119)  for(i=0;i<=9;i++)
    00DC 2744      CLR	R20
    00DD C00B      RJMP	0x00E9
(0120)  {	lednum3 = num[i];
    00DE E685      LDI	R24,0x65
    00DF E090      LDI	R25,0
    00E0 2FE4      MOV	R30,R20
    00E1 27FF      CLR	R31
    00E2 0FE8      ADD	R30,R24
    00E3 1FF9      ADC	R31,R25
    00E4 8020      LDD	R2,Z+0
    00E5 92200063  STS	0x63,R2
(0121)  	delay();
    00E7 DFB2      RCALL	_delay
    00E8 9543      INC	R20
    00E9 E089      LDI	R24,0x9
    00EA 1784      CP	R24,R20
    00EB F790      BCC	0x00DE
(0122)  }
(0123)  
(0124)  
(0125)  
(0126)  for(i=0;i<=9;i++)
    00EC 2744      CLR	R20
    00ED C00B      RJMP	0x00F9
(0127)  {	lednum4 = num[i];
    00EE E685      LDI	R24,0x65
    00EF E090      LDI	R25,0
    00F0 2FE4      MOV	R30,R20
    00F1 27FF      CLR	R31
    00F2 0FE8      ADD	R30,R24
    00F3 1FF9      ADC	R31,R25
    00F4 8020      LDD	R2,Z+0
    00F5 92200064  STS	0x64,R2
(0128)  	delay();
    00F7 DFA2      RCALL	_delay
    00F8 9543      INC	R20
    00F9 E089      LDI	R24,0x9
    00FA 1784      CP	R24,R20
    00FB F790      BCC	0x00EE
    00FC CFBD      RJMP	0x00BA
(0129)  }
(0130)  
(0131)  
(0132)  } 
(0133) }
FILE: <library>
    00FD 9508      RET
push_gset1:
    00FE 935A      ST	R21,-Y
    00FF 934A      ST	R20,-Y
    0100 9508      RET
pop_gset1:
    0101 E0E1      LDI	R30,1
pop:
    0102 9149      LD	R20,Y+
    0103 9159      LD	R21,Y+
    0104 FDE0      SBRC	R30,0
    0105 9508      RET
    0106 9169      LD	R22,Y+
    0107 9179      LD	R23,Y+
    0108 FDE1      SBRC	R30,1
    0109 9508      RET
    010A 90A9      LD	R10,Y+
    010B 90B9      LD	R11,Y+
    010C FDE2      SBRC	R30,2
    010D 9508      RET
    010E 90C9      LD	R12,Y+
    010F 90D9      LD	R13,Y+
    0110 FDE3      SBRC	R30,3
    0111 9508      RET
    0112 90E9      LD	R14,Y+
    0113 90F9      LD	R15,Y+
    0114 9508      RET

⌨️ 快捷键说明

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