📄 timer.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 + -