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

📄 timer.lst

📁 atmega8的片内定时器操作
💻 LST
字号:
__text_start:
__start:
    0013 E5CF      LDI	R28,0x5F
    0014 E0D4      LDI	R29,4
    0015 BFCD      OUT	P3D,R28
    0016 BFDE      OUT	P3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	R16,0+Y
    001B 2400      CLR	R0
    001C E6E0      LDI	R30,0x60
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 36E2      CPI	R30,0x62
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	R16,0+Z
    0025 E2E6      LDI	R30,0x26
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D03B      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: D:\job\avrtest\web\example\timer\timer.c
(0001) //ICC-AVR application builder : 2005-2-24 22:21:34
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) 
(0008) int  i;
(0009) 
(0010) //  初始化timer0, 1  ms
(0011) void timer0_init(void)
(0012) {
(0013)  TCCR0 = 0x00; //stop
_timer0_init:
    0033 2422      CLR	R2
    0034 BE23      OUT	P33,R2
(0014)  TCNT0 = 0xE1; //set count
    0035 EE81      LDI	R24,0xE1
    0036 BF82      OUT	P32,R24
(0015)  TCCR0 = 0x04; //start timer
    0037 E084      LDI	R24,4
    0038 BF83      OUT	P33,R24
(0016) }
    0039 9508      RET
_timer0_ovf_isr:
    003A 922A      ST	R2,-Y
    003B 923A      ST	R3,-Y
    003C 938A      ST	R24,-Y
    003D 939A      ST	R25,-Y
    003E 93EA      ST	R30,-Y
    003F B62F      IN	R2,P3F
    0040 922A      ST	R2,-Y
(0017) 
(0018) //  timer0 中断
(0019) #pragma interrupt_handler timer0_ovf_isr:10
(0020) void timer0_ovf_isr(void)
(0021) {
(0022)  TCNT0 = 0xE1;     //reload counter value
    0041 EE81      LDI	R24,0xE1
    0042 BF82      OUT	P32,R24
(0023)  if(++i == 1000){  //  1 秒
    0043 91800060  LDS	R24,_i
    0045 91900061  LDS	R25,_i+1
    0047 9601      ADIW	R24,1
    0048 93900061  STS	_i+1,R25
    004A 93800060  STS	_i,R24
    004C 3E88      CPI	R24,0xE8
    004D E0E3      LDI	R30,3
    004E 079E      CPC	R25,R30
    004F F451      BNE	0x005A
(0024)     i = 0;
    0050 2422      CLR	R2
    0051 2433      CLR	R3
    0052 92300061  STS	_i+1,R3
    0054 92200060  STS	_i,R2
(0025)     PORTB ^= 0x02; //  端口取反
    0056 E082      LDI	R24,2
    0057 B228      IN	R2,P18
    0058 2628      EOR	R2,R24
    0059 BA28      OUT	P18,R2
(0026)  }
(0027) }
    005A 9029      LD	R2,Y+
    005B BE2F      OUT	P3F,R2
    005C 91E9      LD	R30,Y+
    005D 9199      LD	R25,Y+
    005E 9189      LD	R24,Y+
    005F 9039      LD	R3,Y+
    0060 9029      LD	R2,Y+
    0061 9518      RETI
(0028) 
(0029) //call this routine to initialise all peripherals
(0030) void init_devices(void)
(0031) {
(0032)  //stop errant interrupts until set up
(0033)  CLI(); //disable all interrupts
_init_devices:
    0062 94F8      BCLR	7
(0034)  DDRB  = 0x02;    //  设置 PB1 为输出
    0063 E082      LDI	R24,2
    0064 BB87      OUT	P17,R24
(0035)  timer0_init();
    0065 DFCD      RCALL	_timer0_init
(0036) 
(0037)  MCUCR = 0x00;
    0066 2422      CLR	R2
    0067 BE25      OUT	P35,R2
(0038)  GICR  = 0x00;
    0068 BE2B      OUT	P3B,R2
(0039)  TIMSK = 0x01; //timer interrupt sources
    0069 E081      LDI	R24,1
    006A BF89      OUT	P39,R24
(0040)  SEI(); //re-enable interrupts
    006B 9478      BSET	7
(0041)  //all peripherals are now initialised
(0042) }
    006C 9508      RET
(0043) 
(0044) //
(0045) void main(void)
(0046) {
(0047)  init_devices();
_main:
    006D DFF4      RCALL	_init_devices
(0048)  //insert your functional code here...
(0049)  for(;;);
FILE: <library>
    006E CFFF      RJMP	0x006E
    006F 9508      RET

⌨️ 快捷键说明

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