📄 at24c02.lis
字号:
.module AT24C02.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
0000 _tabel::
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
000A 777C .byte 'w,124
000C 395E .byte 57,94
000E 7971 .byte 'y,'q
0010 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
0010 .dbsym s tabel _tabel Ac[16:16]
.area data(ram, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
0000 _ledbuff::
0000 .blkb 2
.area idata
0000 3F3F .byte 63,63
.area data(ram, con, rel)
0002 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
0002 .blkb 2
.area idata
0002 3F3F .byte 63,63
.area data(ram, con, rel)
0004 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
0004 .blkb 2
.area idata
0004 0000 .byte 0,0
.area data(ram, con, rel)
0006 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
0006 .dbsym s ledbuff _ledbuff Ac[6:6]
.area text(rom, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
0000 .dbfunc s port_init _port_init fI
.even
0000 _port_init::
0000 .dbline 22{
; /**********************************************
; http://www.sl.com.cn
; 双龙电子公司----I2C总线演示程序(ICCAVR)
; 作者:詹卫前
; 1、以访问AT24C02为例
; 2、SDA :PORTA.0
; 3、SCL : PORTA.1
; **********************************************/
; #include <io8515.h>
; #include <slavr.h>
; /* 七段译码字形表 */
; #pragma data:code
; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; #pragma data:data
; /* 显示缓冲区 */
; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x00,0x00};
; unsigned char at24_add,at24_data;
; /******************************************
; 端口初始化
; *******************************************/
; void port_init(void)
; {
0000 .dbline 23
; DDRD=0x3f;
0000 8FE3 ldi R24,63
0002 81BB out 0x11,R24
0004 .dbline 24
; DDRB=0xff;
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 .dbline 25
; PORTD=0xff;
0008 82BB out 0x12,R24
000A .dbline 26
; PORTB=0xff;
000A 88BB out 0x18,R24
000C .dbline 27}
; }
000C L1:
000C 0895 ret
000E .dbfunc s display _display fI
; i -> R20
.even
000E _display::
000E 00D0 rcall push_gset1
0010 .dbline 32{
; /******************************************
; 六路动态扫描显示电路
; *******************************************/
; void display(void)
; {
0010 .dbline 34
; unsigned char i;
; i=at24_data%16;
0010 10E1 ldi R17,16
0012 00910000 lds R16,_at24_data
0016 00D0 rcall mod8u
0018 402F mov R20,R16
001A .dbline 35
; ledbuff[0]=tabel[i];
001A 80E0 ldi R24,<_tabel
001C 90E0 ldi R25,>_tabel
001E 242E mov R2,R20
0020 3324 clr R3
0022 280E add R2,R24
0024 391E adc R3,R25
0026 E22D mov R30,R2
0028 F32D mov R31,R3
002A C895 lpm
002C 00920000 sts _ledbuff,R0
0030 .dbline 36
; i=at24_data/16;
0030 10E1 ldi R17,16
0032 00910000 lds R16,_at24_data
0036 00D0 rcall div8u
0038 402F mov R20,R16
003A .dbline 37
; ledbuff[1]=tabel[i];
003A 80E0 ldi R24,<_tabel
003C 90E0 ldi R25,>_tabel
003E 242E mov R2,R20
0040 3324 clr R3
0042 280E add R2,R24
0044 391E adc R3,R25
0046 E22D mov R30,R2
0048 F32D mov R31,R3
004A C895 lpm
004C 00920100 sts _ledbuff+1,R0
0050 .dbline 38
; i=at24_add%16;
0050 10E1 ldi R17,16
0052 00910100 lds R16,_at24_add
0056 00D0 rcall mod8u
0058 402F mov R20,R16
005A .dbline 39
; ledbuff[2]=tabel[i];
005A 80E0 ldi R24,<_tabel
005C 90E0 ldi R25,>_tabel
005E 242E mov R2,R20
0060 3324 clr R3
0062 280E add R2,R24
0064 391E adc R3,R25
0066 E22D mov R30,R2
0068 F32D mov R31,R3
006A C895 lpm
006C 00920200 sts _ledbuff+2,R0
0070 .dbline 40
; i=at24_add/16;
0070 10E1 ldi R17,16
0072 00910100 lds R16,_at24_add
0076 00D0 rcall div8u
0078 402F mov R20,R16
007A .dbline 41
; ledbuff[3]=tabel[i];
007A 80E0 ldi R24,<_tabel
007C 90E0 ldi R25,>_tabel
007E 242E mov R2,R20
0080 3324 clr R3
0082 280E add R2,R24
0084 391E adc R3,R25
0086 E22D mov R30,R2
0088 F32D mov R31,R3
008A C895 lpm
008C 00920300 sts _ledbuff+3,R0
0090 .dbline 42
; for (i=0;i<6;i++)
0090 4427 clr R20
0092 16C0 rjmp L9
0094 L6:
0094 .dbline 43
0094 .dbline 44
0094 80E0 ldi R24,<_ledbuff
0096 90E0 ldi R25,>_ledbuff
0098 E42F mov R30,R20
009A FF27 clr R31
009C E80F add R30,R24
009E F91F adc R31,R25
00A0 2080 ldd R2,z+0
00A2 28BA out 0x18,R2
00A4 .dbline 45
00A4 01E0 ldi R16,1
00A6 142F mov R17,R20
00A8 00D0 rcall lsl8
00AA 202E mov R2,R16
00AC 2094 com R2
00AE 22BA out 0x12,R2
00B0 .dbline 46
00B0 00D0 rcall _delay_1ms
00B2 .dbline 47
00B2 01E0 ldi R16,1
00B4 142F mov R17,R20
00B6 00D0 rcall lsl8
00B8 22B2 in R2,0x12
00BA 202A or R2,R16
00BC 22BA out 0x12,R2
00BE .dbline 48
00BE L7:
00BE .dbline 42
00BE 4395 inc R20
00C0 L9:
00C0 .dbline 42
00C0 4630 cpi R20,6
00C2 40F3 brlo L6
00C4 .dbline 49}
; {
; PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
; PORTD=~(1<<i); //开始显示
; delay_1ms(); //每一位显示保持一定时间
; PORTD|=(1<<i); //关闭显示
; }
; }
00C4 L2:
00C4 00D0 rcall pop_gset1
00C6 0895 ret
00C8 .dbsym r i 20 c
00C8 .dbfunc s main _main fI
; index -> R22
; flag -> R10
; key1 -> R12
; key2 -> R14
.even
00C8 _main::
00C8 2197 sbiw R28,1
00CA .dbline 62{
; /******************************************
; 主程序功能:演示了读写AT24C02的过程
; 说明:1、键盘上0~F键用于输入地址或数据,
; SHIFT键用于切换状态
; 2、上电复位后,按数字键只可以修改地
; 址,程序自动显示AT24C02单元内容。
; 3、按一次SHIFT键,最高位LED小数点亮
; 此时可以修改数字,再按一次SHIFT键
; 程序将修改后的数字写入AT24C02,然
; 后回到上电复位后的状态
; *******************************************/
; void main(void)
; {
00CA .dbline 65
; unsigned char key1,key2;
; unsigned char index,flag;
; MCUCR=0;
00CA 2224 clr R2
00CC 25BE out 0x35,R2
00CE .dbline 66
; at24_add=0;
00CE 20920100 sts _at24_add,R2
00D2 .dbline 67
; at24_data=0;
00D2 20920000 sts _at24_data,R2
00D6 .dbline 68
; index=0;
00D6 6627 clr R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -