📄 1.lst
字号:
__start:
__text_start:
001A EFCF LDI R28,0xFF
001B E0D2 LDI R29,2
001C BFCD OUT 0x3D,R28
001D BFDE OUT 0x3E,R29
001E 51C0 SUBI R28,0x10
001F 40D0 SBCI R29,0
0020 EA0A LDI R16,0xAA
0021 8308 STD Y+0,R16
0022 2400 CLR R0
0023 E0E0 LDI R30,0
0024 E0F1 LDI R31,1
0025 E011 LDI R17,1
0026 30E0 CPI R30,0
0027 07F1 CPC R31,R17
0028 F011 BEQ 0x002B
0029 9201 ST R0,Z+
002A CFFB RJMP 0x0026
002B 8300 STD Z+0,R16
002C E3E4 LDI R30,0x34
002D E0F0 LDI R31,0
002E E0A0 LDI R26,0
002F E0B1 LDI R27,1
0030 E010 LDI R17,0
0031 33E4 CPI R30,0x34
0032 07F1 CPC R31,R17
0033 F021 BEQ 0x0038
0034 95C8 LPM
0035 9631 ADIW R30,1
0036 920D ST R0,X+
0037 CFF9 RJMP 0x0031
0038 D028 RCALL _main
_exit:
0039 CFFF RJMP _exit
FILE: C:\DOCUME~1\A1\桌面\pwm\成功\1.c
(0001) #include <iom48v.h>
(0002) #include <macros.h>
(0003)
(0004) void init_timer1()
(0005) {//OCR1AH=0x00;//设定pwm的值约为0.8s
(0006) //OCR1AL=0x90;
(0007) OCR1A=23;
_init_timer1:
003A E187 LDI R24,0x17
003B E090 LDI R25,0
003C 93900089 STS 0x89,R25
003E 93800088 STS 0x88,R24
(0008) TCCR1B = 0x00; //stop
0040 2422 CLR R2
0041 92200081 STS 0x81,R2
(0009) //TCCR1A=0x82;
(0010) TCCR1A=0x82;
0043 E882 LDI R24,0x82
0044 93800080 STS 0x80,R24
(0011) TCCR1B=0x1A;
0046 E18A LDI R24,0x1A
0047 93800081 STS 0x81,R24
(0012) /*8分频,WGM14 快速PWM模式, OC1A正向PWM输出,TOP=ICR1*/
(0013) ICR1=30;//设定TOP值,设置频率30赫兹
0049 E18E LDI R24,0x1E
004A 93900087 STS 0x87,R25
004C 93800086 STS 0x86,R24
004E 9508 RET
_timer1_capt_isr:
004F 938A ST R24,-Y
0050 B78F IN R24,0x3F
0051 938A ST R24,-Y
(0014)
(0015) }
(0016) #pragma interrupt_handler timer1_capt_isr:11
(0017) void timer1_capt_isr(void)
(0018) {
(0019) //timer 1 input capture event, read (int)value in ICR1 using;
(0020) //TCNT1=0;
(0021) DDRB=0x02;
0052 E082 LDI R24,2
0053 B984 OUT 0x04,R24
0054 9189 LD R24,Y+
0055 BF8F OUT 0x3F,R24
0056 9189 LD R24,Y+
0057 9518 RETI
_timer1_compa_isr:
0058 938A ST R24,-Y
0059 B78F IN R24,0x3F
005A 938A ST R24,-Y
(0022) }
(0023) #pragma interrupt_handler timer1_compa_isr:12
(0024) void timer1_compa_isr(void)
(0025) {
(0026) //compare occured TCNT1=OCR1A
(0027) DDRB=0x02;
005B E082 LDI R24,2
005C B984 OUT 0x04,R24
005D 9189 LD R24,Y+
005E BF8F OUT 0x3F,R24
005F 9189 LD R24,Y+
0060 9518 RETI
(0028) }
(0029)
(0030)
(0031) void main()
(0032) {
(0033) CLI();
_main:
0061 94F8 BCLR 7
(0034) //init_port();
(0035) PORTB = 0x02;
0062 E082 LDI R24,2
0063 B985 OUT 0x05,R24
(0036) DDRB = 0x02;
0064 B984 OUT 0x04,R24
(0037) PORTC = 0x00;
0065 2422 CLR R2
0066 B828 OUT 0x08,R2
(0038) DDRC = 0x00;
0067 B827 OUT 0x07,R2
(0039) PORTD = 0x00;
0068 B82B OUT 0x0B,R2
(0040) DDRD = 0x00;
0069 B82A OUT 0x0A,R2
(0041) init_timer1();
006A DFCF RCALL _init_timer1
(0042) MCUCR = 0x00;
006B 2422 CLR R2
006C BE25 OUT 0x35,R2
(0043) EICRA = 0x00; //extended ext ints
006D 92200069 STS 0x69,R2
(0044) EIMSK = 0x00;
006F BA2D OUT 0x1D,R2
(0045)
(0046) TIMSK0 = 0x00; //timer 0 interrupt sources
0070 9220006E STS 0x6E,R2
(0047) TIMSK1 = 0x22; //timer 1 interrupt sources
0072 E282 LDI R24,0x22
0073 9380006F STS 0x6F,R24
(0048) TIMSK2 = 0x00; //timer 2 interrupt sources
0075 92200070 STS 0x70,R2
(0049)
(0050) PCMSK0 = 0x00; //pin change mask 0
0077 9220006B STS 0x6B,R2
(0051) PCMSK1 = 0x00; //pin change mask 1
0079 9220006C STS 0x6C,R2
(0052) PCMSK2 = 0x00; //pin change mask 2
007B 9220006D STS 0x6D,R2
(0053) PCICR = 0x00; //pin change enable
007D 92200068 STS 0x68,R2
(0054) PRR = 0x00; //power controller
007F 92200064 STS 0x64,R2
(0055) SEI();
0081 9478 BSET 7
(0056) while(1);
FILE: <library>
0082 CFFF RJMP 0x0082
0083 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -