📄 main.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 + -