📄 内部eeprom.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 + -