📄 time0.lst
字号:
__start:
__text_start:
0015 E5CF LDI R28,0x5F
0016 E0D4 LDI R29,4
0017 BFCD OUT 0x3D,R28
0018 BFDE OUT 0x3E,R29
0019 51C0 SUBI R28,0x10
001A 40D0 SBCI R29,0
001B EA0A LDI R16,0xAA
001C 8308 STD Y+0,R16
001D 2400 CLR R0
001E E6E3 LDI R30,0x63
001F E0F0 LDI R31,0
0020 E010 LDI R17,0
0021 36E3 CPI R30,0x63
0022 07F1 CPC R31,R17
0023 F011 BEQ 0x0026
0024 9201 ST R0,Z+
0025 CFFB RJMP 0x0021
0026 8300 STD Z+0,R16
0027 E2E6 LDI R30,0x26
0028 E0F0 LDI R31,0
0029 E6A0 LDI R26,0x60
002A E0B0 LDI R27,0
002B E010 LDI R17,0
002C 32E9 CPI R30,0x29
002D 07F1 CPC R31,R17
002E F021 BEQ 0x0033
002F 95C8 LPM
0030 9631 ADIW R30,1
0031 920D ST R0,X+
0032 CFF9 RJMP 0x002C
0033 D046 RCALL _main
_exit:
0034 CFFF RJMP _exit
FILE: E:\ICCAVR编程学习\定时计数器学习\time0.c
(0001) //ICC-AVR application builder : 2007-3-8 22:08:41
(0002) // Target : M8
(0003) // Crystal: 1.0000Mhz
(0004)
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) #include <stdio.h>
(0008)
(0009) char i=0;
(0010) unsigned int timecount=0;
(0011) void port_init(void)
(0012) {
(0013) PORTB = 0xFF;
_port_init:
0035 EF8F LDI R24,0xFF
0036 BB88 OUT 0x18,R24
(0014) DDRB = 0xFF;
0037 BB87 OUT 0x17,R24
(0015) PORTC = 0x7F; //m103 output only
0038 E78F LDI R24,0x7F
0039 BB85 OUT 0x15,R24
(0016) DDRC = 0x00;
003A 2422 CLR R2
003B BA24 OUT 0x14,R2
(0017) PORTD = 0xFF;
003C EF8F LDI R24,0xFF
003D BB82 OUT 0x12,R24
(0018) DDRD = 0xFF;
003E BB81 OUT 0x11,R24
003F 9508 RET
(0019) }
(0020)
(0021) //TIMER0 initialize - prescale:8
(0022) // desired value: 1Hz
(0023) // actual value: Out of range
(0024) void timer0_init(void)
(0025) {
(0026) TCCR0 = 0x00; //stop
_timer0_init:
0040 2422 CLR R2
0041 BE23 OUT 0x33,R2
(0027) TCNT0 = 6 /*INVALID SETTING*/; //set count
0042 E086 LDI R24,6
0043 BF82 OUT 0x32,R24
(0028) TCCR0 = 0x02; //start timer
0044 E082 LDI R24,2
0045 BF83 OUT 0x33,R24
0046 9508 RET
_timer0_ovf_isr:
0047 922A ST R2,-Y
0048 923A ST R3,-Y
0049 938A ST R24,-Y
004A 939A ST R25,-Y
004B 93EA ST R30,-Y
004C B62F IN R2,0x3F
004D 922A ST R2,-Y
(0029)
(0030) }
(0031)
(0032) #pragma interrupt_handler timer0_ovf_isr:10
(0033) void timer0_ovf_isr(void)
(0034) {
(0035) //TCNT0 = 6 /*INVALID SETTING*/; //reload counter value
(0036) /* if(i<10) //i决定循环基准时间的次数
(0037) {TCNT0=0X3A; //重设初始值 100ms
(0038) i++; //累加基准时间
(0039) }
(0040) else
(0041) {PORTD^=BIT(0); //翻转PD口电平
(0042) i=0; //定时全局变量恢复初始值
(0043) } */
(0044) if(++timecount==1000)
004E 91800061 LDS R24,timecount
0050 91900062 LDS R25,timecount+1
0052 9601 ADIW R24,1
0053 93900062 STS timecount+1,R25
0055 93800061 STS timecount,R24
0057 3E88 CPI R24,0xE8
0058 E0E3 LDI R30,3
0059 079E CPC R25,R30
005A F469 BNE 0x0068
(0045) {
(0046) PORTD=PORTD^0x80;
005B E880 LDI R24,0x80
005C E090 LDI R25,0
005D B222 IN R2,0x12
005E 2433 CLR R3
005F 2628 EOR R2,R24
0060 2639 EOR R3,R25
0061 BA22 OUT 0x12,R2
(0047) timecount=0;
0062 2422 CLR R2
0063 2433 CLR R3
0064 92300062 STS timecount+1,R3
0066 92200061 STS timecount,R2
(0048) }
0068 9029 LD R2,Y+
0069 BE2F OUT 0x3F,R2
006A 91E9 LD R30,Y+
006B 9199 LD R25,Y+
006C 9189 LD R24,Y+
006D 9039 LD R3,Y+
006E 9029 LD R2,Y+
006F 9518 RETI
(0049) }
(0050)
(0051)
(0052) //call this routine to initialize all peripherals
(0053) void init_devices(void)
(0054) {
(0055) //stop errant interrupts until set up
(0056) CLI(); //disable all interrupts
_init_devices:
0070 94F8 BCLR 7
(0057) timer0_init();
0071 DFCE RCALL _timer0_init
(0058) port_init();
0072 DFC2 RCALL _port_init
(0059)
(0060) MCUCR = 0x00;
0073 2422 CLR R2
0074 BE25 OUT 0x35,R2
(0061) GICR = 0x00;
0075 BE2B OUT 0x3B,R2
(0062) TIMSK = 0x01; //timer interrupt sources
0076 E081 LDI R24,1
0077 BF89 OUT 0x39,R24
(0063) SEI(); //re-enable interrupts
0078 9478 BSET 7
0079 9508 RET
(0064) //all peripherals are now initialized
(0065) }
(0066)
(0067) //
(0068) void main(void)
(0069) {
(0070) /*TCCR0=0X05; //时钟1024分频
(0071) TCNT0=0X3A; //定时器计数初始值 100ms
(0072) TIMSK=0X01; //允许定时器0中断
(0073) SEI(); //开全局中断
(0074) DDRB=0XFF;
(0075) DDRD=0XFF;
(0076) PORTB=0Xff;
(0077) PORTD=0XFF; */
(0078)
(0079) init_devices();
_main:
007A DFF5 RCALL _init_devices
(0080) while(1);
FILE: <library>
007B CFFF RJMP 0x007B
007C 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -