📄 ctc.lst
字号:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E0071 CALL _main
_exit:
004A CFFF RJMP _exit
_delay_ms:
i --> R20
time --> R16
004B 940E007D CALL push_gset1
FILE: D:\AVR\我的程序\定时器1的捕捉比较控制轰鸣器实验\cfg.h
(0001) /*******************************
(0002) *程序名称:功能函数集
(0003) *作 者:萧联珠
(0004) *日 期:2007-11-19
(0005) ********************************/
(0006) #include <iom16v.h>
(0007)
(0008) /*延时子程序*/
(0009) void delay_ms(int time)
(0010) {
(0011) int i;
(0012) for(;time>0;time--)
004D C00A RJMP 0x0058
(0013) for(i=0;i<1000;i++);
004E 2744 CLR R20
004F 2755 CLR R21
0050 5F4F SUBI R20,0xFF
0051 4F5F SBCI R21,0xFF
0052 3E48 CPI R20,0xE8
0053 E0E3 LDI R30,3
0054 075E CPC R21,R30
0055 F3D4 BLT 0x0050
0056 5001 SUBI R16,1
0057 4010 SBCI R17,0
0058 2422 CLR R2
0059 2433 CLR R3
005A 1620 CP R2,R16
005B 0631 CPC R3,R17
005C F38C BLT 0x004E
005D 940E0080 CALL pop_gset1
005F 9508 RET
(0014) }
(0015)
(0016) /*端口初始化*/
(0017) void port_init()
(0018) {
(0019) DDRD|=(1<<DDD5); //配置PD5口为输出
_port_init:
0060 9A8D SBI 0x11,5
(0020) PORTD|=(1<<PD5); //PD5口的初始值为"1"
0061 9A95 SBI 0x12,5
0062 9508 RET
(0021) }
(0022)
(0023) /*CTC初始化*/
(0024) void ctc_init()
(0025) {
(0026) TCCR1A=0x40; //配置定时器工作在CTC模式,比较匹配时OC1A电平取反
_ctc_init:
0063 E480 LDI R24,0x40
0064 BD8F OUT 0x2F,R24
(0027) TCCR1B=0x09; //无分频
0065 E089 LDI R24,0x9
0066 BD8E OUT 0x2E,R24
(0028) OCR1A=1000; //设置捕捉比较输出初值
0067 EE88 LDI R24,0xE8
0068 E093 LDI R25,3
0069 BD9B OUT 0x2B,R25
006A BD8A OUT 0x2A,R24
(0029) delay_ms(6000); //控制轰鸣器使能时间
006B E700 LDI R16,0x70
006C E117 LDI R17,0x17
006D DFDD RCALL _delay_ms
(0030) TCCR1A=0x00; //关闭定时器
006E 2422 CLR R2
006F BC2F OUT 0x2F,R2
0070 9508 RET
FILE: D:\AVR\我的程序\定时器1的捕捉比较控制轰鸣器实验\main.c
(0001) /***********************************
(0002) *实验目的:熟悉定时器CTC模式编程
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-19
(0005) ************************************/
(0006) #include <iom16v.h>
(0007) #include "cfg.h"
(0008)
(0009) void main()
(0010) {
(0011) port_init();
_main:
0071 DFEE RCALL _port_init
(0012) ctc_init();
0072 DFF0 RCALL _ctc_init
(0013)
(0014) while(1);
FILE: <library>
0073 CFFF RJMP 0x0073
0074 9508 RET
push_gset5:
0075 92FA ST R15,-Y
0076 92EA ST R14,-Y
push_gset4:
0077 92DA ST R13,-Y
0078 92CA ST R12,-Y
push_gset3:
0079 92BA ST R11,-Y
007A 92AA ST R10,-Y
push_gset2:
007B 937A ST R23,-Y
007C 936A ST R22,-Y
push_gset1:
007D 935A ST R21,-Y
007E 934A ST R20,-Y
007F 9508 RET
pop_gset1:
0080 E0E1 LDI R30,1
pop:
0081 9149 LD R20,Y+
0082 9159 LD R21,Y+
0083 FDE0 SBRC R30,0
0084 9508 RET
0085 9169 LD R22,Y+
0086 9179 LD R23,Y+
0087 FDE1 SBRC R30,1
0088 9508 RET
0089 90A9 LD R10,Y+
008A 90B9 LD R11,Y+
008B FDE2 SBRC R30,2
008C 9508 RET
008D 90C9 LD R12,Y+
008E 90D9 LD R13,Y+
008F FDE3 SBRC R30,3
0090 9508 RET
0091 90E9 LD R14,Y+
0092 90F9 LD R15,Y+
0093 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -