⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 一个关于AVR单片机的例程
💻 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 + -