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

📄 内部eeprom.lis

📁 AVR之ATMega16
💻 LIS
字号:
                        .module _内部eeprom.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\内部eeprom/delay.h
 0000                   .dbfunc e DelayUS _DelayUS fV
 0000           ;           time -> R16,R17
                        .even
 0000           _DelayUS::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; //包含所需头文件
 0000           ; #include <ioM16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "delay.h"
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; /*------宏定义------*/
 0000           ; #define uchar unsigned char
 0000 02C0              xjmp L3
 0002           L2:
 0002                   .dbline 11
 0002 0150              subi R16,1
 0004 1040              sbci R17,0
 0006           L3:
 0006                   .dbline 10
 0006           ; #define uint  unsigned int
 0006 81E0              ldi R24,1
 0008 90E0              ldi R25,0
 000A 8017              cp R24,R16
 000C 9107              cpc R25,R17
 000E C8F3              brlo L2
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbsym r time 16 i
 0012                   .dbend
 0012                   .dbfunc e DelayMS _DelayMS fV
 0012           ;              i -> R20,R21
 0012           ;           time -> R16,R17
                        .even
 0012           _DelayMS::
 0012 0E940000          xcall push_gset1
 0016                   .dbline -1
 0016                   .dbline 20
 0016           ; 
 0016           ; 
 0016           ; 
 0016           ; /*------函数定义------*/
 0016           ; uchar e2prom_read(uint addr);
 0016           ; void e2prom_write(uint addr,uchar wData);
 0016           ; 
 0016           ; 
 0016           ; 
 0016           ; 
 0016 09C0              xjmp L7
 0018           L6:
 0018                   .dbline 23
 0018           ; //端口初始化
 0018           ; void port_init(void)
 0018           ; {
 0018                   .dbline 24
 0018           ;  PORTA = 0xFF;//设置端口方向、数据
 0018 41E0              ldi R20,1
 001A 50E0              ldi R21,0
 001C 02C0              xjmp L12
 001E           L9:
 001E                   .dbline 25
 001E           L10:
 001E                   .dbline 24
 001E 4F5F              subi R20,255  ; offset = 1
 0020 5F4F              sbci R21,255
 0022           L12:
 0022                   .dbline 24
 0022 4637              cpi R20,118
 0024 E4E0              ldi R30,4
 0026 5E07              cpc R21,R30
 0028 D0F3              brlo L9
 002A                   .dbline 26
 002A           L7:
 002A                   .dbline 22
 002A 1801              movw R2,R16
 002C 0150              subi R16,1
 002E 1040              sbci R17,0
 0030 2220              tst R2
 0032 91F7              brne L6
 0034 3320              tst R3
 0036 81F7              brne L6
 0038           X0:
 0038                   .dbline -2
 0038           L5:
 0038 0E940000          xcall pop_gset1
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbsym r i 20 i
 003E                   .dbsym r time 16 i
 003E                   .dbend
 003E                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\内部eeprom\内部eeprom.c
 003E                   .dbfunc e port_init _port_init fV
                        .even
 003E           _port_init::
 003E                   .dbline -1
 003E                   .dbline 23
 003E                   .dbline 24
 003E 8FEF              ldi R24,255
 0040 8BBB              out 0x1b,R24
 0042                   .dbline 25
 0042           ;  DDRA  = 0xFF;
 0042 8ABB              out 0x1a,R24
 0044                   .dbline 26
 0044           ;  PORTB = 0x00;
 0044 2224              clr R2
 0046 28BA              out 0x18,R2
 0048                   .dbline 27
 0048           ;  DDRB  = 0x00;
 0048 27BA              out 0x17,R2
 004A                   .dbline 28
 004A           ;  PORTC = 0x00;
 004A 25BA              out 0x15,R2
 004C                   .dbline 29
 004C           ;  DDRC  = 0x00;
 004C 24BA              out 0x14,R2
 004E                   .dbline 30
 004E           ;  PORTD = 0x00;
 004E 22BA              out 0x12,R2
 0050                   .dbline 31
 0050           ;  DDRD  = 0x00;
 0050 21BA              out 0x11,R2
 0052                   .dbline -2
 0052           L13:
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbend
 0054                   .dbfunc e e2prom_read _e2prom_read fc
 0054           ;           addr -> R16,R17
                        .even
 0054           _e2prom_read::
 0054                   .dbline -1
 0054                   .dbline 37
 0054           ; }
 0054           ; 
 0054           ; 
 0054           ; //功能:E2PROM单字节读函数
 0054           ; uchar e2prom_read(uint addr)  
 0054           ; {
 0054           L15:
 0054                   .dbline 38
 0054           L16:
 0054                   .dbline 38
 0054           ;  while(EECR & (1<<EEWE));  //判断EEPROM是否工作
 0054 E199              sbic 0x1c,1
 0056 FECF              rjmp L15
 0058                   .dbline 39
 0058           ;  EEAR = addr;              //送入EEPROM地址
 0058 1FBB              out 0x1f,R17
 005A 0EBB              out 0x1e,R16
 005C                   .dbline 40
 005C           ;  EECR|=BIT(EERE);          //EEPROM读使能
 005C E09A              sbi 0x1c,0
 005E                   .dbline 41
 005E           ;  return EEDR;              //返回EEPROM数据寄存器数值
 005E 0DB3              in R16,0x1d
 0060                   .dbline -2
 0060           L14:
 0060                   .dbline 0 ; func end
 0060 0895              ret
 0062                   .dbsym r addr 16 i
 0062                   .dbend
 0062                   .dbfunc e e2prom_write _e2prom_write fV
 0062           ;          wData -> R18
 0062           ;           addr -> R16,R17
                        .even
 0062           _e2prom_write::
 0062                   .dbline -1
 0062                   .dbline 47
 0062           ; }
 0062           ; 
 0062           ; 
 0062           ; //功能:单字节写函数
 0062           ; void e2prom_write(uint addr,uchar wData)
 0062           ; {
 0062           L19:
 0062                   .dbline 48
 0062           L20:
 0062                   .dbline 48
 0062           ;  while(EECR & BIT(EEWE));  //判断EEPROM是否工作
 0062 E199              sbic 0x1c,1
 0064 FECF              rjmp L19
 0066                   .dbline 49
 0066           ;  EEAR=addr;                //送入EEPROM地址
 0066 1FBB              out 0x1f,R17
 0068 0EBB              out 0x1e,R16
 006A                   .dbline 50
 006A           ;  EEDR=wData;               //送入EEPROM数据
 006A 2DBB              out 0x1d,R18
 006C                   .dbline 51
 006C           ;  EECR|=BIT(EEMWE);         //EEPROM主写使能
 006C E29A              sbi 0x1c,2
 006E                   .dbline 52
 006E           ;  EECR|=BIT(EEWE);          //EEPROM写使能
 006E E19A              sbi 0x1c,1
 0070                   .dbline -2
 0070           L18:
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072                   .dbsym r wData 18 c
 0072                   .dbsym r addr 16 i
 0072                   .dbend
 0072                   .dbfunc e init_devices _init_devices fV
                        .even
 0072           _init_devices::
 0072                   .dbline -1
 0072                   .dbline 57
 0072           ; }
 0072           ; 
 0072           ; 
 0072           ; void init_devices(void)
 0072           ; {
 0072                   .dbline 58
 0072           ;  CLI(); //禁止所有中断
 0072 F894              cli
 0074                   .dbline 59
 0074           ;  MCUCR  = 0x00;//INT0、INT1中断触发方式
 0074 2224              clr R2
 0076 25BE              out 0x35,R2
 0078                   .dbline 60
 0078           ;  MCUCSR = 0x80;//禁止JTAG
 0078 80E8              ldi R24,128
 007A 84BF              out 0x34,R24
 007C                   .dbline 61
 007C           ;  GICR   = 0x00;//外部中断使能
 007C 2BBE              out 0x3b,R2
 007E                   .dbline 62
 007E           ;  port_init();
 007E DFDF              xcall _port_init
 0080                   .dbline 63
 0080           ;  SEI();//开全局中断
 0080 7894              sei
 0082                   .dbline -2
 0082           L22:
 0082                   .dbline 0 ; func end
 0082 0895              ret
 0084                   .dbend
 0084                   .dbfunc e main _main fV
                        .even
 0084           _main::
 0084                   .dbline -1
 0084                   .dbline 67
 0084           ; }
 0084           ; //主函数
 0084           ; void main(void)
 0084           ; {
 0084                   .dbline 68
 0084           ;  init_devices();
 0084 F6DF              xcall _init_devices
 0086 37C0              xjmp L25
 0088           L24:
 0088                   .dbline 70
 0088                   .dbline 71
 0088 2227              clr R18
 008A 0027              clr R16
 008C 1127              clr R17
 008E E9DF              xcall _e2prom_write
 0090                   .dbline 72
 0090 0027              clr R16
 0092 1127              clr R17
 0094 DFDF              xcall _e2prom_read
 0096 0BBB              out 0x1b,R16
 0098                   .dbline 73
 0098 08EE              ldi R16,1000
 009A 13E0              ldi R17,3
 009C BADF              xcall _DelayMS
 009E                   .dbline 74
 009E 20EF              ldi R18,240
 00A0 01E0              ldi R16,1
 00A2 10E0              ldi R17,0
 00A4 DEDF              xcall _e2prom_write
 00A6                   .dbline 75
 00A6 01E0              ldi R16,1
 00A8 10E0              ldi R17,0
 00AA D4DF              xcall _e2prom_read
 00AC 0BBB              out 0x1b,R16
 00AE                   .dbline 76
 00AE 08EE              ldi R16,1000
 00B0 13E0              ldi R17,3
 00B2 AFDF              xcall _DelayMS
 00B4                   .dbline 77
 00B4 2FE0              ldi R18,15
 00B6 02E0              ldi R16,2
 00B8 10E0              ldi R17,0
 00BA D3DF              xcall _e2prom_write
 00BC                   .dbline 78
 00BC 02E0              ldi R16,2
 00BE 10E0              ldi R17,0
 00C0 C9DF              xcall _e2prom_read
 00C2 0BBB              out 0x1b,R16
 00C4                   .dbline 79
 00C4 08EE              ldi R16,1000
 00C6 13E0              ldi R17,3
 00C8 A4DF              xcall _DelayMS
 00CA                   .dbline 80
 00CA 2AEA              ldi R18,170
 00CC 03E0              ldi R16,3
 00CE 10E0              ldi R17,0
 00D0 C8DF              xcall _e2prom_write
 00D2                   .dbline 81
 00D2 03E0              ldi R16,3
 00D4 10E0              ldi R17,0
 00D6 BEDF              xcall _e2prom_read
 00D8 0BBB              out 0x1b,R16
 00DA                   .dbline 82
 00DA 08EE              ldi R16,1000
 00DC 13E0              ldi R17,3
 00DE 99DF              xcall _DelayMS
 00E0                   .dbline 83
 00E0 2FEF              ldi R18,255
 00E2 04E0              ldi R16,4
 00E4 10E0              ldi R17,0
 00E6 BDDF              xcall _e2prom_write
 00E8                   .dbline 84
 00E8 04E0              ldi R16,4
 00EA 10E0              ldi R17,0
 00EC B3DF              xcall _e2prom_read
 00EE 0BBB              out 0x1b,R16
 00F0                   .dbline 85
 00F0 08EE              ldi R16,1000
 00F2 13E0              ldi R17,3
 00F4 8EDF              xcall _DelayMS
 00F6                   .dbline 86
 00F6           L25:
 00F6                   .dbline 69
 00F6 C8CF              xjmp L24
 00F8           X1:
 00F8                   .dbline -2
 00F8           L23:
 00F8                   .dbline 0 ; func end
 00F8 0895              ret
 00FA                   .dbend

⌨️ 快捷键说明

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