📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\administrator\桌面\教程\7断数码管\main.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 12
0000 ; // ICC-AVR application builder : 2007-2-14 21:34:00
0000 ; // Target : M16
0000 ; // Crystal: 7.3728Mhz
0000 ; // 工程DEMO 七段数码管显示演示
0000 ;
0000 ; #include "config.h"
0000 ;
0000 ; extern const led_data[16]; //声明外部led显示数据,led_data在led.c中
0000 ; uint16 countdata;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 13
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 2BBA out 0x1b,R2
0004 .dbline 14
0004 ; DDRA = 0x00;
0004 2ABA out 0x1a,R2
0006 .dbline 15
0006 ; PORTB = 0x00;
0006 28BA out 0x18,R2
0008 .dbline 16
0008 ; DDRB = 0x00;
0008 27BA out 0x17,R2
000A .dbline 17
000A ; PORTC = 0x00; //m103 output only
000A 25BA out 0x15,R2
000C .dbline 18
000C ; DDRC = 0x00;
000C 24BA out 0x14,R2
000E .dbline 19
000E ; PORTD = 0x00;
000E 22BA out 0x12,R2
0010 .dbline 20
0010 ; DDRD = 0x00;
0010 21BA out 0x11,R2
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e timer1_init _timer1_init fV
.even
0014 _timer1_init::
0014 .dbline -1
0014 .dbline 29
0014 ; }
0014 ; /***************************************************************/
0014 ; //定时器1用于一秒刷新 countdata 的值,达到从1-9999计秒的功能
0014 ; //TIMER1 initialize - prescale:1024
0014 ; // WGM: 0) Normal, TOP=0xFFFF
0014 ; // desired value: 1Sec
0014 ; // actual value: 1.000Sec (0.0%)
0014 ; void timer1_init(void)
0014 ; {
0014 .dbline 30
0014 ; TCCR1B = 0x00; //stop
0014 2224 clr R2
0016 2EBC out 0x2e,R2
0018 .dbline 31
0018 ; TCNT1H = 0xE3; //setup
0018 83EE ldi R24,227
001A 8DBD out 0x2d,R24
001C .dbline 32
001C ; TCNT1L = 0xE1;
001C 81EE ldi R24,225
001E 8CBD out 0x2c,R24
0020 .dbline 33
0020 ; OCR1AH = 0x1C;
0020 8CE1 ldi R24,28
0022 8BBD out 0x2b,R24
0024 .dbline 34
0024 ; OCR1AL = 0x1F;
0024 8FE1 ldi R24,31
0026 8ABD out 0x2a,R24
0028 .dbline 35
0028 ; OCR1BH = 0x1C;
0028 8CE1 ldi R24,28
002A 89BD out 0x29,R24
002C .dbline 36
002C ; OCR1BL = 0x1F;
002C 8FE1 ldi R24,31
002E 88BD out 0x28,R24
0030 .dbline 37
0030 ; ICR1H = 0x1C;
0030 8CE1 ldi R24,28
0032 87BD out 0x27,R24
0034 .dbline 38
0034 ; ICR1L = 0x1F;
0034 8FE1 ldi R24,31
0036 86BD out 0x26,R24
0038 .dbline 39
0038 ; TCCR1A = 0x00;
0038 2FBC out 0x2f,R2
003A .dbline 40
003A ; TCCR1B = 0x05; //start Timer
003A 85E0 ldi R24,5
003C 8EBD out 0x2e,R24
003E .dbline -2
003E L2:
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbend
.area vector(rom, abs)
.org 32
0020 0C942000 jmp _timer1_ovf_isr
.area text(rom, con, rel)
0040 .dbfile C:\DOCUME~1\administrator\桌面\教程\7断数码管\main.c
0040 .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
0040 _timer1_ovf_isr::
0040 2A92 st -y,R2
0042 3A92 st -y,R3
0044 8A93 st -y,R24
0046 9A93 st -y,R25
0048 EA93 st -y,R30
004A 2FB6 in R2,0x3f
004C 2A92 st -y,R2
004E .dbline -1
004E .dbline 45
004E .dbline 47
004E 83EE ldi R24,227
0050 8DBD out 0x2d,R24
0052 .dbline 48
0052 81EE ldi R24,225
0054 8CBD out 0x2c,R24
0056 .dbline 49
0056 80910000 lds R24,_countdata
005A 90910100 lds R25,_countdata+1
005E 0196 adiw R24,1
0060 90930100 sts _countdata+1,R25
0064 80930000 sts _countdata,R24
0068 .dbline 50
0068 8F30 cpi R24,15
006A E7E2 ldi R30,39
006C 9E07 cpc R25,R30
006E 31F4 brne L4
0070 .dbline 50
0070 2224 clr R2
0072 3324 clr R3
0074 30920100 sts _countdata+1,R3
0078 20920000 sts _countdata,R2
007C L4:
007C .dbline -2
007C L3:
007C 2990 ld R2,y+
007E 2FBE out 0x3f,R2
0080 E991 ld R30,y+
0082 9991 ld R25,y+
0084 8991 ld R24,y+
0086 3990 ld R3,y+
0088 2990 ld R2,y+
008A .dbline 0 ; func end
008A 1895 reti
008C .dbend
008C .dbfunc e init_devices _init_devices fV
.even
008C _init_devices::
008C .dbline -1
008C .dbline 56
008C ; }
008C ;
008C ; #pragma interrupt_handler timer1_ovf_isr:9
008C ; void timer1_ovf_isr(void)
008C ; {
008C ; //TIMER1 has overflowed
008C ; TCNT1H = 0xE3; //reload counter high value
008C ; TCNT1L = 0xE1; //reload counter low value
008C ; countdata++;
008C ; if(countdata==9999) countdata=0;
008C ; }
008C ;
008C ;
008C ; //call this routine to initialize all peripherals
008C ; void init_devices(void)
008C ; {
008C .dbline 58
008C ; //stop errant interrupts until set up
008C ; CLI(); //disable all interrupts
008C F894 cli
008E .dbline 59
008E ; port_init();
008E B8DF xcall _port_init
0090 .dbline 60
0090 ; led_init(); //7段数码管显示
0090 0E940000 xcall _led_init
0094 .dbline 62
0094 ;
0094 ; MCUCR = 0x00;
0094 2224 clr R2
0096 25BE out 0x35,R2
0098 .dbline 63
0098 ; GICR = 0x00;
0098 2BBE out 0x3b,R2
009A .dbline 64
009A ; TIMSK = 0x00; //timer interrupt sources
009A 29BE out 0x39,R2
009C .dbline 65
009C ; SEI(); //re-enable interrupts
009C 7894 sei
009E .dbline -2
009E L6:
009E .dbline 0 ; func end
009E 0895 ret
00A0 .dbend
00A0 .dbfunc e init_devices2 _init_devices2 fV
.even
00A0 _init_devices2::
00A0 .dbline -1
00A0 .dbline 73
00A0 ; //all peripherals are now initialized
00A0 ; }
00A0 ;
00A0 ; /**************************************************/
00A0 ; //只有综合应用才用到本函数
00A0 ; //call this routine to initialize all peripherals
00A0 ; void init_devices2(void)
00A0 ; {
00A0 .dbline 75
00A0 ; //stop errant interrupts until set up
00A0 ; CLI(); //disable all interrupts
00A0 F894 cli
00A2 .dbline 76
00A2 ; port_init();
00A2 AEDF xcall _port_init
00A4 .dbline 77
00A4 ; led_init(); //7段数码管显示
00A4 0E940000 xcall _led_init
00A8 .dbline 78
00A8 ; timer1_init(); //定时器1用于更新countdata的值,从1到9999变化
00A8 B5DF xcall _timer1_init
00AA .dbline 80
00AA ;
00AA ; MCUCR = 0x00;
00AA 2224 clr R2
00AC 25BE out 0x35,R2
00AE .dbline 81
00AE ; GICR = 0x00;
00AE 2BBE out 0x3b,R2
00B0 .dbline 82
00B0 ; TIMSK = 0x04; //注意这里允许定时器一溢出
00B0 84E0 ldi R24,4
00B2 89BF out 0x39,R24
00B4 .dbline 83
00B4 ; SEI(); //re-enable interrupts
00B4 7894 sei
00B6 .dbline -2
00B6 L7:
00B6 .dbline 0 ; func end
00B6 0895 ret
00B8 .dbend
00B8 .dbfunc e main _main fV
.even
00B8 _main::
00B8 .dbline -1
00B8 .dbline 93
00B8 ; //all peripherals are now initialized
00B8 ; }
00B8 ; /******************************************************************************/
00B8 ; //以下显示模式只保留一个,查看效果
00B8 ; /******************************************************************************/
00B8 ;
00B8 ; //综合应用例子
00B8 ;
00B8 ; void main(void)
00B8 ; {
00B8 .dbline 94
00B8 ; init_devices2(); //比init_devices()多了timer1_init(),TIMSK = 0x04;
00B8 F3DF xcall _init_devices2
00BA 07C0 xjmp L10
00BC L9:
00BC .dbline 96
00BC .dbline 97
00BC 2227 clr R18
00BE 00910000 lds R16,_countdata
00C2 10910100 lds R17,_countdata+1
00C6 0E940000 xcall _display
00CA .dbline 98
00CA L10:
00CA .dbline 95
00CA F8CF xjmp L9
00CC X0:
00CC .dbline -2
00CC L8:
00CC .dbline 0 ; func end
00CC 0895 ret
00CE .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\administrator\桌面\教程\7断数码管\main.c
0000 _countdata::
0000 .blkb 2
0002 .dbsym e countdata _countdata i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -