📄 pwm.lst
字号:
__start:
__text_start:
72 EFCF LDI R28,0xFF
73 E2D1 LDI R29,0x21
74 BFCD OUT 0x3D,R28
75 BFDE OUT 0x3E,R29
76 51CE SUBI R28,0x1E
77 40D0 SBCI R29,0
78 EA0A LDI R16,0xAA
79 8308 STD Y+0,R16
7A 2400 CLR R0
7B E0E0 LDI R30,0
7C E0F2 LDI R31,2
7D E012 LDI R17,2
7E 30E4 CPI R30,4
7F 07F1 CPC R31,R17
80 F011 BEQ 0x0083
81 9201 ST R0,Z+
82 CFFB RJMP 0x007E
83 8300 STD Z+0,R16
84 EEE4 LDI R30,0xE4
85 E0F0 LDI R31,0
86 E0A0 LDI R26,0
87 E0B2 LDI R27,2
88 E010 LDI R17,0
89 E000 LDI R16,0
8A BF0B OUT 0x3B,R16
8B 3EE4 CPI R30,0xE4
8C 07F1 CPC R31,R17
8D F021 BEQ 0x0092
8E 95C8 LPM
8F 9631 ADIW R30,1
90 920D ST R0,X+
91 CFF9 RJMP 0x008B
92 940E 0095 CALL _main
_exit:
94 CFFF RJMP _exit
FILE: F:\Programme\PWM\main.c
(0001) /*--------------------------------------------------------
(0002) Atiny24-PWM: 此版本使用T0、T1共两路PWM,但目前两者还不能独立
(0003) PWM mode:
(0004) TCCR0A: COM0A1-COM0A0-COM0B1-COM0B0 - - WGM01-WGM00
(0005) TCCR0B: FOC0A-FOC0B - - WGM02-CS02-CS01-CS00
(0006) TCCR1A: COM1A1-COM1A0-COM1B1-COM1B0 - - WGM11-WGM10
(0007) TCCR1B: ICNC1-ICES1 - WGM13-WGM12-CS12-CS11-CS10
(0008) ---------------------------------------------------------*/
(0009) #include "iot24v.h"
(0010) #include "macros.h"
(0011) #include "selffile.h"
(0012)
(0013) unsigned int OCR0_temp,OCR1_temp;
(0014) /*----------------------------------------
(0015) 主程序
(0016) ----------------------------------------*/
(0017) void main(void)
(0018) {
(0019) NOP();
_main:
95 0000 NOP
(0020) CLI();
96 94F8 BCLR 7
(0021) WTCHDOG_init();
97 D071 RCALL _WTCHDOG_init
(0022) OCR0_temp=0;
98 2422 CLR R2
99 2433 CLR R3
9A 9230 0203 STS OCR0_temp+1,R3
9C 9220 0202 STS OCR0_temp,R2
(0023) OCR1_temp=0;
9E 9230 0201 STS OCR1_temp+1,R3
A0 9220 0200 STS OCR1_temp,R2
(0024)
(0025) MCU_init();
A2 D05C RCALL _MCU_init
(0026) WDR();
A3 95A8 WDR
(0027) SEI();
A4 9478 BSET 7
A5 C040 RJMP 0x00E6
(0028) while(1)
(0029) {
(0030) Delay_nms(500);
A6 EF04 LDI R16,0xF4
A7 E011 LDI R17,1
A8 940E 0119 CALL _Delay_nms
(0031) OCR0_temp+=1;
AA 9180 0202 LDS R24,OCR0_temp
AC 9190 0203 LDS R25,OCR0_temp+1
AE 9601 ADIW R24,1
AF 9390 0203 STS OCR0_temp+1,R25
B1 9380 0202 STS OCR0_temp,R24
(0032) OCR1_temp+=0x10;
B3 9180 0200 LDS R24,OCR1_temp
B5 9190 0201 LDS R25,OCR1_temp+1
B7 9640 ADIW R24,0x10
B8 9390 0201 STS OCR1_temp+1,R25
BA 9380 0200 STS OCR1_temp,R24
(0033) if(OCR0_temp>0xff)
BC EF8F LDI R24,0xFF
BD E090 LDI R25,0
BE 9020 0202 LDS R2,OCR0_temp
C0 9030 0203 LDS R3,OCR0_temp+1
C2 1582 CP R24,R2
C3 0593 CPC R25,R3
C4 F430 BCC 0x00CB
(0034) OCR0_temp=0;
C5 2422 CLR R2
C6 2433 CLR R3
C7 9230 0203 STS OCR0_temp+1,R3
C9 9220 0202 STS OCR0_temp,R2
(0035) if(OCR1_temp>0x3ff)
CB EF8F LDI R24,0xFF
CC E093 LDI R25,3
CD 9020 0200 LDS R2,OCR1_temp
CF 9030 0201 LDS R3,OCR1_temp+1
D1 1582 CP R24,R2
D2 0593 CPC R25,R3
D3 F430 BCC 0x00DA
(0036) OCR1_temp=0;
D4 2422 CLR R2
D5 2433 CLR R3
D6 9230 0201 STS OCR1_temp+1,R3
D8 9220 0200 STS OCR1_temp,R2
(0037)
(0038) OCR0A=OCR0_temp;
DA 9020 0202 LDS R2,OCR0_temp
DC 9030 0203 LDS R3,OCR0_temp+1
DE BE26 OUT 0x36,R2
(0039) OCR1A=OCR1_temp;
DF 9020 0200 LDS R2,OCR1_temp
E1 9030 0201 LDS R3,OCR1_temp+1
E3 BC3B OUT 0x2B,R3
E4 BC2A OUT 0x2A,R2
(0040) WDR();
E5 95A8 WDR
E6 CFBF RJMP 0x00A6
E7 9508 RET
(0041) }
(0042) }
(0043)
(0044) /*----------------------------------------
(0045) 系统初始化
(0046) ----------------------------------------*/
(0047) void timer1_init(void)
(0048) {
(0049) TCNT1H=0x00;
_timer1_init:
E8 2422 CLR R2
E9 BC2D OUT 0x2D,R2
(0050) TCNT1L=0x00;
EA BC2C OUT 0x2C,R2
(0051) OCR1AH=0x00; //
EB BC2B OUT 0x2B,R2
(0052) OCR1AL=0xff;
EC EF8F LDI R24,0xFF
ED BD8A OUT 0x2A,R24
(0053) TIMSK1=0x00;
EE B82C OUT 0x0C,R2
(0054) TCCR1A=(1<<COM1A1)|(1<<WGM10)|(1<<WGM11); //
EF E883 LDI R24,0x83
F0 BD8F OUT 0x2F,R24
(0055) TCCR1B=(1<<CS10);
F1 E081 LDI R24,1
F2 BD8E OUT 0x2E,R24
F3 9508 RET
(0056) }
(0057)
(0058) void timer0_init(void)
(0059) {
(0060) TCCR0B=0x00;
_timer0_init:
F4 2422 CLR R2
F5 BE23 OUT 0x33,R2
(0061) TCNT0=0x00; //0xb0
F6 BE22 OUT 0x32,R2
(0062) OCR0A=0x80;
F7 E880 LDI R24,0x80
F8 BF86 OUT 0x36,R24
(0063) TIMSK0=0x00;
F9 BE29 OUT 0x39,R2
(0064) TCCR0A=(1<<COM0A1)|(1<<WGM00);
FA E881 LDI R24,0x81
FB BF80 OUT 0x30,R24
(0065) TCCR0B=(1<<CS00);
FC E081 LDI R24,1
FD BF83 OUT 0x33,R24
FE 9508 RET
(0066) }
(0067)
(0068) void MCU_init(void)
(0069) {
(0070) DDRA=(1<<PA6)|(1<<PA5);
_MCU_init:
FF E680 LDI R24,0x60
100 BB8A OUT 0x1A,R24
(0071) DDRB=(1<<PB2);
101 E084 LDI R24,4
102 BB87 OUT 0x17,R24
(0072) MCUCR = 0x00;
103 2422 CLR R2
104 BE25 OUT 0x35,R2
(0073) GIMSK = 0x00;
105 BE2B OUT 0x3B,R2
(0074) timer0_init();
106 DFED RCALL _timer0_init
(0075) timer1_init();
107 DFE0 RCALL _timer1_init
108 9508 RET
(0076) }
(0077)
(0078) /*----------------------------------------
(0079) 看门狗设置
(0080) ----------------------------------------*/
(0081) void WTCHDOG_init(void) //WTCHDOG: use the least frequency,about 2S
(0082) {
(0083) WDR();
_WTCHDOG_init:
109 95A8 WDR
(0084) WDTCSR=0x9f;
10A E98F LDI R24,0x9F
10B BD81 OUT 0x21,R24
(0085) WDTCSR=0x0f;
10C E08F LDI R24,0xF
10D BD81 OUT 0x21,R24
10E 9508 RET
FILE: F:\Programme\PWM\delay.c
(0001) #include "iot24v.h"
(0002) #include "macros.h"
(0003) #include "selffile.h"
(0004)
(0005) void Delay_1ms(void)
(0006) {
(0007) unsigned int i;
(0008) for(i=1;i<1142;i++)
_Delay_1ms:
i --> R16
10F E001 LDI R16,1
110 E010 LDI R17,0
111 C002 RJMP 0x0114
112 5F0F SUBI R16,0xFF
113 4F1F SBCI R17,0xFF
114 3706 CPI R16,0x76
115 E0E4 LDI R30,4
116 071E CPC R17,R30
117 F3D0 BCS 0x0112
118 9508 RET
_Delay_nms:
i --> R20
n --> R10
119 940E 0128 CALL push_xgset300C
11B 0158 MOVW R10,R16
(0009) ;
(0010) }
(0011)
(0012) void Delay_nms(unsigned int n)
(0013) {
(0014) unsigned int i;
(0015) WDR();
11C 95A8 WDR
(0016) for(i=0;i<n;i++)
11D 2744 CLR R20
11E 2755 CLR R21
11F C003 RJMP 0x0123
(0017) Delay_1ms();
FILE: <library>
120 DFEE RCALL _Delay_1ms
121 5F4F SUBI R20,0xFF
122 4F5F SBCI R21,0xFF
123 154A CP R20,R10
124 055B CPC R21,R11
125 F3D0 BCS 0x0120
126 940C 012D JMP pop_xgset300C
push_xgset300C:
128 935A ST R21,-Y
129 934A ST R20,-Y
12A 92BA ST R11,-Y
12B 92AA ST R10,-Y
12C 9508 RET
pop_xgset300C:
12D 90A9 LD R10,Y+
12E 90B9 LD R11,Y+
12F 9149 LD R20,Y+
130 9159 LD R21,Y+
131 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -