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

📄 eeprom.s

📁 使用ICCAVR编写的AT24C16的读写函数
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module eeprom.c
	.area text(rom, con, rel)
	.dbfile E:\icc\eeprom/lcd_init.h
	.dbfunc e delay _delay fV
;              n -> R16,R17
	.even
_delay::
	.dbline -1
	.dbline 40
; //ICC-AVR application builder : 2008-10-8 下午 04:03:04
; // Target : M128
; // Crystal: 8.0000Mhz
; 
; #include <iom128v.h>
; #include <macros.h>
; #include "lcd_init.h"
; #include "eeprom_init.h"
; #include "DS1302.h"
; //iccavr
; //extern unsigned char twi_write(unsigned char addr, unsigned char dd);
; //extern unsigned char twi_read(unsigned char addr, unsigned char *dd);
; /*延时函数*/
; void delay_ms(unsigned char i) {
;  unsigned char a, b;
;  for (a = 1; a < i; a++) 
;  {
;   for (b = 1; b; b++) 
;         {
;          ;
;         }
;   }
; }
; void main(void)
; {
; 
;  unsigned char temp,i;
;  unsigned char send_flag=0,time_read=6;
;  PORTA = 0xFF;    /*打开上拉*/
;  DDRA = 0x00;    /*方向输入*/
;  PORTB = 0xF0;    /*电平设置*/
;  DDRB = 0xFF;    /*方向输出*/
;  PORTC = 0xFF;
;  DDRC = 0x00;
;  PORTD = 0xFF;
;  DDRD = 0x00;
;  ds1302_init();//ds1302初始化
;  ds1302_write_time();
;  disp_init();
;  for (i=0;i<20;i++)            //写入20个数据
L2:
	.dbline 41
L3:
	.dbline 41
;      {
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L2
	tst R3
	brne L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r n 16 i
	.dbend
	.dbfunc e chk_busy _chk_busy fV
	.even
_chk_busy::
	.dbline -1
	.dbline 44
; 	  twi_write((0x100+i),i);
; 	  delay(0xfff);
; 	 }
	.dbline 45
; 
	ldi R24,255
	out 0x1b,R24
	.dbline 46
;  //twi_read(0x08, &temp);
	lds R24,101
	andi R24,254
	sts 101,R24
	.dbline 47
;  //PORTB = ~temp;
	lds R24,101
	ori R24,2
	sts 101,R24
	.dbline 49
;  //temp ++;
;  //temp=0;
	clr R2
	out 0x1a,R2
	.dbline 51
;  //twi_write(0x08, temp);
;  
	lds R24,101
	ori R24,4
	sts 101,R24
L6:
	.dbline 52
L7:
	.dbline 52
;  
	sbic 0x19,7
	rjmp L6
	.dbline 53
;  delay(0xffff);
	lds R24,101
	andi R24,251
	sts 101,R24
	.dbline 54
; disp_word(0x80,"任务:EEPROM"); 
	ldi R24,255
	out 0x1a,R24
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_write_code _LCD_write_code fV
;           code -> R20
	.even
_LCD_write_code::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 58
; disp_word(0x90,"2008年10月09日");
; disp_word(0x88,"AT24C16");
; i=0;
; 
	.dbline 59
; while (1) 
	xcall _chk_busy
	.dbline 60
;     {
	lds R24,101
	andi R24,254
	sts 101,R24
	.dbline 61
;     ds1302_read_time();
	lds R24,101
	andi R24,253
	sts 101,R24
	.dbline 62
; 	disp_number16(0x8d,time_buf[6]);
	out 0x1b,R20
	.dbline 63
; 	if(time_buf[6]==0)
	lds R24,101
	ori R24,4
	sts 101,R24
	.dbline 64
; 	   {
	ldi R16,100
	ldi R17,0
	xcall _delay
	.dbline 65
; 	    send_flag=1;
	lds R24,101
	andi R24,251
	sts 101,R24
	.dbline -2
L9:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r code 20 c
	.dbend
	.dbfunc e LCD_write_data _LCD_write_data fV
;           data -> R20
	.even
_LCD_write_data::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 69
; 		if(time_buf[5]==time_read)
; 		send_flag=0;
; 	   }
; 	   if(send_flag==1)
	.dbline 70
; 	   {
	xcall _chk_busy
	.dbline 71
; 	    twi_read((0x100+i),&temp);
	lds R24,101
	ori R24,1
	sts 101,R24
	.dbline 72
; 		i++;
	lds R24,101
	andi R24,253
	sts 101,R24
	.dbline 73
; 	    send_flag=0;
	out 0x1b,R20
	.dbline 74
; 		time_read=time_buf[5];
	lds R24,101
	ori R24,4
	sts 101,R24
	.dbline 75
; 		disp_number10(0x98,temp);
	ldi R16,100
	ldi R17,0
	xcall _delay
	.dbline 76
; 	   }
	lds R24,101
	andi R24,251
	sts 101,R24
	.dbline -2
L10:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e disp_char _disp_char fV
;           asii -> R20
;       position -> R22
	.even
_disp_char::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 80
; 	
;     }
; }
; }
	.dbline 81
; }
	mov R16,R22
	xcall _LCD_write_code
	.dbline 82
; }
	mov R16,R20
	xcall _LCD_write_data
	.dbline -2
L11:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r asii 20 c
	.dbsym r position 22 c
	.dbend
	.dbfunc e disp_word _disp_word fV
;           word -> R20,R21
;       position -> R22
	.even
_disp_word::
	xcall push_gset2
	movw R20,R18
	mov R22,R16
	.dbline -1
	.dbline 97
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 98
; }
	mov R16,R22
	xcall _LCD_write_code
	xjmp L14
L13:
	.dbline 100
	.dbline 101
	movw R30,R20
	ldd R16,z+0
	xcall _LCD_write_data
	.dbline 102
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 103
L14:
	.dbline 99
; }
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L13
	.dbline -2
L12:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r word 20 pc
	.dbsym r position 22 c
	.dbend
	.dbfunc e disp_number10 _disp_number10 fV
;          num_l -> R22
;          num_h -> R10
;            num -> R20
;       position -> R22
	.even
_disp_number10::
	xcall push_gset3
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 111
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 113
; }
; }
	mov R16,R22
	xcall _LCD_write_code
	.dbline 114
; }
	cpi R20,10
	brlo L17
	.dbline 115
; }
	.dbline 116
; }
	ldi R17,10
	mov R16,R20
	xcall div8u
	mov R10,R16
	.dbline 117
; }
	ldi R17,10
	mov R16,R20
	xcall mod8u
	mov R22,R16
	.dbline 118
; }
	mov R16,R10
	subi R16,208    ; addi 48
	xcall _LCD_write_data
	.dbline 119
; }
	mov R16,R22
	subi R16,208    ; addi 48
	xcall _LCD_write_data
	.dbline 120
; }
	xjmp L18
L17:
	.dbline 122
	.dbline 123
	ldi R16,48
	xcall _LCD_write_data
	.dbline 124
	mov R16,R20
	subi R16,208    ; addi 48
	xcall _LCD_write_data
	.dbline 125
L18:
	.dbline -2
L16:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r num_l 22 c
	.dbsym r num_h 10 c
	.dbsym r num 20 c
	.dbsym r position 22 c
	.dbend
	.dbfunc e disp_number16 _disp_number16 fV
;          num_l -> R22
;          num_h -> R10
;            num -> R20
;       position -> R22
	.even
_disp_number16::
	xcall push_gset3
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 133
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 136
; }
; }
; }
	mov R16,R22
	xcall _LCD_write_code
	.dbline 137
; }
	cpi R20,10
	brlo L20
	.dbline 138
; }
	.dbline 139
; }
	mov R24,R20
	swap R24
	andi R24,#0x0F
	mov R10,R24
	.dbline 141
; }
; }
	ldi R17,16
	mov R16,R20
	xcall mod8u
	mov R22,R16
	.dbline 144
; }
; }
; }
	mov R16,R10
	subi R16,208    ; addi 48
	xcall _LCD_write_data
	.dbline 145
; }
	mov R16,R22
	subi R16,208    ; addi 48
	xcall _LCD_write_data
	.dbline 146
; }
	xjmp L21
L20:
	.dbline 148
	.dbline 151
	ldi R16,48
	xcall _LCD_write_data
	.dbline 152
	mov R16,R20
	subi R16,208    ; addi 48
	xcall _LCD_write_data
	.dbline 153
L21:
	.dbline -2
L19:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r num_l 22 c
	.dbsym r num_h 10 c
	.dbsym r num 20 c
	.dbsym r position 22 c
	.dbend
	.dbfunc e disp_init _disp_init fV
	.even
_disp_init::
	.dbline -1
	.dbline 157
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 158
; }
	ldi R24,255
	out 0x1a,R24
	.dbline 160
; }
; }
	sts 100,R24
	.dbline 162
; }
; }
	ldi R16,48
	xcall _LCD_write_code
	.dbline 163
; }
	ldi R16,1
	xcall _LCD_write_code
	.dbline 164
; }
	ldi R16,6
	xcall _LCD_write_code
	.dbline 165
; }
	ldi R16,12
	xcall _LCD_write_code
	.dbline -2
L22:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfile E:\icc\eeprom/eeprom_init.h
	.dbfunc e error _error fV
;           type -> R16
	.even
_error::
	xcall push_gset1
	.dbline -1
	.dbline 16
	.dbline 17
	mov R20,R16
	clr R21
	andi R20,248
	andi R21,0
	cpi R20,48
	ldi R30,0
	cpc R21,R30
	breq L28
	ldi R24,48
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L32
L31:
	cpi R20,32
	ldi R30,0
	cpc R21,R30
	breq L27
	xjmp L24
L32:
	cpi R20,56
	ldi R30,0
	cpc R21,R30
	breq L25
	cpi R20,56
	ldi R30,0
	cpc R21,R30
	brlt L24
L33:
	cpi R20,72
	ldi R30,0
	cpc R21,R30
	breq L30
	xjmp L24
X1:
	.dbline 18
L27:
	.dbline 21
	ldi R24,148
	sts 116,R24
	.dbline 22
	xjmp L25
L28:
	.dbline 25
	ldi R24,148
	sts 116,R24
	.dbline 26
	xjmp L25
X2:
	.dbline 28
L30:
	.dbline 31
	ldi R24,148
	sts 116,R24
	.dbline 32
L24:
L25:
	.dbline -2
L23:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r type 16 c
	.dbend
	.dbfunc e twi_write _twi_write fc
;             dd -> R20
;           addr -> R22
	.even
_twi_write::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 37
	.dbline 38
	ldi R24,2
	sts 112,R24
	.dbline 40
	ldi R24,164
	sts 116,R24
L35:
	.dbline 41
L36:
	.dbline 41
	lds R2,116
	sbrs R2,7
	rjmp L35
	.dbline 42
	lds R24,113
	andi R24,248
	cpi R24,8
	breq L38
	.dbline 42
	.dbline 43
	lds R16,113
	xcall _error
	.dbline 44
	clr R16
	xjmp L34
L38:
	.dbline 47
	ldi R24,160
	sts 115,R24
	.dbline 48
	ldi R24,132
	sts 116,R24
L40:
	.dbline 49
L41:
	.dbline 49
	lds R2,116
	sbrs R2,7
	rjmp L40
	.dbline 50
	lds R24,113
	andi R24,248
	cpi R24,24
	breq L43
	.dbline 50
	.dbline 51
	lds R16,113
	xcall _error
	.dbline 52
	clr R16
	xjmp L34
L43:
	.dbline 55
	sts 115,R22
	.dbline 56
	ldi R24,132
	sts 116,R24
L45:
	.dbline 57
L46:
	.dbline 57
	lds R2,116
	sbrs R2,7
	rjmp L45
	.dbline 58
	lds R24,113
	andi R24,248
	cpi R24,40
	breq L48
	.dbline 58
	.dbline 59
	lds R16,113
	xcall _error
	.dbline 60
	clr R16
	xjmp L34
L48:
	.dbline 64
	sts 115,R20
	.dbline 65
	ldi R24,132
	sts 116,R24
L50:
	.dbline 66
L51:
	.dbline 66
	lds R2,116
	sbrs R2,7
	rjmp L50
	.dbline 67
	lds R24,113
	andi R24,248
	cpi R24,40
	breq L53
	.dbline 67
	.dbline 68
	lds R16,113
	xcall _error
	.dbline 69
	clr R16
	xjmp L34
L53:
	.dbline 73
	ldi R24,148
	sts 116,R24
	.dbline 74
	ldi R16,1
	.dbline -2
L34:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r dd 20 c
	.dbsym r addr 22 c
	.dbend

⌨️ 快捷键说明

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