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

📄 eeprom.lis

📁 atmega8的片内eeprom读写操作程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -