📄 pwm0_led.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 940E0067 CALL _main
_exit:
004A CFFF RJMP _exit
_delay_ms:
i --> R20
time --> R16
004B 940E0087 CALL push_gset1
FILE: D:\AVR\我的程序\PWM0\cfg.h
(0001) /*******************************
(0002) *程序名称:各功能函数
(0003) *作 者:萧联珠
(0004) *日 期:2007-11-22
(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<200;i++);
004E 2744 CLR R20
004F 2755 CLR R21
0050 5F4F SUBI R20,0xFF
0051 4F5F SBCI R21,0xFF
0052 3C48 CPI R20,0xC8
0053 E0E0 LDI R30,0
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 940E008A CALL pop_gset1
005F 9508 RET
(0014) }
(0015)
(0016) void port_init()
(0017) {
(0018) PORTB=0xFF; //PB口配置为输出
_port_init:
0060 EF8F LDI R24,0xFF
0061 BB88 OUT 0x18,R24
(0019) DDRB=0xFF; //PB口初始值为"1"
0062 BB87 OUT 0x17,R24
0063 9508 RET
(0020) }
(0021)
(0022) void pwm_init()
(0023) {
(0024) TCCR0=0x61; //配置定时器工作在相位修正PWM模式
_pwm_init:
0064 E681 LDI R24,0x61
0065 BF83 OUT 0x33,R24
0066 9508 RET
FILE: D:\AVR\我的程序\PWM0\main.c
(0001) /****************************************
(0002) *实验目的:熟悉定时器PWM模式控制LED
(0003) *作者:萧联珠
(0004) *日期:2007-11-22
(0005) ****************************************/
(0006) #include "iom16v.h"
(0007) #include "cfg.h"
(0008)
(0009) void main(void)
(0010) {
(0011)
(0012) unsigned char i;
(0013) port_init();
_main:
i --> R20
0067 DFF8 RCALL _port_init
(0014) pwm_init();
0068 DFFB RCALL _pwm_init
0069 C013 RJMP 0x007D
(0015)
(0016) while (1)
(0017) {
(0018) for(i=250;i>1;i--)
006A EF4A LDI R20,0xFA
006B C005 RJMP 0x0071
(0019) {
(0020) OCR0=i;
006C BF4C OUT 0x3C,R20
(0021) delay_ms(8);
006D E008 LDI R16,0x8
006E E010 LDI R17,0
006F DFDB RCALL _delay_ms
0070 954A DEC R20
0071 E081 LDI R24,1
0072 1784 CP R24,R20
0073 F3C0 BCS 0x006C
(0022) }
(0023) for(i=1;i<250;i++)
0074 E041 LDI R20,1
0075 C005 RJMP 0x007B
(0024) {
(0025) OCR0=i;
0076 BF4C OUT 0x3C,R20
(0026) delay_ms(8);
FILE: <library>
0077 E008 LDI R16,0x8
0078 E010 LDI R17,0
0079 DFD1 RCALL _delay_ms
007A 9543 INC R20
007B 3F4A CPI R20,0xFA
007C F3C8 BCS 0x0076
007D CFEC RJMP 0x006A
007E 9508 RET
push_gset5:
007F 92FA ST R15,-Y
0080 92EA ST R14,-Y
push_gset4:
0081 92DA ST R13,-Y
0082 92CA ST R12,-Y
push_gset3:
0083 92BA ST R11,-Y
0084 92AA ST R10,-Y
push_gset2:
0085 937A ST R23,-Y
0086 936A ST R22,-Y
push_gset1:
0087 935A ST R21,-Y
0088 934A ST R20,-Y
0089 9508 RET
pop_gset1:
008A E0E1 LDI R30,1
pop:
008B 9149 LD R20,Y+
008C 9159 LD R21,Y+
008D FDE0 SBRC R30,0
008E 9508 RET
008F 9169 LD R22,Y+
0090 9179 LD R23,Y+
0091 FDE1 SBRC R30,1
0092 9508 RET
0093 90A9 LD R10,Y+
0094 90B9 LD R11,Y+
0095 FDE2 SBRC R30,2
0096 9508 RET
0097 90C9 LD R12,Y+
0098 90D9 LD R13,Y+
0099 FDE3 SBRC R30,3
009A 9508 RET
009B 90E9 LD R14,Y+
009C 90F9 LD R15,Y+
009D 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -