📄 pwm2_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 940E0081 CALL _main
_exit:
004B CFFF RJMP _exit
FILE: D:\AVR\我的程序\定时器1的快速PWM实验\cfg.h
(0001) /*******************************
(0002) *程序名称:功能函数集
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-19
(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) /*PWM初始化*/
(0017) void pwm_init()
(0018) {
(0019) SREG=0x80; //使能全局中断
_pwm_init:
004F E880 LDI R24,0x80
0050 BF8F OUT 0x3F,R24
(0020) TIMSK=(1<<OCIE1A); //使能比较匹配中断
0051 E180 LDI R24,0x10
0052 BF89 OUT 0x39,R24
(0021) TCCR1A=0x03; //配置定时器工作在快速PWM模式
0053 E083 LDI R24,3
0054 BD8F OUT 0x2F,R24
(0022) TCCR1B=0x19; //无分频
0055 E189 LDI R24,0x19
0056 BD8E OUT 0x2E,R24
(0023) OCR1A=200; //设置捕捉比较输出初值
0057 EC88 LDI R24,0xC8
0058 E090 LDI R25,0
0059 BD9B OUT 0x2B,R25
005A BD8A OUT 0x2A,R24
005B 9508 RET
_pwm_int:
005C 922A ST R2,-Y
005D 923A ST R3,-Y
005E 938A ST R24,-Y
005F 939A ST R25,-Y
0060 93EA ST R30,-Y
0061 B62F IN R2,0x3F
0062 922A ST R2,-Y
(0024) }
(0025)
(0026) /*PWM中断服务程序*/
(0027) #pragma interrupt_handler pwm_int:7
(0028) void pwm_int()
(0029) {
(0030) flag_bell=flag_bell+1;
0063 91800060 LDS R24,flag_bell
0065 91900061 LDS R25,flag_bell+1
0067 9601 ADIW R24,1
0068 93900061 STS flag_bell+1,R25
006A 93800060 STS flag_bell,R24
(0031) if(flag_bell==10)
006C 308A CPI R24,0xA
006D E0E0 LDI R30,0
006E 079E CPC R25,R30
006F F449 BNE 0x0079
(0032) {
(0033) flag_bell=0;
0070 2422 CLR R2
0071 2433 CLR R3
0072 92300061 STS flag_bell+1,R3
0074 92200060 STS flag_bell,R2
(0034) PORTD=~(PORTD);
0076 B222 IN R2,0x12
0077 9420 COM R2
0078 BA22 OUT 0x12,R2
(0035) }
0079 9029 LD R2,Y+
007A BE2F OUT 0x3F,R2
007B 91E9 LD R30,Y+
007C 9199 LD R25,Y+
007D 9189 LD R24,Y+
007E 9039 LD R3,Y+
007F 9029 LD R2,Y+
0080 9518 RETI
FILE: D:\AVR\我的程序\定时器1的快速PWM实验\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:
0081 DFCA RCALL _port_init
(0012) pwm_init();
0082 DFCC RCALL _pwm_init
(0013)
(0014) while(1);
FILE: <library>
0083 CFFF RJMP 0x0083
0084 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -