📄 t1_bell.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 940E007D CALL _main
_exit:
004B CFFF RJMP _exit
FILE: D:\AVR\我的程序\定时器1的普通模式实验\cfg.h
(0001) /*******************************
(0002) *程序名称:各功能函数
(0003) *作 者:萧联珠
(0004) *日 期:2007-11-20
(0005) ********************************/
(0006) #include <iom16v.h>
(0007) int flag_bell=0;
(0008)
(0009) /*端口初始化*/
(0010) void port_init() //端口初始化
(0011) {
(0012) DDRD|=(1<<DDD5); //配置PD5口为输出
_port_init:
004C 9A8D SBI 0x11,5
(0013) PORTD|=(1<<PD5); //PD5口的初始值为"1"
004D 9A95 SBI 0x12,5
004E 9508 RET
(0014) }
(0015)
(0016) /*定时器1初始化*/
(0017) void timer1_init()
(0018) {
(0019) SREG=0x80; //使能全局中断
_timer1_init:
004F E880 LDI R24,0x80
0050 BF8F OUT 0x3F,R24
(0020) TIMSK=(1<<TOIE1); //使能定时溢出中断
0051 E084 LDI R24,4
0052 BF89 OUT 0x39,R24
(0021) TCCR1A=0x00; //配置定时器工作在普通模式
0053 2422 CLR R2
0054 BC2F OUT 0x2F,R2
(0022) TCCR1B=0x01; //无分频
0055 E081 LDI R24,1
0056 BD8E OUT 0x2E,R24
0057 9508 RET
_Timer1_ovf:
0058 922A ST R2,-Y
0059 923A ST R3,-Y
005A 938A ST R24,-Y
005B 939A ST R25,-Y
005C 93EA ST R30,-Y
005D B62F IN R2,0x3F
005E 922A ST R2,-Y
(0023) }
(0024)
(0025) /*定时器1中断服务程序*/
(0026) #pragma interrupt_handler Timer1_ovf:9
(0027) void Timer1_ovf(void)
(0028) {
(0029) flag_bell=flag_bell+1;
005F 91800060 LDS R24,flag_bell
0061 91900061 LDS R25,flag_bell+1
0063 9601 ADIW R24,1
0064 93900061 STS flag_bell+1,R25
0066 93800060 STS flag_bell,R24
(0030) if(flag_bell==1)
0068 3081 CPI R24,1
0069 E0E0 LDI R30,0
006A 079E CPC R25,R30
006B F449 BNE 0x0075
(0031) {
(0032) flag_bell=0;
006C 2422 CLR R2
006D 2433 CLR R3
006E 92300061 STS flag_bell+1,R3
0070 92200060 STS flag_bell,R2
(0033) PORTD=~(PORTD);
0072 B222 IN R2,0x12
0073 9420 COM R2
0074 BA22 OUT 0x12,R2
(0034) }
0075 9029 LD R2,Y+
0076 BE2F OUT 0x3F,R2
0077 91E9 LD R30,Y+
0078 9199 LD R25,Y+
0079 9189 LD R24,Y+
007A 9039 LD R3,Y+
007B 9029 LD R2,Y+
007C 9518 RETI
FILE: D:\AVR\我的程序\定时器1的普通模式实验\main.c
(0001) /***********************************
(0002) *实验目的:熟悉定时器T1溢出中断模编程
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-20
(0005) ************************************/
(0006) #include <iom16v.h>
(0007) #include "cfg.h"
(0008)
(0009) void main()
(0010) {
(0011) port_init();
_main:
007D DFCE RCALL _port_init
(0012) timer1_init();
007E DFD0 RCALL _timer1_init
(0013)
(0014) while(1);
FILE: <library>
007F CFFF RJMP 0x007F
0080 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -