📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\avr\2.2.2\main.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 11
0000 ; //ICC-AVR application builder : 2007-6-9 0:33:58
0000 ; // Target : M16
0000 ; // Crystal: 1.0000Mhz
0000 ; // 用途:演示定时器的工作原理
0000 ; // 作者:古欣
0000 ; // AVR与虚拟仪器 http://www.avrvi.com
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 12
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 2BBA out 0x1b,R2
0004 .dbline 13
0004 ; DDRA = 0x03; //PA0 PA1 输出
0004 83E0 ldi R24,3
0006 8ABB out 0x1a,R24
0008 .dbline 14
0008 ; PORTB = 0x00;
0008 28BA out 0x18,R2
000A .dbline 15
000A ; DDRB = 0xFF; //PB 输出
000A 8FEF ldi R24,255
000C 87BB out 0x17,R24
000E .dbline 16
000E ; PORTC = 0x00; //m103 output only
000E 25BA out 0x15,R2
0010 .dbline 17
0010 ; DDRC = 0x00;
0010 24BA out 0x14,R2
0012 .dbline 18
0012 ; PORTD = 0x00;
0012 22BA out 0x12,R2
0014 .dbline 19
0014 ; DDRD = 0x00;
0014 21BA out 0x11,R2
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e timer0_init _timer0_init fV
.even
0018 _timer0_init::
0018 .dbline -1
0018 .dbline 27
0018 ; }
0018 ;
0018 ; //TIMER0 initialize - prescale:8
0018 ; // WGM: Normal
0018 ; // desired value: 1KHz
0018 ; // actual value: 1.000KHz (0.0%)
0018 ; void timer0_init(void)
0018 ; {
0018 .dbline 28
0018 ; TCCR0 = 0x00; //stop
0018 2224 clr R2
001A 23BE out 0x33,R2
001C .dbline 29
001C ; TCNT0 = 0x83; //set count
001C 83E8 ldi R24,131
001E 82BF out 0x32,R24
0020 .dbline 30
0020 ; OCR0 = 0x7D; //set compare
0020 8DE7 ldi R24,125
0022 8CBF out 0x3c,R24
0024 .dbline 31
0024 ; TCCR0 = 0x02; //start timer
0024 82E0 ldi R24,2
0026 83BF out 0x33,R24
0028 .dbline -2
0028 L2:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
.area vector(rom, abs)
.org 76
004C 0C941500 jmp _timer0_comp_isr
.area text(rom, con, rel)
002A .dbfile E:\avr\2.2.2\main.c
002A .dbfunc e timer0_comp_isr _timer0_comp_isr fV
.even
002A _timer0_comp_isr::
002A 2A92 st -y,R2
002C 8A93 st -y,R24
002E 2FB6 in R2,0x3f
0030 2A92 st -y,R2
0032 .dbline -1
0032 .dbline 37
0032 ; }
0032 ;
0032 ; //比较匹配中断
0032 ; #pragma interrupt_handler timer0_comp_isr:20
0032 ; void timer0_comp_isr(void)
0032 ; {
0032 .dbline 39
0032 ; //compare occured TCNT0=OCR0
0032 ; if(OCR0==0x7D) //调整0x7D
0032 8CB7 in R24,0x3c
0034 8D37 cpi R24,125
0036 19F4 brne L4
0038 .dbline 40
0038 ; {
0038 .dbline 41
0038 ; OCR0=0x7F;
0038 8FE7 ldi R24,127
003A 8CBF out 0x3c,R24
003C .dbline 42
003C ; }
003C 02C0 xjmp L5
003E L4:
003E .dbline 44
003E ; else
003E ; {
003E .dbline 45
003E ; OCR0=0x7D;
003E 8DE7 ldi R24,125
0040 8CBF out 0x3c,R24
0042 .dbline 46
0042 ; }
0042 L5:
0042 .dbline 47
0042 ; PORTA ^= 0x01; //PA0取反
0042 81E0 ldi R24,1
0044 2BB2 in R2,0x1b
0046 2826 eor R2,R24
0048 2BBA out 0x1b,R2
004A .dbline -2
004A L3:
004A 2990 ld R2,y+
004C 2FBE out 0x3f,R2
004E 8991 ld R24,y+
0050 2990 ld R2,y+
0052 .dbline 0 ; func end
0052 1895 reti
0054 .dbend
.area vector(rom, abs)
.org 36
0024 0C942A00 jmp _timer0_ovf_isr
.area text(rom, con, rel)
0054 .dbfile E:\avr\2.2.2\main.c
0054 .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
0054 _timer0_ovf_isr::
0054 2A92 st -y,R2
0056 8A93 st -y,R24
0058 2FB6 in R2,0x3f
005A 2A92 st -y,R2
005C .dbline -1
005C .dbline 53
005C ; }
005C ;
005C ; //溢出中断中断
005C ; #pragma interrupt_handler timer0_ovf_isr:10
005C ; void timer0_ovf_isr(void)
005C ; {
005C .dbline 54
005C ; TCNT0 = 0x83; //reload counter value
005C 83E8 ldi R24,131
005E 82BF out 0x32,R24
0060 .dbline 55
0060 ; PORTA ^= 0x01; //PA0取反
0060 81E0 ldi R24,1
0062 2BB2 in R2,0x1b
0064 2826 eor R2,R24
0066 2BBA out 0x1b,R2
0068 .dbline -2
0068 L6:
0068 2990 ld R2,y+
006A 2FBE out 0x3f,R2
006C 8991 ld R24,y+
006E 2990 ld R2,y+
0070 .dbline 0 ; func end
0070 1895 reti
0072 .dbend
0072 .dbfunc e init_devices _init_devices fV
.even
0072 _init_devices::
0072 .dbline -1
0072 .dbline 60
0072 ; }
0072 ;
0072 ; //call this routine to initialize all peripherals
0072 ; void init_devices(void)
0072 ; {
0072 .dbline 62
0072 ; //stop errant interrupts until set up
0072 ; CLI(); //disable all interrupts
0072 F894 cli
0074 .dbline 63
0074 ; port_init();
0074 C5DF xcall _port_init
0076 .dbline 64
0076 ; timer0_init();
0076 D0DF xcall _timer0_init
0078 .dbline 66
0078 ;
0078 ; MCUCR = 0x00;
0078 2224 clr R2
007A 25BE out 0x35,R2
007C .dbline 67
007C ; GICR = 0x00;
007C 2BBE out 0x3b,R2
007E .dbline 68
007E ; TIMSK = 0x03; //timer interrupt sources 允许定时器零匹配和溢出中断
007E 83E0 ldi R24,3
0080 89BF out 0x39,R24
0082 .dbline 69
0082 ; SEI(); //re-enable interrupts
0082 7894 sei
0084 .dbline -2
0084 L7:
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbend
0086 .dbfunc e main _main fV
.even
0086 _main::
0086 .dbline -1
0086 .dbline 74
0086 ; //all peripherals are now initialized
0086 ; }
0086 ;
0086 ; void main(void)
0086 ; {
0086 .dbline 75
0086 ; init_devices();
0086 F5DF xcall _init_devices
0088 .dbline 76
0088 ; PORTA=0x00;
0088 2224 clr R2
008A 2BBA out 0x1b,R2
008C 02C0 xjmp L10
008E L9:
008E .dbline 78
008E .dbline 79
008E 22B6 in R2,0x32
0090 28BA out 0x18,R2
0092 .dbline 80
0092 L10:
0092 .dbline 77
0092 FDCF xjmp L9
0094 X0:
0094 .dbline -2
0094 L8:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -