📄 t0_led.lst
字号:
__start:
__text_start:
002B E5CF LDI R28,0x5F
002C E0D4 LDI R29,4
002D BFCD OUT 0x3D,R28
002E BFDE OUT 0x3E,R29
002F 51C0 SUBI R28,0x10
0030 40D0 SBCI R29,0
0031 EA0A LDI R16,0xAA
0032 8308 STD Y+0,R16
0033 2400 CLR R0
0034 E6E2 LDI R30,0x62
0035 E0F0 LDI R31,0
0036 E010 LDI R17,0
0037 36E2 CPI R30,0x62
0038 07F1 CPC R31,R17
0039 F011 BEQ 0x003C
003A 9201 ST R0,Z+
003B CFFB RJMP 0x0037
003C 8300 STD Z+0,R16
003D E5E4 LDI R30,0x54
003E E0F0 LDI R31,0
003F E6A0 LDI R26,0x60
0040 E0B0 LDI R27,0
0041 E010 LDI R17,0
0042 35E6 CPI R30,0x56
0043 07F1 CPC R31,R17
0044 F021 BEQ 0x0049
0045 95C8 LPM
0046 9631 ADIW R30,1
0047 920D ST R0,X+
0048 CFF9 RJMP 0x0042
0049 940E007F CALL _main
_exit:
004B CFFF RJMP _exit
FILE: D:\AVR\我的程序\定时器0溢出中断实验\cfg.h
(0001) /*******************************
(0002) *程序名称:各功能函数
(0003) *作 者:萧联珠
(0004) *日 期:2007-11-20
(0005) ********************************/
(0006) #include <iom16v.h>
(0007) int flag_led=0;
(0008)
(0009) /*端口初始化*/
(0010) void port_init()
(0011) {
(0012) PORTB=0xFF; //PB口配置为输出
_port_init:
004C EF8F LDI R24,0xFF
004D BB88 OUT 0x18,R24
(0013) DDRB=0xFF; //PB口初始值为"1"
004E BB87 OUT 0x17,R24
004F 9508 RET
(0014) }
(0015)
(0016) /*定时器0初始化*/
(0017) void timer0_init() //因为定时时间太短,看不到灯的变化
(0018) {
(0019) SREG = 0x80; //使能全局中断
_timer0_init:
0050 E880 LDI R24,0x80
0051 BF8F OUT 0x3F,R24
(0020) TIMSK|=(1<<TOIE0); //使能T0溢出中断
0052 B789 IN R24,0x39
0053 6081 ORI R24,1
0054 BF89 OUT 0x39,R24
(0021) TCCR0=0x01; //配置定时器工作普通模式
0055 E081 LDI R24,1
0056 BF83 OUT 0x33,R24
(0022) TCNT0=0; //给定时器赋初值
0057 2422 CLR R2
0058 BE22 OUT 0x32,R2
0059 9508 RET
_timer0_ovf:
005A 922A ST R2,-Y
005B 923A ST R3,-Y
005C 938A ST R24,-Y
005D 939A ST R25,-Y
005E 93EA ST R30,-Y
005F B62F IN R2,0x3F
0060 922A ST R2,-Y
(0023) }
(0024)
(0025) /*定时器0中断服务程序*/
(0026) #pragma interrupt_handler timer0_ovf:10
(0027) void timer0_ovf(void)
(0028) {
(0029) flag_led=flag_led+1;
0061 91800060 LDS R24,flag_led
0063 91900061 LDS R25,flag_led+1
0065 9601 ADIW R24,1
0066 93900061 STS flag_led+1,R25
0068 93800060 STS flag_led,R24
(0030) if(flag_led==1000) //对PB口取反
006A 3E88 CPI R24,0xE8
006B E0E3 LDI R30,3
006C 079E CPC R25,R30
006D F449 BNE 0x0077
(0031) {
(0032) flag_led=0;
006E 2422 CLR R2
006F 2433 CLR R3
0070 92300061 STS flag_led+1,R3
0072 92200060 STS flag_led,R2
(0033) PORTB=~PORTB;
0074 B228 IN R2,0x18
0075 9420 COM R2
0076 BA28 OUT 0x18,R2
(0034) }
0077 9029 LD R2,Y+
0078 BE2F OUT 0x3F,R2
0079 91E9 LD R30,Y+
007A 9199 LD R25,Y+
007B 9189 LD R24,Y+
007C 9039 LD R3,Y+
007D 9029 LD R2,Y+
007E 9518 RETI
FILE: D:\AVR\我的程序\定时器0溢出中断实验\main.c
(0001) /****************************************
(0002) *实验目的:熟悉定时器溢出中断编程
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-20
(0005) ****************************************/
(0006) #include <iom16v.h>
(0007) #include "cfg.h"
(0008)
(0009) void main()
(0010) {
(0011) port_init();
_main:
007F DFCC RCALL _port_init
(0012) timer0_init();
0080 DFCF RCALL _timer0_init
(0013)
(0014) while(1);
FILE: <library>
0081 CFFF RJMP 0x0081
0082 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -