📄 pwm.lis
字号:
.module PWM.C
.area text(rom, con, rel)
0000 .dbfile D:\实验程序\PWM输出\PWM.C
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 5
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 6
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 2BBA out 0x1b,R2
0004 .dbline 7
0004 ; DDRA = 0x00;
0004 2ABA out 0x1a,R2
0006 .dbline 8
0006 ; PORTB = 0x00;
0006 28BA out 0x18,R2
0008 .dbline 9
0008 ; DDRB = 0x00;
0008 27BA out 0x17,R2
000A .dbline 10
000A ; PORTC = 0x00; //m103 output only
000A 25BA out 0x15,R2
000C .dbline 11
000C ; DDRC = 0x00;
000C 24BA out 0x14,R2
000E .dbline 12
000E ; PORTD = 0xff;
000E 8FEF ldi R24,255
0010 82BB out 0x12,R24
0012 .dbline 13
0012 ; DDRD = 0xff;
0012 81BB out 0x11,R24
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e timer1_init _timer1_init fV
.even
0016 _timer1_init::
0016 .dbline -1
0016 .dbline 21
0016 ; }
0016 ;
0016 ; //TIMER1 initialize - prescale:64
0016 ; // WGM: 10) PWM phz correct, TOP= ICRn
0016 ; // desired value: 1000Hz
0016 ; // actual value: 1000.000Hz (0.0%)
0016 ; void timer1_init(void)
0016 ; {
0016 .dbline 22
0016 ; TCCR1B = 0x00; //stop
0016 2224 clr R2
0018 2EBC out 0x2e,R2
001A .dbline 23
001A ; TCNT1H = 0xFF; //setup
001A 8FEF ldi R24,255
001C 8DBD out 0x2d,R24
001E .dbline 24
001E ; TCNT1L = 0x83;
001E 83E8 ldi R24,131
0020 8CBD out 0x2c,R24
0022 .dbline 25
0022 ; OCR1AH = 0x00;
0022 2BBC out 0x2b,R2
0024 .dbline 26
0024 ; OCR1AL = 0x65; //占空比
0024 85E6 ldi R24,101
0026 8ABD out 0x2a,R24
0028 .dbline 27
0028 ; OCR1BH = 0x00;
0028 29BC out 0x29,R2
002A .dbline 28
002A ; OCR1BL = 0x10; //占空比
002A 80E1 ldi R24,16
002C 88BD out 0x28,R24
002E .dbline 29
002E ; ICR1H = 0x00;
002E 27BC out 0x27,R2
0030 .dbline 30
0030 ; ICR1L = 0x7D;
0030 8DE7 ldi R24,125
0032 86BD out 0x26,R24
0034 .dbline 31
0034 ; TCCR1A = 0xA2;
0034 82EA ldi R24,162
0036 8FBD out 0x2f,R24
0038 .dbline 32
0038 ; TCCR1B = 0x13; //start Timer
0038 83E1 ldi R24,19
003A 8EBD out 0x2e,R24
003C .dbline -2
003C L2:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbend
003E .dbfunc e init_devices _init_devices fV
.even
003E _init_devices::
003E .dbline -1
003E .dbline 37
003E ; }
003E ;
003E ; //call this routine to initialize all peripherals
003E ; void init_devices(void)
003E ; {
003E .dbline 39
003E ; //stop errant interrupts until set up
003E ; CLI(); //disable all interrupts
003E F894 cli
0040 .dbline 40
0040 ; port_init();
0040 DFDF xcall _port_init
0042 .dbline 41
0042 ; timer1_init();
0042 E9DF xcall _timer1_init
0044 .dbline 43
0044 ;
0044 ; MCUCR = 0x00;
0044 2224 clr R2
0046 25BE out 0x35,R2
0048 .dbline 44
0048 ; GICR = 0x00;
0048 2BBE out 0x3b,R2
004A .dbline 45
004A ; TIMSK = 0x00; //timer interrupt sources
004A 29BE out 0x39,R2
004C .dbline 46
004C ; SEI(); //re-enable interrupts
004C 7894 sei
004E .dbline -2
004E L3:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbend
0050 .dbfunc e main _main fI
.even
0050 _main::
0050 .dbline -1
0050 .dbline 51
0050 ; //all peripherals are now initialized
0050 ; }
0050 ;
0050 ; main()
0050 ; {
0050 .dbline 52
0050 ; init_devices();
0050 F6DF xcall _init_devices
0052 .dbline -2
0052 L4:
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbend
0054 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -