📄 内部eeprom.s
字号:
.module _内部eeprom.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\内部eeprom/delay.h
.dbfunc e DelayUS _DelayUS fV
; time -> R16,R17
.even
_DelayUS::
.dbline -1
.dbline 9
; //包含所需头文件
; #include <ioM16v.h>
; #include <macros.h>
; #include "delay.h"
;
;
;
; /*------宏定义------*/
; #define uchar unsigned char
xjmp L3
L2:
.dbline 11
subi R16,1
sbci R17,0
L3:
.dbline 10
; #define uint unsigned int
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e DelayMS _DelayMS fV
; i -> R20,R21
; time -> R16,R17
.even
_DelayMS::
xcall push_gset1
.dbline -1
.dbline 20
;
;
;
; /*------函数定义------*/
; uchar e2prom_read(uint addr);
; void e2prom_write(uint addr,uchar wData);
;
;
;
;
xjmp L7
L6:
.dbline 23
; //端口初始化
; void port_init(void)
; {
.dbline 24
; PORTA = 0xFF;//设置端口方向、数据
ldi R20,1
ldi R21,0
xjmp L12
L9:
.dbline 25
L10:
.dbline 24
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 24
cpi R20,118
ldi R30,4
cpc R21,R30
brlo L9
.dbline 26
L7:
.dbline 22
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L6
tst R3
brne L6
X0:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\内部eeprom\内部eeprom.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 23
.dbline 24
ldi R24,255
out 0x1b,R24
.dbline 25
; DDRA = 0xFF;
out 0x1a,R24
.dbline 26
; PORTB = 0x00;
clr R2
out 0x18,R2
.dbline 27
; DDRB = 0x00;
out 0x17,R2
.dbline 28
; PORTC = 0x00;
out 0x15,R2
.dbline 29
; DDRC = 0x00;
out 0x14,R2
.dbline 30
; PORTD = 0x00;
out 0x12,R2
.dbline 31
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e e2prom_read _e2prom_read fc
; addr -> R16,R17
.even
_e2prom_read::
.dbline -1
.dbline 37
; }
;
;
; //功能:E2PROM单字节读函数
; uchar e2prom_read(uint addr)
; {
L15:
.dbline 38
L16:
.dbline 38
; while(EECR & (1<<EEWE)); //判断EEPROM是否工作
sbic 0x1c,1
rjmp L15
.dbline 39
; EEAR = addr; //送入EEPROM地址
out 0x1f,R17
out 0x1e,R16
.dbline 40
; EECR|=BIT(EERE); //EEPROM读使能
sbi 0x1c,0
.dbline 41
; return EEDR; //返回EEPROM数据寄存器数值
in R16,0x1d
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbsym r addr 16 i
.dbend
.dbfunc e e2prom_write _e2prom_write fV
; wData -> R18
; addr -> R16,R17
.even
_e2prom_write::
.dbline -1
.dbline 47
; }
;
;
; //功能:单字节写函数
; void e2prom_write(uint addr,uchar wData)
; {
L19:
.dbline 48
L20:
.dbline 48
; while(EECR & BIT(EEWE)); //判断EEPROM是否工作
sbic 0x1c,1
rjmp L19
.dbline 49
; EEAR=addr; //送入EEPROM地址
out 0x1f,R17
out 0x1e,R16
.dbline 50
; EEDR=wData; //送入EEPROM数据
out 0x1d,R18
.dbline 51
; EECR|=BIT(EEMWE); //EEPROM主写使能
sbi 0x1c,2
.dbline 52
; EECR|=BIT(EEWE); //EEPROM写使能
sbi 0x1c,1
.dbline -2
L18:
.dbline 0 ; func end
ret
.dbsym r wData 18 c
.dbsym r addr 16 i
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 57
; }
;
;
; void init_devices(void)
; {
.dbline 58
; CLI(); //禁止所有中断
cli
.dbline 59
; MCUCR = 0x00;//INT0、INT1中断触发方式
clr R2
out 0x35,R2
.dbline 60
; MCUCSR = 0x80;//禁止JTAG
ldi R24,128
out 0x34,R24
.dbline 61
; GICR = 0x00;//外部中断使能
out 0x3b,R2
.dbline 62
; port_init();
xcall _port_init
.dbline 63
; SEI();//开全局中断
sei
.dbline -2
L22:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 67
; }
; //主函数
; void main(void)
; {
.dbline 68
; init_devices();
xcall _init_devices
xjmp L25
L24:
.dbline 70
.dbline 71
clr R18
clr R16
clr R17
xcall _e2prom_write
.dbline 72
clr R16
clr R17
xcall _e2prom_read
out 0x1b,R16
.dbline 73
ldi R16,1000
ldi R17,3
xcall _DelayMS
.dbline 74
ldi R18,240
ldi R16,1
ldi R17,0
xcall _e2prom_write
.dbline 75
ldi R16,1
ldi R17,0
xcall _e2prom_read
out 0x1b,R16
.dbline 76
ldi R16,1000
ldi R17,3
xcall _DelayMS
.dbline 77
ldi R18,15
ldi R16,2
ldi R17,0
xcall _e2prom_write
.dbline 78
ldi R16,2
ldi R17,0
xcall _e2prom_read
out 0x1b,R16
.dbline 79
ldi R16,1000
ldi R17,3
xcall _DelayMS
.dbline 80
ldi R18,170
ldi R16,3
ldi R17,0
xcall _e2prom_write
.dbline 81
ldi R16,3
ldi R17,0
xcall _e2prom_read
out 0x1b,R16
.dbline 82
ldi R16,1000
ldi R17,3
xcall _DelayMS
.dbline 83
ldi R18,255
ldi R16,4
ldi R17,0
xcall _e2prom_write
.dbline 84
ldi R16,4
ldi R17,0
xcall _e2prom_read
out 0x1b,R16
.dbline 85
ldi R16,1000
ldi R17,3
xcall _DelayMS
.dbline 86
L25:
.dbline 69
xjmp L24
X1:
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -