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

📄 main.lis

📁 一个关于AVR单片机的例程
💻 LIS
字号:
                        .module main.c
                        .area lit(rom, con, rel)
 0000           _seg7_data::
 0000 3F06              .byte 63,6
 0002 5B4F              .byte 91,'O
 0004 666D              .byte 'f,'m
 0006 7D07              .byte 125,7
 0008 7F6F              .byte 127,'o
 000A 777C              .byte 'w,124
 000C 395E              .byte 57,94
 000E 7971              .byte 'y,'q
 0010 00                .byte 0
 0011                   .dbfile E:\avr\2.2.3\main.c
 0011                   .dbsym e seg7_data _seg7_data A[17:17]kc
                        .area text(rom, con, rel)
 0000                   .dbfile E:\avr\2.2.3\main.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 13
 0000           ; // ICC-AVR application builder : 2007-5-28 22:03:35
 0000           ; // Target : M16
 0000           ; // Crystal: 7.3728Mhz
 0000           ; // 连接:接好电源和晶振的跳线
 0000           ; // 7断数码管的ABCD接VCC,a~dp接PA0~PA7
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; const unsigned char seg7_data[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0~F and "shut"
 0000           ; volatile  unsigned char i; //在中断中会变化的变量,加volatile限定词定义
 0000           ; 
 0000           ; void port_init(void)
 0000           ; {
 0000                   .dbline 14
 0000           ;  PORTA = 0x00;
 0000 2224              clr R2
 0002 2BBA              out 0x1b,R2
 0004                   .dbline 15
 0004           ;  DDRA  = 0xFF;
 0004 8FEF              ldi R24,255
 0006 8ABB              out 0x1a,R24
 0008                   .dbline 16
 0008           ;  PORTB = 0x00;
 0008 28BA              out 0x18,R2
 000A                   .dbline 17
 000A           ;  DDRB  = 0x00;
 000A 27BA              out 0x17,R2
 000C                   .dbline 18
 000C           ;  PORTC = 0x00; //m103 output only
 000C 25BA              out 0x15,R2
 000E                   .dbline 19
 000E           ;  DDRC  = 0x00;
 000E 24BA              out 0x14,R2
 0010                   .dbline 20
 0010           ;  PORTD = 0x00;
 0010 22BA              out 0x12,R2
 0012                   .dbline 21
 0012           ;  DDRD  = 0x00;
 0012 21BA              out 0x11,R2
 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 29
 0016           ; }
 0016           ; 
 0016           ; //TIMER1 initialize - prescale:256
 0016           ; // WGM: 0) Normal, TOP=0xFFFF
 0016           ; // desired value: 1Sec
 0016           ; // actual value:  1.000Sec (0.0%)
 0016           ; void timer1_init(void)
 0016           ; {
 0016                   .dbline 30
 0016           ;  TCCR1B = 0x00; //stop
 0016 2224              clr R2
 0018 2EBC              out 0x2e,R2
 001A                   .dbline 31
 001A           ;  TCNT1H = 0x8F; //setup
 001A 8FE8              ldi R24,143
 001C 8DBD              out 0x2d,R24
 001E                   .dbline 32
 001E           ;  TCNT1L = 0x81;
 001E 81E8              ldi R24,129
 0020 8CBD              out 0x2c,R24
 0022                   .dbline 33
 0022           ;  OCR1AH = 0x70;
 0022 80E7              ldi R24,112
 0024 8BBD              out 0x2b,R24
 0026                   .dbline 34
 0026           ;  OCR1AL = 0x7F;
 0026 8FE7              ldi R24,127
 0028 8ABD              out 0x2a,R24
 002A                   .dbline 35
 002A           ;  OCR1BH = 0x70;
 002A 80E7              ldi R24,112
 002C 89BD              out 0x29,R24
 002E                   .dbline 36
 002E           ;  OCR1BL = 0x7F;
 002E 8FE7              ldi R24,127
 0030 88BD              out 0x28,R24
 0032                   .dbline 37
 0032           ;  ICR1H  = 0x70;
 0032 80E7              ldi R24,112
 0034 87BD              out 0x27,R24
 0036                   .dbline 38
 0036           ;  ICR1L  = 0x7F;
 0036 8FE7              ldi R24,127
 0038 86BD              out 0x26,R24
 003A                   .dbline 39
 003A           ;  TCCR1A = 0x00;
 003A 2FBC              out 0x2f,R2
 003C                   .dbline 40
 003C           ;  TCCR1B = 0x04; //start Timer
 003C 84E0              ldi R24,4
 003E 8EBD              out 0x2e,R24
 0040                   .dbline -2
 0040           L2:
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbend
                        .area vector(rom, abs)
                        .org 32
 0020 0C942100          jmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 0042                   .dbfile E:\avr\2.2.3\main.c
 0042                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
                        .even
 0042           _timer1_ovf_isr::
 0042 2A92              st -y,R2
 0044 8A93              st -y,R24
 0046 9A93              st -y,R25
 0048 2FB6              in R2,0x3f
 004A 2A92              st -y,R2
 004C                   .dbline -1
 004C                   .dbline 45
 004C                   .dbline 47
 004C 8FE8              ldi R24,143
 004E 8DBD              out 0x2d,R24
 0050                   .dbline 48
 0050 81E8              ldi R24,129
 0052 8CBD              out 0x2c,R24
 0054                   .dbline 49
 0054 80910000          lds R24,_i
 0058 8F5F              subi R24,255    ; addi 1
 005A 80930000          sts _i,R24
 005E                   .dbline 50
 005E 80910000          lds R24,_i
 0062 8A30              cpi R24,10
 0064 19F4              brne L4
 0066                   .dbline 50
 0066 2224              clr R2
 0068 20920000          sts _i,R2
 006C           L4:
 006C                   .dbline -2
 006C           L3:
 006C 2990              ld R2,y+
 006E 2FBE              out 0x3f,R2
 0070 9991              ld R25,y+
 0072 8991              ld R24,y+
 0074 2990              ld R2,y+
 0076                   .dbline 0 ; func end
 0076 1895              reti
 0078                   .dbend
 0078                   .dbfunc e init_devices _init_devices fV
                        .even
 0078           _init_devices::
 0078                   .dbline -1
 0078                   .dbline 55
 0078           ; }
 0078           ; 
 0078           ; #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
 0078           ; void timer1_ovf_isr(void)
 0078           ; {
 0078           ;  //TIMER1 has overflowed
 0078           ;  TCNT1H = 0x8F; //reload counter high value
 0078           ;  TCNT1L = 0x81; //reload counter low value
 0078           ;  i++;   //在文件开始的定义,volatile unsigned char i;
 0078           ;  if(i==10) i=0;
 0078           ; }
 0078           ; 
 0078           ; //call this routine to initialize all peripherals
 0078           ; void init_devices(void)
 0078           ; {
 0078                   .dbline 57
 0078           ;  //stop errant interrupts until set up
 0078           ;  CLI(); //disable all interrupts
 0078 F894              cli
 007A                   .dbline 58
 007A           ;  port_init();
 007A C2DF              xcall _port_init
 007C                   .dbline 59
 007C           ;  timer1_init();
 007C CCDF              xcall _timer1_init
 007E                   .dbline 61
 007E           ; 
 007E           ;  MCUCR = 0x00;
 007E 2224              clr R2
 0080 25BE              out 0x35,R2
 0082                   .dbline 62
 0082           ;  GICR  = 0x00;
 0082 2BBE              out 0x3b,R2
 0084                   .dbline 63
 0084           ;  TIMSK = 0x04; //timer interrupt sources ,这里允许了timer1溢出中断。
 0084 84E0              ldi R24,4
 0086 89BF              out 0x39,R24
 0088                   .dbline 64
 0088           ;  SEI(); //re-enable interrupts
 0088 7894              sei
 008A                   .dbline -2
 008A           L6:
 008A                   .dbline 0 ; func end
 008A 0895              ret
 008C                   .dbend
 008C                   .dbfunc e main _main fV
                        .even
 008C           _main::
 008C                   .dbline -1
 008C                   .dbline 69
 008C           ;  //all peripherals are now initialized
 008C           ; }
 008C           ; 
 008C           ; void main(void)
 008C           ; {
 008C                   .dbline 70
 008C           ;  init_devices(); //初始化,包含了定时器的初始化
 008C F5DF              xcall _init_devices
 008E 09C0              xjmp L9
 0090           L8:
 0090                   .dbline 72
 0090                   .dbline 73
 0090 80E0              ldi R24,<_seg7_data
 0092 90E0              ldi R25,>_seg7_data
 0094 E0910000          lds R30,_i
 0098 FF27              clr R31
 009A E80F              add R30,R24
 009C F91F              adc R31,R25
 009E E491              lpm R30,Z
 00A0 EBBB              out 0x1b,R30
 00A2                   .dbline 74
 00A2           L9:
 00A2                   .dbline 71
 00A2 F6CF              xjmp L8
 00A4           X0:
 00A4                   .dbline -2
 00A4           L7:
 00A4                   .dbline 0 ; func end
 00A4 0895              ret
 00A6                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\avr\2.2.3\main.c
 0000           _i::
 0000                   .blkb 1
 0001                   .dbsym e i _i c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -