📄 pwm_ctc.lis
字号:
.module pwm_ctc.c
.area text(rom, con, rel)
0000 .dbfile F:\avrprojs\pwm_ctc\pwm_ctc.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 9
0000 ; //ICC-AVR application builder : 2008-8-4 下午 05:07:24
0000 ; // Target : M48
0000 ; // Crystal: 1.0000Mhz
0000 ;
0000 ; #include <iom48v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 10
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 25B8 out 0x5,R2
0004 .dbline 11
0004 ; DDRB = 0x00;
0004 24B8 out 0x4,R2
0006 .dbline 12
0006 ; PORTC = 0x00; //m103 output only
0006 28B8 out 0x8,R2
0008 .dbline 13
0008 ; DDRC = 0x00;
0008 27B8 out 0x7,R2
000A .dbline 14
000A ; PORTD = 0x00;
000A 2BB8 out 0xb,R2
000C .dbline 15
000C ; DDRD = 0x60;
000C 80E6 ldi R24,96
000E 8AB9 out 0xa,R24
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbend
0012 .dbfunc e timer0_init _timer0_init fV
.even
0012 _timer0_init::
0012 .dbline -1
0012 .dbline 23
0012 ; }
0012 ;
0012 ; //TIMER0 initialize - prescale:8
0012 ; // WGM: CTC
0012 ; // desired value: 1000Hz
0012 ; // actual value: 992.063Hz (-0.8%)
0012 ; void timer0_init(void)
0012 ; {
0012 .dbline 24
0012 ; TCCR0B = 0x00; //stop
0012 2224 clr R2
0014 25BC out 0x25,R2
0016 .dbline 25
0016 ; TCNT0 = 0x01; //set count
0016 81E0 ldi R24,1
0018 86BD out 0x26,R24
001A .dbline 26
001A ; TCCR0A = 0x72;
001A 82E7 ldi R24,114
001C 84BD out 0x24,R24
001E .dbline 27
001E ; TCCR0B = 0x0b; //start timer
001E 8BE0 ldi R24,11
0020 85BD out 0x25,R24
0022 .dbline 28
0022 ; OCR0A= 0x80;
0022 80E8 ldi R24,128
0024 87BD out 0x27,R24
0026 .dbline -2
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbend
.area vector(rom, abs)
.org 28
001C 14C0 rjmp _timer0_compa_isr
.area text(rom, con, rel)
0028 .dbfile F:\avrprojs\pwm_ctc\pwm_ctc.c
0028 .dbfunc e timer0_compa_isr _timer0_compa_isr fV
.even
0028 _timer0_compa_isr::
0028 8A93 st -y,R24
002A 8FB7 in R24,0x3f
002C 8A93 st -y,R24
002E .dbline -1
002E .dbline 33
002E ; }
002E ;
002E ; #pragma interrupt_handler timer0_compa_isr:15
002E ; void timer0_compa_isr(void)
002E ; {
002E .dbline 34
002E ; TCNT0=0x01;
002E 81E0 ldi R24,1
0030 86BD out 0x26,R24
0032 .dbline 35
0032 ; OCR0A= 0x80;
0032 80E8 ldi R24,128
0034 87BD out 0x27,R24
0036 .dbline -2
0036 L3:
0036 8991 ld R24,y+
0038 8FBF out 0x3f,R24
003A 8991 ld R24,y+
003C .dbline 0 ; func end
003C 1895 reti
003E .dbend
.area vector(rom, abs)
.org 30
001E 1FC0 rjmp _timer0_compb_isr
.area text(rom, con, rel)
003E .dbfile F:\avrprojs\pwm_ctc\pwm_ctc.c
003E .dbfunc e timer0_compb_isr _timer0_compb_isr fV
.even
003E _timer0_compb_isr::
003E .dbline -1
003E .dbline 41
003E ; //compare TCNT0=OCR0A
003E ; }
003E ;
003E ; #pragma interrupt_handler timer0_compb_isr:16
003E ; void timer0_compb_isr(void)
003E ; {
003E .dbline -2
003E L4:
003E .dbline 0 ; func end
003E 1895 reti
0040 .dbend
0040 .dbfunc e init_devices _init_devices fV
.even
0040 _init_devices::
0040 .dbline -1
0040 .dbline 47
0040 ; //compare TCNT0=OCR0B
0040 ; }
0040 ;
0040 ; //call this routine to initialize all peripherals
0040 ; void init_devices(void)
0040 ; {
0040 .dbline 49
0040 ; //stop errant interrupts until set up
0040 ; CLI(); //disable all interrupts
0040 F894 cli
0042 .dbline 50
0042 ; port_init();
0042 DEDF rcall _port_init
0044 .dbline 51
0044 ; timer0_init();
0044 E6DF rcall _timer0_init
0046 .dbline 53
0046 ;
0046 ; MCUCR = 0x00;
0046 2224 clr R2
0048 25BE out 0x35,R2
004A .dbline 54
004A ; EICRA = 0x00; //extended ext ints
004A 20926900 sts 105,R2
004E .dbline 55
004E ; EIMSK = 0x00;
004E 2DBA out 0x1d,R2
0050 .dbline 57
0050 ;
0050 ; TIMSK0 = 0x06; //timer 0 interrupt sources
0050 86E0 ldi R24,6
0052 80936E00 sts 110,R24
0056 .dbline 58
0056 ; TIMSK1 = 0x00; //timer 1 interrupt sources
0056 20926F00 sts 111,R2
005A .dbline 59
005A ; TIMSK2 = 0x00; //timer 2 interrupt sources
005A 20927000 sts 112,R2
005E .dbline 61
005E ;
005E ; PCMSK0 = 0x00; //pin change mask 0
005E 20926B00 sts 107,R2
0062 .dbline 62
0062 ; PCMSK1 = 0x00; //pin change mask 1
0062 20926C00 sts 108,R2
0066 .dbline 63
0066 ; PCMSK2 = 0x00; //pin change mask 2
0066 20926D00 sts 109,R2
006A .dbline 64
006A ; PCICR = 0x00; //pin change enable
006A 20926800 sts 104,R2
006E .dbline 65
006E ; PRR = 0x00; //power controller
006E 20926400 sts 100,R2
0072 .dbline 66
0072 ; SEI(); //re-enable interrupts
0072 7894 sei
0074 .dbline -2
0074 L5:
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbend
0076 .dbfunc e main _main fV
.even
0076 _main::
0076 .dbline -1
0076 .dbline 70
0076 ; //all peripherals are now initialized
0076 ; }
0076 ; void main()
0076 ; {
0076 .dbline 71
0076 ; init_devices();
0076 E4DF rcall _init_devices
0078 L7:
0078 .dbline 75
0078 .dbline 77
0078 L8:
0078 .dbline 73
0078 FFCF rjmp L7
007A X0:
007A .dbline -2
007A L6:
007A .dbline 0 ; func end
007A 0895 ret
007C .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -