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

📄 timer1.lst

📁 avr单片机与flash存储器通信程序,调试通过,希望对大家有所帮助.
💻 LST
字号:
__start:
__text_start:
    001B E5CF      LDI	R28,0x5F
    001C E0D2      LDI	R29,2
    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 E6E3      LDI	R30,0x63
    0025 E0F0      LDI	R31,0
    0026 E010      LDI	R17,0
    0027 36E3      CPI	R30,0x63
    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 E3E2      LDI	R30,0x32
    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 D057      RCALL	_main
_exit:
    003A CFFF      RJMP	_exit
FILE: C:\ATMega8515\定时实验\init.c
(0001) //ICC-AVR application builder : 2006-4-27 19:45:18
(0002) // Target : M8515
(0003) // Crystal: 11.059Mhz
(0004) 
(0005) #include <iom8515v.h>
(0006) #include <macros.h>
(0007) 
(0008) void port_init(void)
(0009) {
(0010)  PORTA = 0x00;
_port_init:
    003B 2422      CLR	R2
    003C BA2B      OUT	0x1B,R2
(0011)  DDRA  = 0xFF;
    003D EF8F      LDI	R24,0xFF
    003E BB8A      OUT	0x1A,R24
(0012)  PORTB = 0x00;
    003F BA28      OUT	0x18,R2
(0013)  DDRB  = 0x00;
    0040 BA27      OUT	0x17,R2
(0014)  PORTC = 0x00;
    0041 BA25      OUT	0x15,R2
(0015)  DDRC  = 0xC0;
    0042 EC80      LDI	R24,0xC0
    0043 BB84      OUT	0x14,R24
(0016)  PORTD = 0x00;
    0044 BA22      OUT	0x12,R2
(0017)  DDRD  = 0x00; 
    0045 BA21      OUT	0x11,R2
(0018)  PORTE = 0x00;
    0046 B827      OUT	0x07,R2
(0019)  DDRE  = 0x00; 
    0047 B826      OUT	0x06,R2
    0048 9508      RET
(0020) }
(0021) 
(0022) //TIMER1 initialize - prescale:1
(0023) // WGM: 0) Normal, TOP=0xFFFF
(0024) // desired value: 1mSec
(0025) // actual value:  1.000mSec (0.0%)
(0026) void timer1_init(void)
(0027) {
(0028)  TCCR1B = 0x00; //stop
_timer1_init:
    0049 2422      CLR	R2
    004A BC2E      OUT	0x2E,R2
(0029)  TCNT1H = 0xD4; //setup
    004B ED84      LDI	R24,0xD4
    004C BD8D      OUT	0x2D,R24
(0030)  TCNT1L = 0xCE;
    004D EC8E      LDI	R24,0xCE
    004E BD8C      OUT	0x2C,R24
(0031)  OCR1AH = 0x2B;
    004F E28B      LDI	R24,0x2B
    0050 BD8B      OUT	0x2B,R24
(0032)  OCR1AL = 0x32;
    0051 E382      LDI	R24,0x32
    0052 BD8A      OUT	0x2A,R24
(0033)  OCR1BH = 0x2B;
    0053 E28B      LDI	R24,0x2B
    0054 BD89      OUT	0x29,R24
(0034)  OCR1BL = 0x32;
    0055 E382      LDI	R24,0x32
    0056 BD88      OUT	0x28,R24
(0035)  TCCR1A = 0x00;
    0057 BC2F      OUT	0x2F,R2
(0036)  TCCR1B = 0x01; //start Timer
    0058 E081      LDI	R24,1
    0059 BD8E      OUT	0x2E,R24
    005A 9508      RET
_timer1_ovf_isr:
    005B 922A      ST	R2,-Y
    005C 923A      ST	R3,-Y
    005D 938A      ST	R24,-Y
    005E 939A      ST	R25,-Y
    005F 93EA      ST	R30,-Y
    0060 B62F      IN	R2,0x3F
    0061 922A      ST	R2,-Y
(0037) }
(0038) 
(0039) unsigned int count=0;
(0040) extern unsigned char flag;
(0041) #pragma interrupt_handler timer1_ovf_isr:7
(0042) void timer1_ovf_isr(void)
(0043) {
(0044)  TCNT1H = 0xD4; //reload counter high value
    0062 ED84      LDI	R24,0xD4
    0063 BD8D      OUT	0x2D,R24
(0045)  TCNT1L = 0xCE; //reload counter low value
    0064 EC8E      LDI	R24,0xCE
    0065 BD8C      OUT	0x2C,R24
(0046)  //计算1000次,一共1S
(0047)  if(count++==1000){count=0;flag=1;}
    0066 90200060  LDS	R2,count
    0068 90300061  LDS	R3,count+1
    006A 01C1      MOVW	R24,R2
    006B 9601      ADIW	R24,1
    006C 93900061  STS	count+1,R25
    006E 93800060  STS	count,R24
    0070 01C1      MOVW	R24,R2
    0071 3E88      CPI	R24,0xE8
    0072 E0E3      LDI	R30,3
    0073 079E      CPC	R25,R30
    0074 F449      BNE	0x007E
    0075 2422      CLR	R2
    0076 2433      CLR	R3
    0077 92300061  STS	count+1,R3
    0079 92200060  STS	count,R2
    007B E081      LDI	R24,1
    007C 93800062  STS	flag,R24
    007E 9029      LD	R2,Y+
    007F BE2F      OUT	0x3F,R2
    0080 91E9      LD	R30,Y+
    0081 9199      LD	R25,Y+
    0082 9189      LD	R24,Y+
    0083 9039      LD	R3,Y+
    0084 9029      LD	R2,Y+
    0085 9518      RETI
(0048) }
(0049) 
(0050) //call this routine to initialize all peripherals
(0051) void init_devices(void)
(0052) {
(0053)  //stop errant interrupts until set up
(0054)  CLI(); //disable all interrupts
_init_devices:
    0086 94F8      BCLR	7
(0055)  port_init();
    0087 DFB3      RCALL	_port_init
(0056)  timer1_init();
    0088 DFC0      RCALL	_timer1_init
(0057) 
(0058)  MCUCR = 0x00;
    0089 2422      CLR	R2
    008A BE25      OUT	0x35,R2
(0059)  EMCUCR = 0x00;
    008B BE26      OUT	0x36,R2
(0060)  GICR = 0x00;
    008C BE2B      OUT	0x3B,R2
(0061)  TIMSK = 0x80;
    008D E880      LDI	R24,0x80
    008E BF89      OUT	0x39,R24
(0062)  SEI(); //re-enable interrupts
    008F 9478      BSET	7
    0090 9508      RET
FILE: C:\ATMega8515\定时实验\main.c
(0001) #include <iom8515v.h>
(0002) #include"ForATmega8515.h"
(0003) 
(0004) 
(0005) void delay(uint ticks);
(0006) void display(uchar left,uchar right);
(0007) uchar flag=0;
(0008) 
(0009) void main()
(0010) {
(0011)  uchar count=0;
_main:
  count                --> R20
    0091 2744      CLR	R20
(0012)  init_devices();
    0092 DFF3      RCALL	_init_devices
    0093 C016      RJMP	0x00AA
(0013)  
(0014)  while(1)
(0015)  {
(0016)   display(count/10,count%10);
    0094 E01A      LDI	R17,0xA
    0095 2F04      MOV	R16,R20
    0096 D042      RCALL	mod8u
    0097 2F20      MOV	R18,R16
    0098 E01A      LDI	R17,0xA
    0099 2F04      MOV	R16,R20
    009A D040      RCALL	div8u
    009B D01E      RCALL	_display
(0017)   if(flag)
    009C 90200062  LDS	R2,flag
    009E 2022      TST	R2
    009F F051      BEQ	0x00AA
(0018)   {
(0019)    if(count++==99)count=0;
    00A0 2E24      MOV	R2,R20
    00A1 2433      CLR	R3
    00A2 5F4F      SUBI	R20,0xFF
    00A3 2D82      MOV	R24,R2
    00A4 3683      CPI	R24,0x63
    00A5 F409      BNE	0x00A7
    00A6 2744      CLR	R20
(0020)    flag=0;
    00A7 2422      CLR	R2
    00A8 92200062  STS	flag,R2
    00AA CFE9      RJMP	0x0094
    00AB 9508      RET
_delay:
  i                    --> R20
  ticks                --> R16
    00AC D04E      RCALL	push_gset1
(0021)   }
(0022)  }
(0023) }
(0024) 
(0025) void delay(uint ticks)
(0026) {
(0027)  uchar i;
(0028)  for(;ticks!=0;ticks--)for(i=200;i!=0;i--);
    00AD C007      RJMP	0x00B5
    00AE EC48      LDI	R20,0xC8
    00AF C001      RJMP	0x00B1
    00B0 954A      DEC	R20
    00B1 2344      TST	R20
    00B2 F7E9      BNE	0x00B0
    00B3 5001      SUBI	R16,1
    00B4 4010      SBCI	R17,0
    00B5 3000      CPI	R16,0
    00B6 0701      CPC	R16,R17
    00B7 F7B1      BNE	0x00AE
    00B8 D045      RCALL	pop_gset1
    00B9 9508      RET
_display:
  right                --> R20
  left                 --> R22
    00BA D03E      RCALL	push_gset2
    00BB 2F42      MOV	R20,R18
    00BC 2F60      MOV	R22,R16
(0029) }
(0030) 
(0031) void display(uchar left,uchar right)
(0032) {
(0033)  PORTA=Tab[left];//查表显示数码管
    00BD E282      LDI	R24,0x22
    00BE E090      LDI	R25,0
    00BF 2FE6      MOV	R30,R22
    00C0 27FF      CLR	R31
    00C1 0FE8      ADD	R30,R24
    00C2 1FF9      ADC	R31,R25
    00C3 91E4      LPM	R30,0(Z)
    00C4 BBEB      OUT	0x1B,R30
(0034)  PORTC&=~SEG0;  //选通左边的数码管
    00C5 98AF      CBI	0x15,7
(0035)  delay(1);		//延时
    00C6 E001      LDI	R16,1
    00C7 E010      LDI	R17,0
    00C8 DFE3      RCALL	_delay
(0036)  PORTC|=SEG0;   //关左边的数码管
    00C9 9AAF      SBI	0x15,7
(0037)  PORTA=Tab[right];//查表显示数码管
    00CA E282      LDI	R24,0x22
    00CB E090      LDI	R25,0
    00CC 2FE4      MOV	R30,R20
    00CD 27FF      CLR	R31
    00CE 0FE8      ADD	R30,R24
    00CF 1FF9      ADC	R31,R25
    00D0 91E4      LPM	R30,0(Z)
    00D1 BBEB      OUT	0x1B,R30
(0038)  PORTC&=~SEG1;		//选通右边的数码管			  
    00D2 98AE      CBI	0x15,6
(0039)  delay(1);
    00D3 E001      LDI	R16,1
    00D4 E010      LDI	R17,0
    00D5 DFD6      RCALL	_delay
(0040)  PORTC|=SEG1;    //关右边的数码管
FILE: <library>
    00D6 9AAE      SBI	0x15,6
    00D7 D019      RCALL	pop_gset2
    00D8 9508      RET
mod8u:
    00D9 9468      BSET	6
    00DA C001      RJMP	xdiv8u
div8u:
    00DB 94E8      BCLR	6
xdiv8u:
    00DC 932A      ST	R18,-Y
    00DD 92FA      ST	R15,-Y
    00DE 92EA      ST	R14,-Y
    00DF 24FF      CLR	R15
    00E0 24EE      CLR	R14
    00E1 E120      LDI	R18,0x10
    00E2 0F00      LSL	R16
    00E3 1CFF      ROL	R15
    00E4 1CEE      ROL	R14
    00E5 16E1      CP	R14,R17
    00E6 F010      BCS	0x00E9
    00E7 1AE1      SUB	R14,R17
    00E8 9503      INC	R16
    00E9 952A      DEC	R18
    00EA F7B9      BNE	0x00E2
    00EB F40E      BRTC	0x00ED
    00EC 2D0E      MOV	R16,R14
    00ED 90E9      LD	R14,Y+
    00EE 90F9      LD	R15,Y+
    00EF 9129      LD	R18,Y+
    00F0 9508      RET
pop_gset2:
    00F1 E0E2      LDI	R30,2
    00F2 C00C      RJMP	pop
push_gset5:
    00F3 92FA      ST	R15,-Y
    00F4 92EA      ST	R14,-Y
push_gset4:
    00F5 92DA      ST	R13,-Y
    00F6 92CA      ST	R12,-Y
push_gset3:
    00F7 92BA      ST	R11,-Y
    00F8 92AA      ST	R10,-Y
push_gset2:
    00F9 937A      ST	R23,-Y
    00FA 936A      ST	R22,-Y
push_gset1:
    00FB 935A      ST	R21,-Y
    00FC 934A      ST	R20,-Y
    00FD 9508      RET
pop_gset1:
    00FE E0E1      LDI	R30,1
pop:
    00FF 9149      LD	R20,Y+
    0100 9159      LD	R21,Y+
    0101 FDE0      SBRC	R30,0
    0102 9508      RET
    0103 9169      LD	R22,Y+
    0104 9179      LD	R23,Y+
    0105 FDE1      SBRC	R30,1
    0106 9508      RET
    0107 90A9      LD	R10,Y+
    0108 90B9      LD	R11,Y+
    0109 FDE2      SBRC	R30,2
    010A 9508      RET
    010B 90C9      LD	R12,Y+
    010C 90D9      LD	R13,Y+
    010D FDE3      SBRC	R30,3
    010E 9508      RET
    010F 90E9      LD	R14,Y+
    0110 90F9      LD	R15,Y+
    0111 9508      RET

⌨️ 快捷键说明

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