📄 timer1.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 36E4 CPI R30,0x64
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 940E007D CALL _main
_exit:
004A CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\16BITT~1\timer1.c
(0001) //ICC-AVR application builder : 2007-5-6 21:30:57
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) //TIMER1 initialize - prescale:64
(0005) // WGM: 10) PWM phz correct, TOP= ICRn
(0006) // desired value: 1Hz
(0007) // actual value: 1.000Hz (0.0%)
(0008)
(0009)
(0010) #include <iom16v.h>
(0011) #include <macros.h>
(0012)
(0013) #define PWM1A PORTD5 //OC1A PD5
(0014) #define PWM1B PORTD4 //OC1B PD4
(0015) unsigned char OCAH;
(0016) unsigned char OCAL;
(0017) unsigned char OCBH;
(0018) unsigned char OCBL;
(0019)
(0020) void timer1_init(void)
(0021) {
(0022) TCCR1B = 0x00; //stop
_timer1_init:
004B 2422 CLR R2
004C BC2E OUT 0x2E,R2
(0023) TCNT1H = 0x00; //setup
004D BC2D OUT 0x2D,R2
(0024) TCNT1L = 0x01;
004E E081 LDI R24,1
004F BD8C OUT 0x2C,R24
(0025) OCR1AH = OCAH;
0050 90200063 LDS R2,OCAH
0052 BC2B OUT 0x2B,R2
(0026) OCR1AL = OCAL;
0053 90200062 LDS R2,OCAL
0055 BC2A OUT 0x2A,R2
(0027) OCR1BH = OCBH;
0056 90200061 LDS R2,OCBH
0058 BC29 OUT 0x29,R2
(0028) OCR1BL = OCBL;
0059 90200060 LDS R2,OCBL
005B BC28 OUT 0x28,R2
(0029) ICR1H = 0xff; // pwm 的计数顶值
005C EF8F LDI R24,0xFF
005D BD87 OUT 0x27,R24
(0030) ICR1L = 0xFF;
005E BD86 OUT 0x26,R24
(0031) TCCR1A = 0xA3; // 匹配清零 top置位
005F EA83 LDI R24,0xA3
0060 BD8F OUT 0x2F,R24
(0032) TCCR1B = 0x0B; // start Timer
0061 E08B LDI R24,0xB
0062 BD8E OUT 0x2E,R24
0063 9508 RET
_init_devices:
valuebl --> Y+6
valuebh --> Y+4
valueal --> R20
valueah --> R22
0064 940E0096 CALL push_gset2
0066 2F42 MOV R20,R18
0067 2F60 MOV R22,R16
(0033) }
(0034)
(0035) void init_devices(unsigned char valueah,unsigned char valueal,unsigned char valuebh,unsigned char valuebl)
(0036) {
(0037)
(0038) OCAH=valueah;
0068 93600063 STS OCAH,R22
(0039) OCAL=valueal;
006A 93400062 STS OCAL,R20
(0040) OCBH=valuebh;
006C 800C LDD R0,Y+4
006D 92000061 STS OCBH,R0
(0041) OCBL=valuebl;
006F 800E LDD R0,Y+6
0070 92000060 STS OCBL,R0
(0042) CLI();
0072 94F8 BCLR 7
(0043) //disable all interrupts
(0044) timer1_init();
0073 DFD7 RCALL _timer1_init
(0045) MCUCR = 0x00;
0074 2422 CLR R2
0075 BE25 OUT 0x35,R2
(0046) GICR = 0x00;
0076 BE2B OUT 0x3B,R2
(0047) TIMSK = 0x04; //timer interrupt sources
0077 E084 LDI R24,4
0078 BF89 OUT 0x39,R24
(0048) SEI(); //re-enable interrupts
0079 9478 BSET 7
007A 940E008D CALL pop_gset2
007C 9508 RET
_main:
007D 9723 SBIW R28,3
(0049)
(0050) }
(0051)
(0052)
(0053) void main(void)
(0054) {
(0055) PORTD&=(0<<PWM1A)&(0<<PWM1B);
007E 2422 CLR R2
007F BA22 OUT 0x12,R2
(0056) DDRD|=(1<<PWM1A)|(1<<PWM1B);
0080 B381 IN R24,0x11
0081 6380 ORI R24,0x30
0082 BB81 OUT 0x11,R24
(0057) init_devices(0x0f,0x45,0x0f,0xf0); //修改实参即可改变占空比,最大值为0X0FFF;
0083 EF80 LDI R24,0xF0
0084 838A STD Y+2,R24
0085 E08F LDI R24,0xF
0086 8388 STD Y+0,R24
0087 E425 LDI R18,0x45
0088 E00F LDI R16,0xF
0089 DFDA RCALL _init_devices
(0058) while(1);
FILE: <library>
008A CFFF RJMP 0x008A
008B 9623 ADIW R28,3
008C 9508 RET
pop_gset2:
008D E0E2 LDI R30,2
008E 940C009C JMP pop
push_gset5:
0090 92FA ST R15,-Y
0091 92EA ST R14,-Y
push_gset4:
0092 92DA ST R13,-Y
0093 92CA ST R12,-Y
push_gset3:
0094 92BA ST R11,-Y
0095 92AA ST R10,-Y
push_gset2:
0096 937A ST R23,-Y
0097 936A ST R22,-Y
push_gset1:
0098 935A ST R21,-Y
0099 934A ST R20,-Y
009A 9508 RET
pop_gset1:
009B E0E1 LDI R30,1
pop:
009C 9149 LD R20,Y+
009D 9159 LD R21,Y+
009E FDE0 SBRC R30,0
009F 9508 RET
00A0 9169 LD R22,Y+
00A1 9179 LD R23,Y+
00A2 FDE1 SBRC R30,1
00A3 9508 RET
00A4 90A9 LD R10,Y+
00A5 90B9 LD R11,Y+
00A6 FDE2 SBRC R30,2
00A7 9508 RET
00A8 90C9 LD R12,Y+
00A9 90D9 LD R13,Y+
00AA FDE3 SBRC R30,3
00AB 9508 RET
00AC 90E9 LD R14,Y+
00AD 90F9 LD R15,Y+
00AE 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -