📄 eeprom.lis
字号:
00EA .dbline 50
00EA ; OCR1AL = 0x84;
00EA 84E8 ldi R24,132
00EC 8ABD out 0x2a,R24
00EE .dbline 51
00EE ; OCR1BH = 0x1E;
00EE 8EE1 ldi R24,30
00F0 89BD out 0x29,R24
00F2 .dbline 52
00F2 ; OCR1BL = 0x84;
00F2 84E8 ldi R24,132
00F4 88BD out 0x28,R24
00F6 .dbline 53
00F6 ; ICR1H = 0x1E;
00F6 8EE1 ldi R24,30
00F8 87BD out 0x27,R24
00FA .dbline 54
00FA ; ICR1L = 0x84;
00FA 84E8 ldi R24,132
00FC 86BD out 0x26,R24
00FE .dbline 55
00FE ; TCCR1A = 0x00;
00FE 2FBC out 0x2f,R2
0100 .dbline 56
0100 ; TCCR1B = 0x05; //start Timer
0100 85E0 ldi R24,5
0102 8EBD out 0x2e,R24
0104 .dbline -2
0104 .dbline 57
0104 ; }
0104 L19:
0104 .dbline 0 ; func end
0104 0895 ret
0106 .dbend
.area vector(rom, abs)
.org 16
0010 83C0 rjmp _timer1_ovf_isr
.area text(rom, con, rel)
0106 .dbfile D:\job\avrtest\web\example\eeprom\eeprom.c
0106 .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
0106 _timer1_ovf_isr::
0106 00D0 rcall push_lset
0108 .dbline -1
0108 .dbline 61
0108 ;
0108 ; #pragma interrupt_handler timer1_ovf_isr:9
0108 ; void timer1_ovf_isr(void)
0108 ; {
0108 .dbline 63
0108 ; //TIMER1 has overflowed
0108 ; TCNT1H = 0xE1; //reload counter high value
0108 81EE ldi R24,225
010A 8DBD out 0x2d,R24
010C .dbline 64
010C ; TCNT1L = 0x7C; //reload counter low value
010C 8CE7 ldi R24,124
010E 8CBD out 0x2c,R24
0110 .dbline 65
0110 ; if(++s == 60){
0110 80910100 lds R24,_s
0114 8F5F subi R24,255 ; addi 1
0116 282E mov R2,R24
0118 20920100 sts _s,R2
011C 8C33 cpi R24,60
011E 71F4 brne L21
0120 .dbline 65
0120 .dbline 66
0120 ; s = 0;
0120 2224 clr R2
0122 20920100 sts _s,R2
0126 .dbline 67
0126 ; if(++m == 60) m = 0;
0126 80910000 lds R24,_m
012A 8F5F subi R24,255 ; addi 1
012C 282E mov R2,R24
012E 20920000 sts _m,R2
0132 8C33 cpi R24,60
0134 19F4 brne L23
0136 .dbline 67
0136 2224 clr R2
0138 20920000 sts _m,R2
013C L23:
013C .dbline 68
013C ; }
013C L21:
013C .dbline 69
013C ; EEPROMwrite(1,s); // 保存时间
013C 20910100 lds R18,_s
0140 01E0 ldi R16,1
0142 10E0 ldi R17,0
0144 00D0 rcall _EEPROMwrite
0146 .dbline 70
0146 ; EEPROMwrite(2,m);
0146 20910000 lds R18,_m
014A 02E0 ldi R16,2
014C 10E0 ldi R17,0
014E 00D0 rcall _EEPROMwrite
0150 .dbline 71
0150 ; display[0] = s % 10; // 刷新显示缓冲
0150 1AE0 ldi R17,10
0152 00910100 lds R16,_s
0156 00D0 rcall mod8u
0158 00930300 sts _display,R16
015C .dbline 72
015C ; display[1] = s / 10;
015C 1AE0 ldi R17,10
015E 00910100 lds R16,_s
0162 00D0 rcall div8u
0164 00930400 sts _display+1,R16
0168 .dbline 73
0168 ; display[2] = m % 10;
0168 1AE0 ldi R17,10
016A 00910000 lds R16,_m
016E 00D0 rcall mod8u
0170 00930500 sts _display+2,R16
0174 .dbline 74
0174 ; display[3] = m / 10;
0174 1AE0 ldi R17,10
0176 00910000 lds R16,_m
017A 00D0 rcall div8u
017C 00930600 sts _display+3,R16
0180 .dbline -2
0180 .dbline 75
0180 ; }
0180 L20:
0180 00D0 rcall pop_lset
0182 .dbline 0 ; func end
0182 1895 reti
0184 .dbend
0184 .dbfunc e init_devices _init_devices fV
.even
0184 _init_devices::
0184 .dbline -1
0184 .dbline 79
0184 ;
0184 ; //call this routine to initialise all peripherals
0184 ; void init_devices(void)
0184 ; {
0184 .dbline 81
0184 ; //stop errant interrupts until set up
0184 ; CLI(); //disable all interrupts
0184 F894 cli
0186 .dbline 82
0186 ; DDRB = 0x01; // 初始化操作74LS164的管脚
0186 81E0 ldi R24,1
0188 87BB out 0x17,R24
018A .dbline 83
018A ; DDRD = 0xC0; // 初始化操作74LS164的管脚
018A 80EC ldi R24,192
018C 81BB out 0x11,R24
018E .dbline 84
018E ; timer0_init();
018E 4DDF rcall _timer0_init
0190 .dbline 85
0190 ; timer1_init();
0190 A4DF rcall _timer1_init
0192 .dbline 87
0192 ;
0192 ; MCUCR = 0x00;
0192 2224 clr R2
0194 25BE out 0x35,R2
0196 .dbline 88
0196 ; GICR = 0x00;
0196 2BBE out 0x3b,R2
0198 .dbline 89
0198 ; TIMSK = 0x05; //timer interrupt sources
0198 85E0 ldi R24,5
019A 89BF out 0x39,R24
019C .dbline 90
019C ; SEI(); //re-enable interrupts
019C 7894 sei
019E .dbline -2
019E .dbline 92
019E ; //all peripherals are now initialised
019E ; }
019E L28:
019E .dbline 0 ; func end
019E 0895 ret
01A0 .dbend
01A0 .dbfunc e main _main fV
.even
01A0 _main::
01A0 .dbline -1
01A0 .dbline 96
01A0 ;
01A0 ; //
01A0 ; void main(void)
01A0 ; {
01A0 .dbline 97
01A0 ; init_devices();
01A0 F1DF rcall _init_devices
01A2 .dbline 98
01A2 ; s = EEPROMread(1); // 读取时间
01A2 01E0 ldi R16,1
01A4 10E0 ldi R17,0
01A6 00D0 rcall _EEPROMread
01A8 00930100 sts _s,R16
01AC .dbline 99
01AC ; m = EEPROMread(2);
01AC 02E0 ldi R16,2
01AE 10E0 ldi R17,0
01B0 00D0 rcall _EEPROMread
01B2 00930000 sts _m,R16
01B6 .dbline 100
01B6 ; display[0] = s % 10; // 刷新显示缓冲
01B6 1AE0 ldi R17,10
01B8 00910100 lds R16,_s
01BC 00D0 rcall mod8u
01BE 00930300 sts _display,R16
01C2 .dbline 101
01C2 ; display[1] = s / 10;
01C2 1AE0 ldi R17,10
01C4 00910100 lds R16,_s
01C8 00D0 rcall div8u
01CA 00930400 sts _display+1,R16
01CE .dbline 102
01CE ; display[2] = m % 10;
01CE 1AE0 ldi R17,10
01D0 00910000 lds R16,_m
01D4 00D0 rcall mod8u
01D6 00930500 sts _display+2,R16
01DA .dbline 103
01DA ; display[3] = m / 10;
01DA 1AE0 ldi R17,10
01DC 00910000 lds R16,_m
01E0 00D0 rcall div8u
01E2 00930600 sts _display+3,R16
01E6 L33:
01E6 .dbline 104
01E6 L34:
01E6 .dbline 104
01E6 FFCF rjmp L33
01E8 X2:
01E8 .dbline -2
01E8 .dbline 105
01E8 ; while(1);
01E8 ; }
01E8 L29:
01E8 .dbline 0 ; func end
01E8 0895 ret
01EA .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\job\avrtest\web\example\eeprom\eeprom.c
0000 _m::
0000 .blkb 1
0001 .dbsym e m _m c
0001 _s::
0001 .blkb 1
0002 .dbsym e s _s c
0002 _dis::
0002 .blkb 1
0003 .dbsym e dis _dis c
0003 _display::
0003 .blkb 4
0007 .dbsym e display _display A[4:4]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -