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

📄 eeprom.lis

📁 atmega8的片内eeprom读写操作程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module eeprom.c
                        .area text(rom, con, rel)
 0000                   .dbfile ./74164.h
 0000                   .dbfunc e write164 _write164 fV
 0000           ;             ch -> R20
 0000           ;              i -> R22
 0000           ;              x -> R16
                        .even
 0000           _write164::
 0000 00D0              rcall push_gset2
 0002                   .dbline -1
 0002                   .dbline 2
 0002           ; //ICC-AVR application builder : 2005-3-1 23:23:33
 0002           ; // Target : M8
 0002                   .dbline 5
 0002           ; // Crystal: 8.0000Mhz
 0002           ; 
 0002           ; #include <iom8v.h>
 0002 402F              mov R20,R16
 0004                   .dbline 6
 0004           ; #include <macros.h>
 0004 C098              cbi 0x18,0
 0006                   .dbline 7
 0006           ; #include <74164.h>
 0006 9698              cbi 0x12,6
 0008                   .dbline 8
 0008 6627              clr R22
 000A 0AC0              rjmp L5
 000C           L2:
 000C                   .dbline 8
 000C           ; #include <eeprom.h>
 000C                   .dbline 9
 000C           ; 
 000C 47FF              sbrs R20,7
 000E 02C0              rjmp L6
 0010                   .dbline 10
 0010           ; unsigned char    display[4];  // 显示缓冲区
 0010 979A              sbi 0x12,7
 0012 01C0              rjmp L7
 0014           L6:
 0014                   .dbline 12
 0014           ; unsigned char    dis;         // 当前显示
 0014           ; unsigned char    s,m;          // 时间
 0014 9798              cbi 0x12,7
 0016           L7:
 0016                   .dbline 13
 0016 440F              lsl R20
 0018                   .dbline 14
 0018 969A              sbi 0x12,6
 001A                   .dbline 15
 001A 0000              nop
 001C                   .dbline 16
 001C 9698              cbi 0x12,6
 001E                   .dbline 17
 001E           L3:
 001E                   .dbline 8
 001E 6395              inc R22
 0020           L5:
 0020                   .dbline 8
 0020 6830              cpi R22,8
 0022 A0F3              brlo L2
 0024                   .dbline 18
 0024           ; 
 0024           ; //TIMER0 initialisation - prescale:256
 0024           ; // WGM: Normal
 0024           ; // desired value: 5mSec
 0024           ; // actual value:  4.992mSec (0.2%)
 0024           ; void timer0_init(void)
 0024 C09A              sbi 0x18,0
 0026                   .dbline -2
 0026                   .dbline 19
 0026           ; {
 0026           L1:
 0026 00D0              rcall pop_gset2
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbsym r ch 20 c
 002A                   .dbsym r i 22 c
 002A                   .dbsym r x 16 c
 002A                   .dbend
 002A                   .dbfile D:\job\avrtest\web\example\eeprom\eeprom.c
 002A                   .dbfunc e timer0_init _timer0_init fV
                        .even
 002A           _timer0_init::
 002A                   .dbline -1
 002A                   .dbline 19
 002A                   .dbline 20
 002A           ;  TCCR0 = 0x00; //stop
 002A 2224              clr R2
 002C 23BE              out 0x33,R2
 002E                   .dbline 21
 002E           ;  TCNT0 = 0x64; //set count
 002E 84E6              ldi R24,100
 0030 82BF              out 0x32,R24
 0032                   .dbline 22
 0032           ;  TCCR0 = 0x04; //start timer
 0032 84E0              ldi R24,4
 0034 83BF              out 0x33,R24
 0036                   .dbline -2
 0036                   .dbline 23
 0036           ; }
 0036           L8:
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbend
                        .area vector(rom, abs)
                        .org 18
 0012 1CC0              rjmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 0038                   .dbfile D:\job\avrtest\web\example\eeprom\eeprom.c
 0038                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 0038           _timer0_ovf_isr::
 0038 00D0              rcall push_lset
 003A 00D0              rcall push_gset1
 003C                   .dbline -1
 003C                   .dbline 27
 003C           ; 
 003C           ; #pragma interrupt_handler timer0_ovf_isr:10
 003C           ; void timer0_ovf_isr(void)
 003C           ; {
 003C                   .dbline 28
 003C           ;  TCNT0 = 0x64; //reload counter value
 003C 84E6              ldi R24,100
 003E 82BF              out 0x32,R24
 0040                   .dbline 30
 0040 40910200          lds R20,_dis
 0044 5527              clr R21
 0046 4030              cpi R20,0
 0048 4507              cpc R20,R21
 004A 69F0              breq L13
 004C           X0:
 004C 4130              cpi R20,1
 004E E0E0              ldi R30,0
 0050 5E07              cpc R21,R30
 0052 A1F0              breq L14
 0054 4230              cpi R20,2
 0056 E0E0              ldi R30,0
 0058 5E07              cpc R21,R30
 005A D9F0              breq L15
 005C 4330              cpi R20,3
 005E E0E0              ldi R30,0
 0060 5E07              cpc R21,R30
 0062 11F1              breq L16
 0064 2BC0              rjmp L10
 0066           X1:
 0066                   .dbline 30
 0066           ; //  display
 0066           ;     switch(dis){  //  显示
 0066           L13:
 0066                   .dbline 31
 0066           ;         case  0:  write164(display[dis] | 0x70);  break;
 0066 80E0              ldi R24,<_display
 0068 90E0              ldi R25,>_display
 006A E0910200          lds R30,_dis
 006E FF27              clr R31
 0070 E80F              add R30,R24
 0072 F91F              adc R31,R25
 0074 0081              ldd R16,z+0
 0076 0067              ori R16,112
 0078 C3DF              rcall _write164
 007A                   .dbline 31
 007A 20C0              rjmp L11
 007C           L14:
 007C                   .dbline 32
 007C           ;         case  1:  write164(display[dis] | 0xB0);  break;
 007C 80E0              ldi R24,<_display
 007E 90E0              ldi R25,>_display
 0080 E0910200          lds R30,_dis
 0084 FF27              clr R31
 0086 E80F              add R30,R24
 0088 F91F              adc R31,R25
 008A 0081              ldd R16,z+0
 008C 006B              ori R16,176
 008E B8DF              rcall _write164
 0090                   .dbline 32
 0090 15C0              rjmp L11
 0092           L15:
 0092                   .dbline 33
 0092           ;         case  2:  write164(display[dis] | 0xD0);  break;
 0092 80E0              ldi R24,<_display
 0094 90E0              ldi R25,>_display
 0096 E0910200          lds R30,_dis
 009A FF27              clr R31
 009C E80F              add R30,R24
 009E F91F              adc R31,R25
 00A0 0081              ldd R16,z+0
 00A2 006D              ori R16,208
 00A4 ADDF              rcall _write164
 00A6                   .dbline 33
 00A6 0AC0              rjmp L11
 00A8           L16:
 00A8                   .dbline 34
 00A8           ;         case  3:  write164(display[dis] | 0xE0);  break;
 00A8 80E0              ldi R24,<_display
 00AA 90E0              ldi R25,>_display
 00AC E0910200          lds R30,_dis
 00B0 FF27              clr R31
 00B2 E80F              add R30,R24
 00B4 F91F              adc R31,R25
 00B6 0081              ldd R16,z+0
 00B8 006E              ori R16,224
 00BA A2DF              rcall _write164
 00BC                   .dbline 34
 00BC           L10:
 00BC           L11:
 00BC                   .dbline 36
 00BC 80910200          lds R24,_dis
 00C0 8F5F              subi R24,255    ; addi 1
 00C2 282E              mov R2,R24
 00C4 20920200          sts _dis,R2
 00C8 83E0              ldi R24,3
 00CA 8215              cp R24,R2
 00CC 18F4              brsh L17
 00CE                   .dbline 36
 00CE 2224              clr R2
 00D0 20920200          sts _dis,R2
 00D4           L17:
 00D4                   .dbline -2
 00D4                   .dbline 38
 00D4           ;     }
 00D4           ;     if(++dis > 3) dis = 0;
 00D4           ; //end  display
 00D4           ; }
 00D4           L9:
 00D4 00D0              rcall pop_gset1
 00D6 00D0              rcall pop_lset
 00D8                   .dbline 0 ; func end
 00D8 1895              reti
 00DA                   .dbend
 00DA                   .dbfunc e timer1_init _timer1_init fV
                        .even
 00DA           _timer1_init::
 00DA                   .dbline -1
 00DA                   .dbline 45
 00DA           ; 
 00DA           ; //TIMER1 initialisation - prescale:1024
 00DA           ; // WGM: 0) Normal, TOP=0xFFFF
 00DA           ; // desired value: 1Hz
 00DA           ; // actual value:  1.000Hz (0.0%)
 00DA           ; void timer1_init(void)
 00DA           ; {
 00DA                   .dbline 46
 00DA           ;  TCCR1B = 0x00; //stop
 00DA 2224              clr R2
 00DC 2EBC              out 0x2e,R2
 00DE                   .dbline 47
 00DE           ;  TCNT1H = 0xE1; //setup
 00DE 81EE              ldi R24,225
 00E0 8DBD              out 0x2d,R24
 00E2                   .dbline 48
 00E2           ;  TCNT1L = 0x7C;
 00E2 8CE7              ldi R24,124
 00E4 8CBD              out 0x2c,R24
 00E6                   .dbline 49
 00E6           ;  OCR1AH = 0x1E;
 00E6 8EE1              ldi R24,30
 00E8 8BBD              out 0x2b,R24

⌨️ 快捷键说明

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